爬虫基础知识
创始人
2024-04-12 02:23:25

一、Scrapy

1、cookie设置

目前cookie的设置不支持在headers进行设置, 需要通过以下三种方式进行设置:
第一种:setting文件中设置cookie

  • COOKIES_ENABLED是注释的时候,scrapy默认没有开启cookie。
  • COOKIES_ENABLED没有注释设置为False的时候,scrapy默认使用了settings里面的cookie。
  • COOKIES_ENABLED设置为True的时候,scrapy就会把settings的cookie关掉,使用自定义cookie。

注意:

  • 当使用settings的cookie的时候,又把COOKIES_ENABLED设置为True,scrapy就会把settings的cookie关闭,而且也没使用自定义的cookie,会导致整个请求没有cookie,导致获取数据失败。
  • 如果使用自定义cookie就把COOKIES_ENABLED设置为True
  • 如果使用settings的cookie就把COOKIES_ENABLED设置为False

第二种:middlewares中设置cookie
在middlewares中的downloadermiddleware中的process_request中配置cookie,配置如下:

request.cookies=
{'Hm_lvt_a448cb27ae2acb9cdb5f92e1f0b454f3': '1665643660', 
' _ga': 'GA1.1.755852642.1665643660'
}

注意:cookie内容要以键值对的形式存在
第三种:在spider爬虫主文件中,重写start_request方法,在scrapy的Request函数的参数中传递cookies
重载start_requests方法

   def start_requests(self):headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) Gecko/20100101 Firefox/44.0"}# 指定cookiescookies = {'Hm_lvt_a448cb27ae2acb9cdb5f92e1f0b454f3': '1665643660', ' _ga': 'GA1.1.755852642.1665643660'}

2、Get请求带参数

yield scrapy.FormRequest(url=url,method='GET',formdata=params,callback=self.parse_result
)

3、 item数据只有最后一条

只显示主页数据中爬到的最后一条数据,其他都正常
在这里插入图片描述
这是我对标签进行遍历时,将item对象放置在了for循环的外部。修改代码就好
修改前:
在这里插入图片描述
修改后:
在这里插入图片描述
成功
在这里插入图片描述
scrapy中的yield scrapy.Request 在传递item 的注意点, 或者使用deepcopy

4、start_requests或者start_urls多个请求只请求第一个

默认情况下,scrapy防止重复请求。由于在起始url中只有参数不同,scrapy会将起始url中的其余url视为第一个url的重复请求。这就是为什么你的spider在获取第一个url后停止。为了解析其余的url,我们在scrapy请求中启用了dont_filter标志。
修改前:

    def start_requests(self):for i in range(10):yield scrapy.Request('https://baidu.com', self.parse, meta={"seq": i})

修改后:

    def start_requests(self):for i in range(10):yield scrapy.Request('https://baidu.com', self.parse, meta={"seq": i}, dont_filter=True)

5、数据流

在这里插入图片描述
Scrapy中的数据流是由执行引擎控制的,它是这样的:

  1. Engine 方法获取要来自Spider 爬取的初始请求。
  2. Engine 将请求交给Scheduler 调度,并向Scheduler 索取下一个抓取请求。
  3. Scheduler 从队列中返回下一个请求给Engine
  4. Engine 通过Downloader middleware 将请求发送给Downloader
  5. 一旦页面完成下载,Downloader 生成一个响应(带有该页面)并将其发送给引擎,传递给Downloader middleware
  6. Engine Downloader 接收响应,并将其通过Spider Middleware 发送到Spider 进行处理。
  7. Spider 处理响应,并通过Spider Middleware Engine 返回抓取items和新请求。
  8. Engine 将已处理的items发送到Item pipeline ,然后将已处理的请求发送到Scheduler ,并请求可能的下一个请求进行爬取。
  9. 该过程重复(从步骤3开始),直到不再有来自Scheduler 的请求。

6、组件

Scrapy Engine
引擎负责控制系统所有组件之间的数据流,并在某些操作发生时触发事件。

Scheduler
scheduler 从引擎接收请求,并将它们入队列,以便在引擎请求它们时稍后提供它们(也提供给引擎)。

Downloader
Downloader负责获取网页并将其提供给引擎,而引擎又将其提供给spiders。

Spiders
spider是由Scrapy用户编写的自定义类,用于解析响应并从中提取items 或要发送的其他请求。

Item Pipeline
The Item Pipeline负责处理被spiders提取(或刮取)的items。典型的任务包括清理、验证和持久化(比如将items存储在数据库中)。

Downloader middlewares
下载器中间件是位于引擎和下载器之间的特定钩子,当请求从引擎传递到下载器时处理请求,并处理从下载器传递到引擎的响应。
如果需要执行以下操作之一,请使用Downloader中间件:

  • 在请求被发送到Downloader之前处理它(即在Scrapy将请求发送到网站之前)。
  • 发送给spider之前更改响应。
  • 发送一个新的Request,而不是将收到的响应传递给spider
  • 在不获取网页的情况下将响应传递给爬行器
  • 默默地放弃一些请求。

Spider middlewares
Spider middlewares是位于引擎和Spiders之间的特定钩子,能够处理spider输入(responses)和输出(items 和 requests)。
如果有以下需要,可以使用Spider中间件:

  • spider回调输出的后处理,更改、增加、删除请求或items。
  • start_requests的后处理。
  • spider的异常处理。
  • 根据响应内容为某些请求调用errback而不是回调。

参考资料

https://www.jianshu.com/p/de3e0ed0c26b
https://blog.csdn.net/holmes369/article/details/104477183/
https://github.com/scrapy/scrapy/blob/master/docs/topics/architecture.rst
https://www.jianshu.com/p/8824623b551c

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...