一、创建Srapy项目
(1)创建scrapy项目
scrapy startproject Tencent # 项目名字是Tencnet
(2) 进入Tencent文件夹,执行下面代码,创建spider爬虫
scrapy genspider tencent careers.tencent.com #careers.tencent.com是网址
会生成一个下面名为tencent.py的文件
import scrapy
class Tencent1Spider(scrapy.Spider):
name = 'tencent'
allowed_domains = ['careers.tencent.com']
start_urls = ['http://careers.tencent.com/']
def parse(self, response):
pass
name是我们的爬虫名;
allowed_domains是域名,也就是爬虫爬取的范围;
start_urls是爬虫最开始爬取的URL链接;
parse()是用来解析响应、提取数据,比如Xpath等操作。这个文件是我们的主干文件
(3)执行文件,存入到csv文件种
scrapy crawl tencent -o tencent.csv #scrapy crawl tencent是运行tencent文件
二、Scrapy结构文件介绍
scrapy的主要组件包括Spiders、Engine、Scheduler、Downloader以及Item pipeline,其中Engine控制所有数据在各组件之间的流动,一个爬虫请求在Scrapy当中的处理过程大致如下:
- Engine从Spider接收到第一个Request
- Engine将刚刚接收到的Request转发至Scheduler队列当中,同时询问- - Scheduler下一个将要爬取的Request(异步执行)
- Scheduler将队列当中下一个Request发送给Engine
- Engine将Request转发至Downloader,Downloader根据Request的信息获取网站内容
- Downloader获取了完整的网站信息,生成一个Response返回给Engine
- Engine将Response转发给Spider
- Spider获得Response并对其进行处理,处理完Response之后生成Item(结构化数据),或者根据新的ulr返回Request,将其发送到Engine
- Engine将Item转发至Item Pipeline当中,Item Pipeline将会对Item做数据加工、数据转储等处理,同时Engine将接收到的Request转发至Scheduler队列当中
- 从第1步开始重复执行,直到Scheduler队列当中没有Request需要处理为止
组件功能:
- Engine: 控制数据在scrapy当中的流向,并在相应动作时触发时间。例如Engine会将Scheduler队列当中的下一个Request转发至Downloader当中,在转发Request、Response至Spider之前先调用中间件
- Spider: 用户编写的用于处理网页内容并提取Item/Request的组件,scrapy当中可以有多个Spider,每个Spider负责一种特定类型的网页或网站。在Spider当中用户需要定义网页的解析逻辑,构造Item或者是构造更深层网页的Request,同时可以在Spider当中定义针对单个Spider的配置,配置包括绑定特定的中间件、Item pipeline,以及配置并发参数等
- Scheduler: 调度器从Engine接收Request并将其加入到队列当中,调度器当中主要包含指纹过滤器以及队列功能组件,其中指纹过滤器用于过滤重复的Request请求,队列用于排队Request任务
- Downloader: 下载器的功能非常简单,根据接收到的Request请求,访问相应的地址获取网页内容,Downloader是通过将Request任务注册到Twisted的Reactor来实现并发获取网页内容的
- Item pipeline: 负责处理被Spider提取出的Item,例如针对Item做格式转换,写入文件,存入数据库
scrapy.cfg: 项目的配置文件。
scrapyspider/: 该项目的python模块。之后您将在此加入代码。
scrapyspider/items.py: 项目中的item文件。
scrapyspider/pipelines.py: 项目中的pipelines文件。
scrapyspider/settings.py: 项目的设置文件。
scrapyspider/spiders/: 放置spider代码的目录。
参考文献
https://www.jianshu.com/p/60f449e04be6