目录
1. Scrapy介绍
1.1 什么是Scrapy
1.2 爬虫的几种工作模式
2. Scrapy的工作流程
3.Scrapy入门
4. pipline使用
Scrapy是⼀个为了爬取⽹站数据,提取结构性数据⽽编写的应⽤框架,我们只需要实现少量的代码,就能够快速的抓取
异步和⾮阻塞的区别:
异步:调⽤在发出之后,这个调⽤就直接返回,不管有⽆结果
⾮阻塞:关注的是程序在等待调⽤结果时的状态,指在不能⽴刻得到结果之
前,该调⽤不会阻塞当前线程
Scrapy engine(引擎) | 总指挥:负责数据和信号的在不同模块间的传递 | scrapy已经实现 |
Scheduler(调度器) | ⼀个队列,存放引擎发过来的request请求 | scrapy已经实现 |
Downloader(下载器) | 下载把引擎发过来的requests请求,并返回给引擎 | scrapy已经实现 |
Spider(爬⾍) | 处理引擎发来的response,提取数据,提取url,并交给引擎 | 需要⼿写 |
Item Pipline(管道) |
处理引擎传过来的数据,⽐如存储 | 需要⼿写 |
Middlewares(下载中间件) | 可以⾃定义的下载扩展,⽐如设置代理 |
⼀般不⽤⼿写 |
Spider Middlewares(中间件) |
可以⾃定义requests请求和进⾏response过滤 | ⼀般不⽤⼿写 |
1. 创建一个爬虫项目
在编译器或命令提示符中输入 scrapy startproject myspider(myspider是项目文件夹名称,可自定义)
2. 生成一个爬虫
首先进入myspider文件夹中:终端输入cd myspider
然后输入命令 scrapy genspider douban douban.com(douban是设置的爬虫文件名称,后面是要爬取的网址域名,这里以豆瓣网为例)
3.提取数据
完善spider,前面我们说spider的作用是处理引擎发来的response,提取数据,提取url,并交给引擎,需要我们手动写入。可以利用xpath,css,bs4等
4.保存数据
在pipeline中保存数据
5.在命令中运行爬虫
与一般爬虫不同的是,使用scrapy来运行爬虫不能直接在编译器中点击运行,而是在终端输入:
scrapy crawl douban(douban是爬虫文件的名称,自定义)
6.在编译器中运行爬虫
如果一定要在编译器直接运行爬虫也不是没有办法,我们可以新建一个py文件,在里面写入:
from scrapy import cmdline
cmdline.execute("scrapy crawl douban".split()) # 同上,douban是爬虫的名称
#也可写为 cmdline.excute(['scrapy','crawl','douban'])
创建myspider时会在myspider文件夹中生成spiders文件夹(生成的douban.py就在其中)以及spipline.py文件、pipline.py文件、middlewares.py文件等。上面提到保存数据是在pipline.py文件中执行的。
在运行pipline.py之前,我们还需要在settings.py中找到如下所示代码,将其打开(原本处于注释状态):
从pipeline的字典形可以看出来,pipeline可以有多个,⽽且确实pipeline能够
定义多个
为什么需要多个pipeline:
1. 可能会有多个spider,不同的pipeline处理不同的item的内容
2. ⼀个spider的内容可以要做不同的操作,⽐如存⼊不同的数据库中
注意:
1. pipeline的权重越⼩优先级越⾼(假设我们再加入'dbspider.pipelines.DbspiderPipeline':301,那么按照优先级就会先执行mySpider中的spider)
2. pipeline中process_item⽅法名不能修改为其他的名称(其实也是可以修改的,但并不建议这么做)
以上是对Scrapy框架的简单介绍,通过对上述内容的理解可以帮助我们简单的实现运用Scrapy来爬取信息的目的。然而仅仅是这样还不足以体现Scrapy框架的强大功能,后续将继续对Scrapy框架做拓展和实例
有兴趣可以参考Scrapy的中文文档:http://scrapy-chs.readthedocs.io/zh_CN/1.0/intro/overview.html
官方文档也在此给出:https://docs.scrapy.org/en/latest/