Python爬虫如何使用Scrapy框架

  

今天就跟大家聊聊有关Python爬虫如何使用Scrapy框架,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

scrapy结构图:

Python爬虫如何使用Scrapy框架

scrapy组件:

(1)ENGINE:引擎,框架的核心,其它所有组件在其控制下协同工作。

(2)SCHEDULER:调度器,负责对SPIDER提交的下载请求进行调度。

(3)DOWNLOADER:下载器,负责下载页面(发送HTTP请求/接收HTTP响应)。

(4)SPIDER:爬虫,负责提取页面中的数据,并产生对新页面的下载请求。

(5)MIDDLEWARE:中间件,负责对Request对象和Response对象进行处理。

(6)ITEM PIPELINE:数据管道,负责对爬取到的数据进行处理。

对于用户来说,Spider是最核心的组件,Scrapy爬虫开发是围绕实现Spider展开的。

框架中的数据流:

(1)REQUEST:scrapy中的HTTP请求对象。

(2)RESPONSE:scrapy中的HTTP响应对象。

(3)ITEM:从页面中爬取的一项数据。

Request和Response是HTTP协议中的术语,即HTTP请求和HTTP响应,Scrapy框架中定义了相应的Request和Response类,这里的Item代表Spider从页面中爬取的一项数据。

scrapy大致工作流程:

(1)当SPIDER要爬取某URL地址的页面时,需使用该URL构造一个Request对象,提交给ENGINE。

(2)ENGINE将Request对象传给SCHEDULER,SCHEDULER对URL进行去重,按某种算法进行排队,之后的某个时刻SCHEDULER将其出队,将处理好的Request对象返回给ENGINE。

(3)ENGINE将SCHEDULER处理后的Request对象发送给DOWNLOADER下载页面。

(4)DOWNLOADER根据MIDDLEWARE的规则,使用Request对象中的URL地址发送一次HTTP请求到网站服务器,之后用服务器返回的HTTP响应构造出一个Response对象,其中包含页面的HTML文本。DOWNLOADER将结果Resopnse对象传给ENGINE。

(5)ENGINE将Response对象发送给SPIDER的页面解析函数(构造Request对象时指定)进行处理,页面解析函数从页面中提取数据,封装成Item后提交给ENGINE。

(6)ENGINE将Item送往ITEMPIPELINES进行处理,最终以某种数据格式写入文件(csv,json)或者存储到数据库中。

整个流程的核心都是围绕着ENGINE进行的。 

Request对象

Request对象用来描述一个HTTP请求,下面是其构造器方法的参数列表。

Request(url, callback=None, method='GET', headers=None, body=None,
  ,,,,,,,,,,,,,,,,饼干=没有,元=没有,编码=& # 39;utf - 8 # 39;,,优先级=0,
  ,,,,,,,,,,,,,,,,,dont_filter=False, errback=没有,旗帜=没有)
  #,url(必选):请求页面的url地址,字节或str类型,如& # 39;http://www.baidu.com& # 39;。
  #,回调:页面解析函数,,可调用的类型,请求对象请求的页面下载完成后,由该参数指定的页面解析函数被调用。如果未传递
  该参数,默认调用蜘蛛的解析方法。
  #,方法:HTTP请求的方法,默认为& # 39;得到# 39;。
  #,标题:HTTP请求的头部字典,dict类型,例如{& # 39;接受# 39;:& # 39;text/html # 39;,, & # 39;用户代理# 39;:Mozilla/5.0 & # 39;}。如果其中某项的值为
  没有,就表示不发送该HTTP头项部,例如{& # 39;饼干# 39;:没有},禁止发送饼干。
  #,身体:HTTP请求的正文,字节或str类型。
  #,饼干,曲奇信息字典,dict类型,例如{& # 39;货币# 39;:,,& # 39;美元# 39;,& # 39;增长# 39;:,& # 39;uy # 39;}。
  #,元:请求的元数据字典,dict类型,用于给框架中其他组件传递信息,比如中间件Item 管道。其他组件可以使用
  请求对象的元属性访问该元数据字典(request.meta),也用于给响应处理函数传递信息,
  #,,,,,,,详见响应的元属性。
  #,编码:url和身体参数的编码默认为& # 39;utf - 8 # 39;。如果传入的url或身体参数是str类型,就使用该参数进行编码。
  #,优先级:请求的优先级默认值为0,优先级高的请求优先下载。
  #,dont_filter:默认情况下(dont_filter=False),对同一个url地址多次提交下载请求,后面的请求会被去重过滤器过滤
  (避免重复下载)。如果将该参数置为真,可以使请求避免被过滤,强制下载,例如,在多次爬取
  #,,,,,,,,,,,,,一个内容随时间而变化的页面时(每次使用相同的url),可以将该参数置为真实的。
  #,errback:请求出现异常或者出现HTTP错误时(如404页面不存在)的回调函数。

Python爬虫如何使用Scrapy框架