关于Scrapy框架

1、安装:

在配置好Python3的环境以后,能够在cmd或者编辑器的终端窗口里使用pip3 list查看已安装的Python模块。
安装scrapy框架:
Windows上:在cmd或者编辑器的终端窗口里使用pip3 install scrapy,等待提示便可完成。输入scrapy -v能够查看版本以及帮助命令。如图:
html

使用scrapy startproject projectname能够建立爬虫项目,建立完成以后会出现以下图所示的文件结构:
注:红色方框所标记的文件夹不会被建立,它与scrapy无关,只是在vscode中的一些运行配置文件,能够忽略。

mySpider文件夹下面有一个spiders子文件夹和五个.py文件和一个.cfg文件。这里对结构作一个简要介绍。spiders文件夹下面是爬虫文件,__init__.py为此项目的模块文件,默认为空,暂时不用。items.py主要用来定义咱们须要获取的数据。middlewares.py中间件文件,主要用来定义下载中间件和爬虫中间件的内容。pipelines.py处理获取到数据的文件。settings.py为项目配置文件,能够对项目进行一些自定义设置,好比开启或者关闭中间件,日志警告等级,启用或者关闭pipelines,以及其优先级的设置,是否开启cookies等。scrapy.cfg内的内容为下图: shell

默认为本项目的 settings.py,项目为建立的项目名称。

使用 scrapy genspider spidername domain[starturl]能够建立一个爬虫,使用命令以后如图:

使用scrapy crawl spidername能够启动爬虫项目。浏览器

2、数据流向:

关于数据流向总体大体分为5个部分:
一、Scheduler:常称为调度器,存放Requests对象,其中包括url地址、headerspost数据,cookies、代理等等。Scheduler会将Requests对象经过Engine发送到Downloader模块进行处理。
二、Downloader:常称为下载器,此模块在得到Requests对象以后会对服务器发送请求,而且获得Response,随后将Response经过Engine发送给Spiders模块。
三、Spiders:此模块用于提取所须要的数据,能够分为两个部分。第一部分,提取urlheaderscookispost等数据组装成Requests对象经过Engine发给调度器。第二部分,将提取到有用的数据经过Engine传递到Item Pipeline模块。
四、Item Pipeline:将爬取到的数据列入一个队列,另外是对爬取到的数据进行保存和其余的一些操做。
五、Scrapy Engine:为整个框架的调度,传递各个模块之间的数据,使得其余4个模块相互独立。除过Item Pipeline,每一个模块会首先将数据传给Scrapy Engine,而后由Scrapy Engine传递给下一个模块。大体的数据流以下图:
服务器

DownloaderEngine之间存在一个 Downloader Middlewares称为下载中间件,能够对本身的 Requests请求做出一些修改,好比设置代理 IP,修改 UA等。在这里 RequestsResponse都是通过这个组件的。

SpidersEngine之间存在着一个 Spider Middlewares称为爬虫中间件,处理来自 DownloaderResponse,能够对组成的 Requests对象进行一些过滤操做。在这里 Spider Middlewares不对想要获得的数据进行处理,由于有专门的 Item Pipeline模块对想要获得的数据进行处理。

3、各个模块的介绍:

一、关于Scrapy Engine模块,这一部分在项目创建的时候其实已经实现好了,不用咱们再去手动编写,对于数据在各个模块之间的流动,Scrapy Engine会自行进行调度。
二、调度器主要是处理来处理创建爬虫开始的url地址和通过组装以后的Requests对象,将其列成一个队列,有序的送给Scrapy Engine交给下一个模块。在传递给下载器以前会先通过下载中间件,若是开启了Downloader Middlewares组件的话,对象会先通过这个组件进行处理,作出相应的自定义修改,而后给下载器想服务器发送请求。
三、下载器想服务器发送请求以后,服务器会给咱们一个响应,这个响应能够经过response.text查看,返回的是一个网页的源代码(Ajax请求的方法可能另有不一样),而后可使用正则或者Xpath选择器对须要的数据进行提取。随后将响应结果交还给Engine,再由Engine交给spider
四、在交给spider以前会有一个爬虫中间件,默认是关闭状态的。通常不用,并且在中间件中内置了一些方法,能够在作出相应操做的时候对方法进行调用。在middlwares.py文件中有相应的模板。通过中间件以后就到了spider模块了,这个地方是须要咱们编写的,由于对于每次数据的获取均可能不太同样,因此要作出相应的改变。主要就是在咱们新建的爬虫文件下的parse方法下进行处理获得数据。本身能够新建方法,可是这个方法不能被更名,并且是经过这个方法来将item数据传给pipeline的。
五、pipeline模块主要是对拿到的数据进行处理,而在settings.py文件中,pipeline模块是默认关闭的,因此须要手动开启。取消掉pipeline的注释便可。pipeline里的默认内容以下图: cookie

