python爬虫:Scrapy框架中Spiders用法

python爬虫:Scrapy框架中Spiders用法总的来说spider就是定义爬取的动作以及分析某个网页工作流程分析以初始的URL初始化Request,并设置回调函数。当该request下载完毕

大家好,欢迎来到IT知识分享网。

Spider类定义了如何爬去某个网站,包括爬取的动作以及如何从网页内容中提取结构化的数据,总的来说spider就是定义爬取的动作以及分析某个网页

python爬虫:Scrapy框架中Spiders用法

工作流程分析

  1. 以初始的URL初始化Request,并设置回调函数,当该request下载完毕并返回时,将生成response,并作为参数传给回调函数. spider中初始的requesst是通过start_requests()来获取的。start_requests()获取 start_urls中的URL,并以parse以回调函数生成Request
  2. 在回调函数内分析返回的网页内容,可以返回Item对象,或者Dict,或者Request,以及是一个包含三者的可迭代的容器,返回的Request对象之后会经过Scrapy处理,下载相应的内容,并调用设置的callback函数
  3. 在回调函数内,可以通过lxml,bs4,xpath,css等方法获取我们想要的内容生成item
  4. 最后将item传递给Pipeline处理

我们以通过简单的分析源码来理解

我通常在写spiders下写爬虫的时候,我们并没有写start_requests来处理start_urls中的url,这是因为我们在继承的scrapy.Spider中已经写过了,我们可以点开scrapy.Spider查看分析

python爬虫:Scrapy框架中Spiders用法

python爬虫:Scrapy框架中Spiders用法

通过上述代码我们可以看到在父类里这里实现了start_requests方法,通过make_requests_from_url做了Request请求

如下图所示的一个例子,parse回调函数中的response就是父类列start_requests方法调用make_requests_from_url返回的结果,并且在parse回调函数中我们可以继续返回Request,如下属代码中yield Request()并设置回调函数。

python爬虫:Scrapy框架中Spiders用法

spider内的一些常用属性

我们所有自己写的爬虫都是继承与spider.Spider这个类

name

定义爬虫名字,我们通过命令启动的时候用的就是这个名字,这个名字必须是唯一的

allowed_domains

包含了spider允许爬取的域名列表。当offsiteMiddleware启用时,域名不在列表中URL不会被访问

所以在爬虫文件中,每次生成Request请求时都会进行和这里的域名进行判断

start_urls

起始的url列表

这里会通过spider.Spider方法中会调用start_request循环请求这个列表中每个地址。

custom_settings

自定义配置,可以覆盖settings的配置,主要用于当我们对爬虫有特定需求设置的时候

设置的是以字典的方式设置:custom_settings = {}

from_crawler

这是一个类方法,我们定义这样一个类方法,可以通过crawler.settings.get()这种方式获取settings配置文件中的信息,同时这个也可以在pipeline中使用

start_requests()

这个方法必须返回一个可迭代对象,该对象包含了spider用于爬取的第一个Request请求

这个方法是在被继承的父类中spider.Spider中写的,默认是通过get请求,如果我们需要修改最开始的这个请求,可以重写这个方法,如我们想通过post请求

make_requests_from_url(url)

这个也是在父类中start_requests调用的,当然这个方法我们也可以重写

parse(response)

这个其实默认的回调函数

负责处理response并返回处理的数据以及跟进的url

该方法以及其他的Request回调函数必须返回一个包含Request或Item的可迭代对象

python爬虫:Scrapy框架中Spiders用法

做什么事情都需要不断地坚持下去,编程也一样。现在python语言十分火热,职场对python的需求也很高,薪资待遇都很棒。所以希望大家能够坚持学习,‘剩’者为王,坚持下来的人才有资格称王。如果你觉得本文对你的学习有帮助的话,不妨点个关注,我会持续更新。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/76742.html

(0)
上一篇 2024-08-01 21:00
下一篇 2024-08-02 17:33

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信