第一个Scrapy程序

匿名 (未验证) 提交于 2019-12-02 23:51:01

Scrapy 是用 Python 实现的一个爬虫应用框架。
Scrapy 常应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。

  • Scrapy Engine(引擎): 负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。

  • Scheduler(调度器): 它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。

  • Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理,

  • Spider(爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器).

  • Item Pipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方。

  • Downloader Middlewares(下载中间件):你可以当作是一个可以自定义扩展下载功能的组件。

  • Spider Middlewares(Spider中间件):你可以理解为是一个可以自定扩展和操作引擎和Spider中间通信的功能组件(比如进入Spider的Responses;和从Spider出去的Requests)

安装scrapy
pip install scrapy 
创建一个项目

scrapy startproject 项目名

scrapy startproject my_spider 


项目目录

在settings里将ROBOTSTXT_OBEY设置为false
ROBOTSTXT_OBEY 是设置是否遵循网站的robots协议,robots协议是网站设置允许或禁止哪些爬虫,所以一般都设置为false

ROBOTSTXT_OBEY = False 
创建爬虫

以智通人才招聘为例

新建的爬虫文件

# -*- coding: utf-8 -*- import scrapy   class JobspiderSpider(scrapy.Spider):     name = 'jobspider'     allowed_domains = ['www.job5156.com/s/result/kt0_kw-python/']     start_urls = ['http://www.job5156.com/s/result/kt0_kw-python//']      def parse(self, response):     	# 处理request请求url之后的响应对象         pass 

写parse函数
parse是用来处理请求之后的响应对象(即response)的
先测试一下,获取第一个职位的名称

    def parse(self, response):         """         解析url返回的响应对象         匹配下一次要访问的路径         提取item         :param response:         :return:         """         print("#####################")         # print(response)         ret = response.selector.xpath('//ul[@class="position_content"]/li[1]/div/div[2]/div/p/a/@title').extract()          print(ret)         print("#####################") 

使用命令行启动
输出的内容比较多,所以使用###############提示

scrapy crawl 爬虫名称 



成功获取,现在来获取详细的信息并写入到csv文件
先在items里定义要抓取的数据字段

class MySpiderItem(scrapy.Item):     # define the fields for your item here like:     # name = scrapy.Field()      # 岗位名称     position = scrapy.Field()     # 职位网址     position_url = scrapy.Field()     # 薪水     salary = scrapy.Field()     # 公司名称     company = scrapy.Field()     # 公司主营业务     professional_work = scrapy.Field()     # 更新时间     update_time = scrapy.Field()     # 公司福利     welfare = scrapy.Field()     # 招聘要求     require = scrapy.Field() 

parse抓取数据

    def parse(self, response):         """         解析url返回的响应对象         匹配下一次要访问的路径         提取item         :param response:         :return:         """         print("#####################")         # print(response)          position_node_list = response.xpath('//ul[@class="position_content"]/li')         items = []          for position_node in position_node_list:             # 获取详细信息             position = position_node.xpath('./div/div[2]/div/p/a/@title').extract()             position_url = position_node.xpath('./div/div[2]/div/p/a/@href').extract()             salary = position_node.xpath('./div/div[2]/div/span/text()').extract()             company = position_node.xpath('./div/div[2]/a[@class="com_name"]/@title').extract()             require = position_node.xpath('./div/div[3]/div/text()').extract()             # 主要业务             professional_work = position_node.xpath('./div/div[3]/p/span/text()').extract()             update_time = position_node.xpath('./div/div[4]/p/span/text()').extract()             welfare_node = position_node.xpath('./div/div[4]/div')              welfare = welfare_node[0].xpath('./span/text()').extract()              # 实例化MySpiderItem()对象             item = MySpiderItem()             item['position'] = position[0]             item['position_url'] = position_url[0]             item['salary'] = salary[0]             item['company'] = company[0]             item['require'] = require[0].strip().replace(' ', '').replace('\r\n', '')             item['professional_work'] = professional_work[0]             item['update_time'] = update_time[0]             item['welfare'] = welfare             items.append(item)                  # 抛出items,保存到csv         return items 

运行程序并保存到csv文件

scrapy crawl jobspider -o 文件路径 


出现如下界面就爬取成功

出现job.csv文件

csv数据

文章来源: https://blog.csdn.net/kylinxjd/article/details/96966288
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!