c爬虫抓取网页数据(异步和非阻塞的区别同步过程中的应用框架 )
优采云 发布时间: 2021-09-23 21:17c爬虫抓取网页数据(异步和非阻塞的区别同步过程中的应用框架
)
scratch简介
Scrapy是一个应用程序框架,用于抓取网站数据和提取结构数据。我们只需要实现少量代码就可以快速爬行。Scrapy使用twisted异步网络框架来加快我们的下载速度
Scratch是异步爬虫的框架,是爬虫的必要技术。很少有语言有专门的爬虫框架。Python中的scratch框架专门用于crawler;使爬虫程序更加稳定和高效。sweep框架的许多内容被封装;高配置和可扩展性。在固定框架下,可以直接添加内容和调用;它是基于异步的。扭曲(扭曲)封装在内部。实现逻辑非常复杂。大量的闭包被采用。基于高阶函数(函数作为返回值或函数对象作为参数),小函数嵌套在大函数中。内部函数需要引用外部函数的变量,以确保变量的安全性,形成闭包。下载速度非常快。它是一个异步网络框架。下载的原理是基于内部封装的多线程,可以直接调用。下载效率也很高。内部封装方法可以控制爬行速度。通过修改配置项可以达到控制爬行速度的目的
异步和非阻塞的区别
在同步过程中,从上到下,只能等待蓝色函数执行,获取return,然后执行*敏*感*词*函数。它就像一条管道。完成上述工作后,您只能执行以下操作
在异步过程中,蓝色函数对*敏*感*词*函数没有影响。蓝色函数向网站发送请求,*敏*感*词*函数可以在等待网站反馈的时间段内向另一个页面发送请求,充分利用等待时间,提高爬网效率
异步:发出调用后,调用直接返回,而不管结果如何
非阻塞:它关注等待调用结果的程序的状态,这意味着在无法立即获得结果之前,调用不会阻塞当前线程
潦草的工作流程
我们通常不只是请求一个URL来抓取多个页面。此时,我们可以在URL列表中放置多个页面。从URL列表中提取URL,向其发送请求,获取相应数据,提取数据,解析数据,保存内容等数据处理;然后对下一个URL循环执行相同的操作
有两个队列。队列1存储每个页面的URL。运行线程从队列1获取URL,发送请求,获取对应的URL,解析每个页面的数据,将解析后的数据放入队列2(如解析图片的名称和URL),然后放入下一个线程下载保存
Scratch是基于异步的。它具有很高的可配置性和可扩展性,结构特殊而复杂。引擎负责整个场景框架的调度。无论它是请求还是获得相应的信息,都必须通过引擎,这相当于人脑。第一步是将目标URL发送到引擎。引擎下面有一个爬虫程序,带有我们需要的URL地址。将URL地址发送到引擎。引擎只负责调度,下载是一个下载器;步骤2:引擎获取URL后,首先将其交给调度器,调度器接收请求的URL并列出;在列出第三个步骤后,调度器给下载程序,下载程序连接到网络以执行请求-响应操作。调度器启动请求以获取响应结果。在步骤4中,下载程序不处理响应结果。下载程序获得响应结果后,将其移交给爬虫程序进行处理。爬虫获取响应结果后,进行数据分析处理;第五步是将解析后的数据发送到管道进行处理,管道专用于保存数据。然后循环,直到调度程序中没有URL
一般工作流:引擎将找到爬虫以获取URL(可能有多个URL),通过爬虫获取URL并将其发送给调度程序。该URL列在调度器中,取出其中一个URL返回到下载器发送请求,获取相应结果,并将相应结果发送给爬虫进行解析,最后爬虫将解析后的数据保存到管道中。此进程将循环,直到计划程序中没有URL为止
1.crawler将URL发送到引擎,2.engine将URL发送到调度程序以供登录,3.scheduler将向引擎发送一个爬网URL,4.engine通过下载中间件将URL发送到下载程序。下载器获取URL后,需要在线发送请求获取相应的URL,5.downloader通过下载中间件将生成的响应发送给引擎,6.engine将接收到的响应发送给爬虫进行解析。爬虫和引擎通过爬虫中间件连接,7.爬虫通过引擎将解析后的数据发送到管道文件保存,8.通过解析后的数据,页面中可能有新的URL需要处理。继续执行上述步骤
名称函数的实现
刮擦发动机
整个框架的核心,总指挥:负责不同模块之间的数据和信号传输
Scratch已经实现
调度程序
存储引擎发送的请求、接收引擎发送的URL并执行列表操作的队列
Scratch已经实现
下载器
发送请求,获取相应的,下载引擎发送的请求,并将其返回到引擎
Scratch已经实现
爬行器(爬虫文件)
分析数据,处理引擎发送的响应,提取数据,提取URL,并将其提供给引擎
需要重写
项目管道
存储数据并处理发动机传输的数据,如存储器
需要重写
下载中间件
它位于引擎和下载器之间,用于处理请求和它们之间的通信(更多使用)。您可以自定义下载扩展,例如设置代理
一般来说,你不必手写
蜘蛛中间件
您可以自定义请求和筛选响应
一般来说,你不必手写
爬虫中间件
位于引擎和爬虫程序之间,用于处理爬虫程序的响应、输出结果和新请求(较少使用)
一般来说,你不必手写
框架已经构建,里面有封装的程序。爬虫文件和管道需要重写,下载中间件可能需要重写
使用scratch爬行数据的基本步骤
第一步是创建一个临时项目。您需要使用以下命令:scratch startproject(fixed)+project name,并且开始项目后面跟着项目名称
第二部分创建一个爬虫程序:scratch genspider(固定)+爬虫文件名+爬虫范围(域名)
执行扫描爬虫程序的命令:扫描爬虫程序文件的名称
1 创建一个scrapy项目
scrapy startproject mySpider
2 生成一个爬虫
scrapy genspider demo demo.cn
https://www.baidu.com/ --> baidu.com
https://www.douban.com/ --> douban.com
3 提取数据
完善spider 使用xpath等
4 保存数据
pipeline中保存数据
具体步骤:点击pycham下的terminal进入路径界面,根据路径依次输入CD crawler、CD 21day,然后输入D:\pycharmprojects\crawler\21day>;路径,然后创建myspider文件夹,并执行命令“scratch startproject myspider”
现在,新项目文件已成功创建,并且成功创建的文件夹显示在pycham的左侧
依次展开mysprider文件夹,将显示以下文件。打开script.cfg文件,该文件将提示自动创建该文件,其中收录最新帮助文档的地址,并告诉我们其他配置文件的来源以及如何创建它们
创建文件夹后,您可以通过CD myspirder输入文件夹来创建scratch genspider爬虫。在这里,首先创建豆瓣爬虫文件,scratch genspider dB
它表示已创建爬网程序文件。我们可以在myspirder和spider目录中看到创建的DB文件
在创建的DB文件中,parse函数中将有一个突出显示的提示和一个警告。在继承父类的过程中,需要修改父类,这涉及到面向对象重写和重载的概念。重写是子类重写父类的实现方法。此时返回值和形式参数不能更改,只能修改函数中的代码,不能修改头和尾,即外壳不能更改,内部的东西可以重写;重载意味着方法名相同,参数和返回值类型不同。在这里,需要重载函数,并且修改了参数的数量。有不一致之处。代码源文件中有三个参数(DEF parse(self、response、**kwargs):),只有两个。此提示不影响后续爬网和程序操作。您还可以复制源代码来替换它
此时,程序在21day文件夹下运行mysprider。如果你删除