开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第13天,点击查看活动详情
之前的文章中分享了如何使用python中scrapy框架实现分布式爬虫,根据豆瓣网举例如何创建一个爬虫的项目 。今天分享一些scrapy中需要注意的地方以及如何设置管道的开启等等
1.scrapy框架中各模块的作用
引擎(engine):负责数据和信号在不同模块间的传递
调度器(scheduler):实现一个队列,存放引擎发过来的request请求对象
下载器(downloader):发送引擎发过来的request请求,获取响应,并将响应交给引擎
爬虫(spider):处理引擎发过来的response,提取数据,提取url,并交给引擎 管道(pipeline):处理引擎传递过来的数据,比如存储 下载 中间件(downloader middleware):可以自定义的下载扩展,比如设置代理ip 爬虫中间件(spider middleware):可以自定义request请求和进行response过滤
2.异步和非阻塞的区别
什么是异步?什么是非阻塞?一句话解决:异步是指爬虫抓取的过程,而非阻塞是指程序运行的状态
3.scrapy中的注意点
(1) response.xpath方法的返回结果是一个类似list的类型,其中包含的是selector对象,操作和列表一样,但是有一些额外的方法
(2) extract() 返回一个包含有字符串的列表
(3) extract_first() 返回列表中的第一个字符串,列表为空没有返回None
(4) spider中的parse方法必须有
(5) 需要抓取的url地址必须属于allowed_domains,但是start_urls中的url地址没有这个限制
(6) 启动爬虫的时候注意启动的位置,是在项目路径下启动
(7)在爬虫文件Sixstar.py中parse()函数中最后添加yeid item
4.让整个函数变成一个生成器,有什么好处呢?
遍历这个函数的返回值的时候,挨个把数据读到内存,不会造成内存的瞬间占用过高python3中的range和python2中的xrange同理
注意:yield能够传递的对象只能是:BaseItem,Request,dict,None**
5.setting中开启管道
ITEM_PIPELINES = {
'myspider.pipelines.doubanPipeline': 400
}
6.运行scrapy中的爬虫文件
命令:在项目目录下执行scrapy crawl +<爬虫名字>
示例:scrapy crawl douban
本次抓取的数据是保存在本店的MySQL数据库中,后面的文章中会分享如何实现数据的翻页抓取以及scrapy-redis增量式爬虫等。