而在 settings.py文件中有 ITEM_PIPELINES这个项目,而且是个字典,键为一个 pipeline类,意味着在管道处理模块能够设置多个 pipeline来处理数据,一方面是处理来自不一样爬虫文件的数据,能够经过爬虫类的 name属性来判断是哪一个爬虫,以此来作出相应的数据处理。另外一方面就是对于一个爬虫来讲能够创建多个 pipeline来处理数据,假设一个 pipeline对数据进行处理,另一个 pipeline对数据进行保存工做。而这个字典的值就是当前 pipeline的优先级,数字越小说明优先级越高,就越早执行。
两个中间件暂时不用,用到的时候再解释。

4、关于所建立的爬虫的结构和方法:

在使用scrapy genspider spidername以后,会在spider目录下建立一个spidernamepy文件,这个文件就是须要编写爬虫的地方,在建立好了爬虫文件以后如图: 框架

这是一个 DtyySpider类,下面有三个属性和一个方法,这个 parse方法就是处理来自引擎的 response。类的 name属性为这个爬虫的名称,以后可使用 scrapy crawl dytt能够启动当前爬虫,固然这个属性还能够用来判断是哪一个爬虫,能够在一个框架下面建立多个不一样的爬虫。经过 name属性来判断是哪一个爬虫,而后能够在 pipeline里面对不一样的爬虫作相应的处理。

这里建议使用scrapy shell url进行调试,这里能够调试本身的正则、CSSXpath等语句是否正确,查看是否能够准确的提取到数据。而后再运行爬虫便可,这样作的好处是,在没有配置IP池的状况下,能够不用对网址进行请求,防止请求屡次以后被网站禁封IP
dom

这里先对咱们建立的爬虫文件进行讲解:

以前粗略的讲过这个类里面的属性和方法,这里详细讲解一下。
爬虫如何建立以及建立以后默认内容是什么上面已经说了。首先就是DyttSpider这个类,继承的是scrapy.Spider这个类,有兴趣的能够看看源码,这里再也不多说。allowed_domains属性就是这个爬虫能够爬取的域名范围。start_urls就是这个爬虫开始的url地址。下面的parse方法就是对返回结果进行处理的函数,并且返回结果保存在response里面,咱们可使用正则、XpathCSS选择器等方法提取到咱们想要的值。 这里使用一个我本身作过的例子来说解:
我这里是对电影天堂电影信息的爬取,大约200余页的电影信息。代码如图:异步



对于非Ajax请求的网址,reponse能够返回咱们在网页上看到的内容,经过一个按钮会跳转到另一个html页面,一样的仍是能够在源代码中看见网页上的内容。
然而对于Ajax形式的请求,在网页源代码处不能直接看到,是经过js进行异步加载的,意思就是在浏览器地址栏的那个网址不是咱们须要请求的网址,真正的网址须要在开发者工具经过抓包找到,而后对真正的url地址进行请求。
这个时候对于新找到的url可能为get请求,也可能为post请求,要看清楚,而后再进行操做。scrapy

这个帖子主要是做为本身的笔记用的,若是有人看更好,但愿能帮到你吧! 我也是新手一枚,还请各位大佬多多批评指正。 将持续更新......
相关文章
相关标签/搜索