2020/04/10 01-scrapy框架概述和编程流程

Scrapy这个框架帮我们把爬取的流程都做好架子了,我们只需要把其中的内容填充好,流程的脚手架定义好了。

在这里插入图片描述

是高效的异步网络框架,django是什么都有,别人才去选择,flask可以作为微框架,需要什么功能需要第三方插件即可。
scrapy是在爬虫领域提供的比较好的处理流程框架,很高效,基于Twisted来写的

在这里插入图片描述
**架构图。
假设从Spiders这边给了一些起始的url,类似创建了一大堆URL,这些起始url通给引擎,甩给Scheduler,Scheduler就是调度器,可以做一些去重的工作,也就是准备好的url都会发给Scheduler,Scheduler使用自己的调度策略,会将你的请求发给下载器Downloader,调度完后,会将数据发给scrapy引擎,引擎穿过一个个中间件,这是下载中间件downloader middlewares,这一块还没下载,跟response无关,这些请求到达Downloader,它就要去互联网爬取内容,爬取内容就完成了任务,response拿到了,这个内容会经过Downloader中间件,回到引擎,引擎再将它调用到spiders上去,到达爬虫前必须经过spider的中间件,spider中间件可以将这些数据再做过滤,最后到达spider。
Downloader是链接internet的,这个spider起始做的就是处理工作,将你返回的response,html正文做处理,处理之后,如果里面要用新的链接,将这些请求再次放到Scheduler,作为再次爬取的东西,还有一部分数据是处理完的,这些数据称为item,最后会把这些数据发给item的pipeline,这些pipeline是一环套一环,是串行的结构,第一个item处理完可以交给第二个item,第二个item处理完可以交给第三个item,这item经过了pipline的item会挨个处理。就是流水线操作,数据依次处理,只是从spider粗略提取了一些数据,这个数据就需要我们后面处理掉,要做更详细的处理。
**
起始的时候会通过引擎将起始的url交给Scheduler,Scheduler会从列表里去调用,把请求发给Downloader,Downloader去从网上下载,最后交给spider进行解析,提取出新的url或者新的一串串里面的内容items,将请求交给Scheduler,下回还继续爬。
然后把需要处理的数据交给item pipeline由这些item挨个把数据处理好,串行的处理好

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
scrapy 引擎,是负责控制数据流在系统总所有组件中流动,并在相应动作发生时触发事件。是整个爬虫 的调度中心,
在这里插入图片描述调度器接收从引擎发来的请求,就是request,并把他们入队,以便之后引擎请求他们时提供给引擎。
调度器把请求交给下载器,初始的url和后续在页面中获取的url都会放到调度器中等待爬取,

在这里插入图片描述
下载器负责获取页面数据并将获取的数据转发给引擎,还要提供给spider,由spider进行数据的分析和处理

在这里插入图片描述
**spider是我们要动手编写的东西,可以在里面分析response里面的内容。下载器替你下载好的内容交给你,你要对它的数据进行分析并提取item(比如新闻链接和title就是item)
额外跟进的URL,将额外跟进的URL提交给引擎,加入到Scheduler调度器中 。每个Scheduler负责处理一个特定(或一些)网站。
**
在这里插入图片描述
spider提取出来是一个个item,item需要交给item pipeline一级一级或者一个接一个的处理,是一个串行的结构。
可以对spider处理下来的item进行一些数据清理。(比如分析item里找到title里含有机器人三个字的)
这就可以交给pipline来做,pipline就是过滤你的数据,还可以做一些丢弃工作。下一级的pipline只能收到上一级抛出来剩下的item。
还可以做一些数据的验证和持久化,当页面被爬虫解析所需的数据存入item后,将被发送到项目管道pipeline,一级一级发过去

在这里插入图片描述
item pipeline的典型应用:
清理html数据
验证爬取的数据(检查item包含某些字段)
查重(或丢弃)
将爬取结果保存到数据库中

