使用scrapy的注意点

127 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第13天,点击查看活动详情

之前的文章中分享了如何使用python中scrapy框架实现分布式爬虫,根据豆瓣网举例如何创建一个爬虫的项目 。今天分享一些scrapy中需要注意的地方以及如何设置管道的开启等等

1.scrapy框架中各模块的作用

image.png

引擎(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增量式爬虫等。