Scrapy爬虫的5+2结构
- Engine 不需要用户修改
控制所有模块之间的数据流
根据条件触发事件 - Downloader 不需要用户修改
根据请求下载网页 - Scheduler 不需要用户修改
对所有爬取请求进行调度管理 - Downloader Middleware 用户可以编写配置代码
目的:实施Engine、Scheduler和Downloader之间进行用户可配置的控制
功能:修改、丢弃、新增请求或响应 - Spider 需要用户编写配置代码
解析Downloader返回的响应(Response)
产生爬取项(scrapy item)
产生额外的爬取请求(Request) - Item PipeLines 需要用户编写配置代码
以流水线方式处理Spider产生的爬取项
由一组操作顺序组成,类似流水线,每个操作是一个Item PipeLine类型
可能的操作包括:清理、检验和查重爬取项中的HTML数据、将数据存储到数据库 - Spider Middleware 用户可以编写配置代码
目的:对请求和爬取项的再处理
功能:修改、丢弃、新增请求或爬取项
Requests vs. Scrapy
-
相同点:
两者都可以进行页面请求和爬取,Python爬虫的两个重要技术路线
两者可用性都好,文档丰富,入门简单
两者都没有处理js、提交表单、应对验证码等功能(可扩展) -
不同点:
-
如何选择:
非常小的需求:requests库
不太小的需求:Scrapy框架
定制程度很高的需求(不考虑规模),自搭框架:requests>Scrapy
Scrapy爬虫的产生步骤
步骤一:建立一个Scrapy爬虫工程
命令行输入:
scrapy startproject python123demo
生成的工程目录:
-
python123demo/ —>外层目录
-
scrapy.cfg —>部署Scrapy爬虫的配置文件
-
python123demo/ —>Scrapy框架的用户自定义Python代码
-
init.py —>初始化脚本
-
items.py —>Items代码模板(继承类)
扫描二维码关注公众号,回复: 5827349 查看本文章 -
middlewares.py —>Middlewares代码模板(继承类)
-
pipelines.py —>Pipelines代码模板(继承类)
-
settings.py —>Scrapy爬虫的配置文件
-
spiders/ —>Spiders代码模板目录(继承类)
-
init.py —>初始文件,无需修改
-
pycache/ —>缓存目录,无需修改
步骤二:在工程中产生一个Scrapy爬虫
命令行:
scrapy genspider demo python123.io
import scrapy
class DemoSpider(scrapy.Spider):
name = 'demo'
allowed_domains = ['python123.io']
start_urls = ['http://python123.io/']
def parse(self, response):
pass
parse()用于处理响应,解析内容形成字典,发现新的URL爬取请求
步骤三:配置产生的Spider爬虫
import scrapy
class DemoSpider(scrapy.Spider):
name = 'demo'
#allowed_domains = ['python123.io']
start_urls = ['http://python123.io/ws/demo.html']
def parse(self, response):
fname = response.url.split('/')[-1]
with open(fname,'wb') as f:
f.write(response.body)
self.log('Saved file %s.' % name)
pass
步骤四:运行爬虫,获取网页
命令行:
scrapy crawl demo