在这里插入图片描述
中间还有两个中间件,下载中间件是引擎跟下载器之间的,其实就是拦截器,只要你的函数往这里挂就能够使用了,下载器中间件做的更多的是请求的处理,更多的是更换一些user-agent和ip
在这里插入图片描述
在这里插入图片描述
这就是spider中间件,在引擎和spider之间,特定的钩子,处理spider的输入(通过下载器下载下来,交给引擎,引擎给spider,这是下载器下载好的内容,就是response,response输出内容有两种,一种item处理好的数据,一种是提取好的url,这个url最后还要给scheduler继续调用)item交给item pipeline
在这里插入图片描述
在这里插入图片描述
跟之前一样,所有到视图函数的都会到中间件
在这里插入图片描述
从某一个url开始,不限定的话,会从一个网站爬到另一个网站上去,这样会满世界爬起来。找到处理该网站的spider,获取第一个要爬取的url,一般在spider里会定义一个起始的url,这个url交给downloader爬取,所以将这个url放到scheduler中以备调度,引擎告诉调度器给一个url,调度器返回下一个要爬取的url后,引擎将这个url交给下载中间件并最终到达下载器downloader。
5.一旦下载完,获得该页面的response对象,这个responde对象,最后要通过下载中间件交给引擎,
6.引擎从下载器中接收到response,必须通过spider中间件最终送给spider处理。
7.spider拿到response之后要提取里面的item和新的request url然后给引擎
8.引擎将spider返回的item交给item pipeline,spider返回的request交给调度器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
忽视中间件就是这个走势
在这里插入图片描述
当scheduler里面再没有可爬的url,就停下来
在这里插入图片描述
先记住大概流程再看图

在这里插入图片描述
在这里插入图片描述
安装一下
在这里插入图片描述
scrapy底层要用到比较大的东西,这是异步的基于事件的通信的高效底层模块

在这里插入图片描述
这个安装需要编译

在这里插入图片描述
需要安装它
在这里插入图片描述
只有在windows下会出现这个问题,编译的都可以在这里下载
在这里插入图片描述
然后再install,这样依赖就没有了,scrapy很像django,django提供了很多脚手架的命令
在这里插入图片描述
可以把之前项目的内容删除,试试scrapy有什么命令在这里插入图片描述
在这里插入图片描述
.点号是在当前文件夹做这个项目,不加.点号会在当前文件夹里再建一个项目根目录,再建一个里面再弄东西。现在是利用当前的目录作为项目根目录创建一个first项目。
告诉你创建爬虫就下面这么写

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
二进制编译的字节码缓存,所以不用每次都编译,这样节省时间
在这里插入图片描述
first就是目录
在这里插入图片描述

在这里插入图片描述
spider下只有一个init
在这里插入图片描述
**看图,items跟它相关是个items.py文件,spider目录现在一个爬虫都没有 **
在这里插入图片描述
spider对网站回来的response解析需要你自己写,数据怎么定义的要自己写item,获取的哪些新的url也要自己写,pipeline每一层做什么事情也需要自己写,如果要使用中间件技术,还要写中间件
在这里插入图片描述
对数据如何处理spider是一定要写的,得到的数据如何定义要写item,把数据交给item pipeline,每一个如何处理都要写
在这里插入图片描述
init_.py对于first来讲就是包要用的文件,什么都没有
在这里插入图片描述
items,点开看已经有一个item了,这就是一个模版
在这里插入图片描述
pipeline也是一个脚手架
在这里插入图片描述
settings才是最重要的东西
BOT_NAME机器人的名字

在这里插入图片描述
一般都用user-agent来伪装在这里插入图片描述
这样一写就行了
在这里插入图片描述
遵从robots协议基本上没有网站可以爬了,所以不遵从,爬一些不涉及隐私的
在这里插入图片描述
CONCURRENT_REQUEST并行的请求数,配置一个最大的并行请求树,默认16应该是够了

在这里插入图片描述
3秒发一个请求,不写这个就是1秒尽可能发送请求,几十个肯定没问题,因为是并行,现在设置隔1秒

在这里插入图片描述
一个域允许多少个,一个ip允许多少个,做精细的控制

在这里插入图片描述
缺省是使用cookie的,只要跟用户权限无关可以不用cookie,这个值在处理一些跟用户权限相关的时候,需要session的时候才带上,否则一般都禁用
在这里插入图片描述
改一些头信息可以动这个参数,关键就是user-agent,不改有些网站会抛出异常,400系列的
在这里插入图片描述
下面比较有用,spider中间件,543是一个号,这个号越小越好,越小优先级越高,不要轻易调,因为你写的中间件要在内置的中间件后面

在这里插入图片描述
下载器中间件,到下载器的路上来拦截用的,也是号码越低优先级越高
在这里插入图片描述
中间件可以不用,但是item_pipeline总需要用

在这里插入图片描述
配置好后就可以写爬虫了

在这里插入图片描述
在spiders里去写爬虫
在这里插入图片描述
这里应该有个scrapy,然后scrapy有spider,以它为基类造一个类出来
在这里插入图片描述
在这里插入图片描述
它是对下载完的response进行分析的,不知道写什么到父类里看看
在这里插入图片描述
父类里有name,需要你配置,这就是spider的name名称

在这里插入图片描述
scrapy里有个命令,列出可用的spider在这里插入图片描述
因为没有名字所以没有

在这里插入图片描述
加个名字就有了

在这里插入图片描述
start_urls,就是从什么地方开始,是个列表类型

在这里插入图片描述
下面是从start_urls里去找url,创建一个请求就可以去请求了

在这里插入图片描述
有个方法没实现,一调用就抛出异常了,父类不实现就要让子类去实现了 在这里插入图片描述
至少先def parse在,这些就是我们需要先写的东西
在这里插入图片描述
先不写了
在这里插入图片描述
跟spider相关的有genspider

在这里插入图片描述
在这里插入图片描述
名字跟域必须写,域是来做限制的,不能超了域
在这里插入图片描述
在这里插入图片描述
来看看这个如何使用

在这里插入图片描述
这个跟 模版相关的,现在是创建spider模板

在这里插入图片描述
这些就是模板名字
在这里插入图片描述
选择basic模板,加选项用模板来创建,book是定义spider名称,余douban.com
在这里插入图片描述
现在有个book
在这里插入图片描述
我们把在init里些的删除,不应该在init里写
在这里插入图片描述
没有域,爬取内容就无边无尽了

在这里插入图片描述
启动页,现在拿到数据就要开始访问了
在这里插入图片描述
访问前。先把settings里的user-agent去掉,这样就告诉别人自己是爬虫了
在这里插入图片描述
django部署的时候是用的uwsgi(uwsgi可以认为是socket二进制的),nginx可以做反向代理,动静分离
首先看下有没有,这是你要运行的名字

在这里插入图片描述
crawl爬一下book
在这里插入图片描述
报了个错误

在这里插入图片描述
安装一下
在这里插入图片描述
在这里插入图片描述
告诉你403,就是user-agent的问题

在这里插入图片描述
取消注释user-agent,有了这个就只能头通过行为分析了
在这里插入图片描述
这个值要设定下,不要太快
在这里插入图片描述
-加了user-agent继续来看代码,来看下crawl有没有其他选项
在这里插入图片描述
只关注你想关注,不打印它的东西
在这里插入图片描述
这样阅读起来就方便了
在这里插入图片描述
以前的response也是返回的html,现在还是html
在这里插入图片描述
也就是之前写的爬虫技术现在也可以用
在这里插入图片描述
text跟unicode相关,就是替你转码了
在这里插入图片描述
这个response里也有heade人,meta,cookie一些属性

在这里插入图片描述
现在要爬取第二页
在这里插入图片描述
这个20是第二页
在这里插入图片描述
其实这边提供了一个接口,有一个对图书的isbn的访问接口,这个接口数据还是比较全的

在这里插入图片描述
往95这样的,往太后就不提供我们了

在这里插入图片描述
51页就没了
在这里插入图片描述
也就是到980,1000就没了

在这里插入图片描述
有些网页就限制你看多少页
在这里插入图片描述
还提供了XPath,就可以用Xpath去访问里面的一些任务
在这里插入图片描述
现在要标题和得分

在这里插入图片描述
这就是拿到的title,有20个

在这里插入图片描述
run一下
在这里插入图片描述
这里有很多\n
在这里插入图片描述
这就是选择的XPath,这是选择器选中的内容data
在这里插入图片描述
这个data其实就是想要的东西
在这里插入图片描述
打印一下title
在这里插入图片描述
在这里插入图片描述
有\n是因为有它的问题
在这里插入图片描述
可能就是一些小的字体在捣乱
在这里插入图片描述
去掉一个斜杠
在这里插入图片描述
把后面部分去掉之后看是什么样子,text看到的是纯文本的东西
在这里插入图片描述
现在看到的时候a标签,也就是把a标签里的内容全部拿来了
在这里插入图片描述
现在title是一个元素
在这里插入图片描述
所以title元素也可以调用CSS,XPATh,当前节点是h2,用css3伪元素来取
在这里插入图片描述
这是一个个列表,列表里有两项元素,跟XPath取到的是一样的,可以做一些处理

在这里插入图片描述
用XPath一样取一下
在这里插入图片描述
这里看来算出了另一项来,这样就不太好,不是我们要的内容

在这里插入图片描述
所以我们到a这一层用css3来做,这样得出来是一个列表

在这里插入图片描述
这个断开来后面的内容是无意义的
在这里插入图片描述
所以我们可以第一个列表中的第一项,extract就是抽取
在这里插入图片描述
这是一个可迭代对象。,如果你想把内容合并,就用join链接在一起就行,连起来就是你想要的书名了,但是现在第二项没有用
在这里插入图片描述
现在我们用索引拿第一项,后面就丢掉
在这里插入图片描述
空白字符太多

在这里插入图片描述
用strip把空白字符去掉
在这里插入图片描述
现在就可以了
在这里插入图片描述
现在title得到了,现在需要得到rate得分,这一级多了,可以不要
在这里插入图片描述
这里有class
在这里插入图片描述
现在title就是h2的a下的,rate我们用Xpath,当前下的span节点,class =rating_nums

在这里插入图片描述
再打印rate看看,拿span里面的内容
在这里插入图片描述
我们可以用extract把内容拿出来,这样select就没了
在这里插入图片描述
这样就是抽取第一个

在这里插入图片描述
下面就是如何使用,可以再items里写

在这里插入图片描述
点进去后看到dictitem

在这里插入图片描述
dictitem就告诉它是mapping,自己就是类似字典的东西

在这里插入图片描述在这里插入图片描述
从上一级的items里导入 Firstitem
在这里插入图片描述
这样就需要去爬虫里写东西了,每来一波数据就要进行分析了,它可以当字典看

在这里插入图片描述
名字哪来的就是再item里定义的,分析出一条构造一个item出来,直接拿来放到容器里,最后将可迭代容器返回去
在这里插入图片描述
item是需要在封装数据的时候用一下

在这里插入图片描述
现在没有打印了

在这里插入图片描述
这些数据是在调试的时候打出来了,现在访问的网页里然后给你读取了这些信息
在这里插入图片描述

首先告诉start告诉它从哪个url开始,最后下载器拿到了,下载器经过引擎,把response数据注入给spider,spider拿到以后,在parse里拿到注入的response,然后对response进行解析。解析拿到你要的数据进行item封装,就把一大堆item return出去
在这里插入图片描述
spider的url进入scheduler,然后交给下载器,下载器把response交给你写的某一个spide,spider拿到response,然后解析,解析的时候需要item类,item类凑一个给它,把一堆的items扔到itempipeline。但是我们现在itempipeline是关闭的
在这里插入图片描述
现在是暂时关闭的,itempipeline没启用

在这里插入图片描述

在这里插入图片描述
将你现在拿到的数据item,替你输出到一个文件里,也就是现在不需要pipeline都有人做这个事情

在这里插入图片描述
随便写个名字是不行的,支持json,xml等
在这里插入图片描述
用json
在这里插入图片描述
现在就得到了内容,这是真正的unicode
在这里插入图片描述
在这里插入图片描述
带格式化

在这里插入图片描述
这里pipeline放开

在这里插入图片描述
first.pipeline底下有个类FirstPipeline
在这里插入图片描述
这就是限定名
在这里插入图片描述
这里是拿到一个个item

在这里插入图片描述
这里加一个打印

在这里插入图片描述
在这里插入图片描述
只要在parse函数中,只要return出去可迭代对象
在这里插入图片描述
这边就可以访问到

在这里插入图片描述
pipeline定义的就是这样的kv对在这里插入图片描述
没用列表是因为有名字,有名字就不方便,它用字典就是有先后顺序,所以要给个优先级数字,数字越大越靠后处理,这样就形成了管道,前一个输出了给后一个处理

在这里插入图片描述
item在这里参与组织了一下数据,最后到pipeline里去,allowd_domain控制域不要跑远了,初始url放到scheduler,然后交给downloader,把页面response回来,response回来就可以解析数据,处理完封装到item里去,通过item return出去,又打入到了流程环去,最后数据被引擎调度到item pipeline里去,但是pipeline里什么都没有就不送过去了,数据就没了,但是在这里可以用-o存起来
在这里插入图片描述
因为就是return一个可迭代对象

在这里插入图片描述
可以用yield代替
在这里插入图片描述

在这里插入图片描述
这样可以没有问题
在这里插入图片描述
把你产生的item,一个个yield出去,这就是scrapy框架简单使用,简单配置,不要爬的太快,用脚手架快速搭建一个spider,这个sider要告诉它从那里开始,允许范围,名字以备后面爬取,然后把返回的信息做各种提取,把数据提取出来后,组织成item,item像字典一样去访问,最后将这些数据yield出去,return成一个可迭代对象,总之返回是一个可迭代对象,可以让人进行迭代
在这里插入图片描述
迭代之后会交给注册好的pipelinne,pipeline拿这些数据做处理即可

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值