Scrapy很好用!神级Python爱玛士分享妙解心得

xiaoxiao2025-06-07  19

前言

Scrapy是爬虫必须学会的一个框架!一般人确实很难搞的透彻!不过他的功能方面确实特别好用。

scrapy

scrapy是一个异步爬虫框架,使用它,可以屏蔽很多复杂的底层设计,只需要解析下载的页面,更多了我们需要关注的是目标网站/页面爬取的难易程度,该怎么来实现它。虽然是,但是在爬取大量网站可能需要用分布式的爬虫,当然scrapy也有

操作流程图

指定一个起始URL后,scrapy就可以根据以上原理图进行工作了。一个最简单的页面,指定页面的URL进行第一次请求,经过引擎,交给调度器,然后调度器再返回给引擎,去下载这个页面,拿到这个页面就可以进行解析了。这里明显看的出来绕了一个圈子,如果最简单的的页面,这样子会发现多了调度这一步。但是一般在实际业务中,特别是分布式爬虫,会有很多url需要爬取,而且一些url是动态添加到待爬队列的,我们将所有的待爬都在调度器进行分配,当然这里也有其他操作,比如,一个url已经调度过,那么会进行标识,做到不再重复爬取。

队列

scrapy默认的队列

SCHEDULER_DISK_QUEUE = 'scrapy.squeues.PickleLifoDiskQueue' SCHEDULER_MEMORY_QUEUE = 'scrapy.squeues.LifoMemoryQueue' SCHEDULER_PRIORITY_QUEUE = 'queuelib.PriorityQueue'

一般我们不关心这个队列结构,但是在做分布式时这个队列就需要替换

scrapy_redis

scrapy本身是异步,但是不支持分布式爬取。要做到分布式爬取,那么需要一个公共的待爬队列

scrapy_redis需要制定队列结构,可在SpiderQueue,SpiderStack,SpiderPriorityQueue中选者一个,形如

SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderPriorityQueue"

scrapy注意事项

这里说一下scrapy的一个要注意的细节问题,对个人来说,其实他的文档有些地方存在误导,当然我指的是中文文档,格式是标题加内容,区分通过数字。

scrapy流程问题中下载和请求有什么区别

 

如果对Python编程、网络爬虫、机器学习、数据挖掘、web开发、人工智能、面试经验交流。感兴趣可以519970686,群内会有不定期的发放免费的资料链接,这些资料都是从各个技术网站搜集、整理出来的,如果你有好的学习资料可以私聊发我,我会注明出处之后分享给大家。

 

蜘蛛通过发动机产生的请求给调度程序,之后通过下载器产生响应。这里有一个诡异的现象,比如我们通过请求这个库写一个爬去百度的爬虫

import request page = request.get('http://www.baidu.com')

可能请求拼错了

这样的一行命令,就已经实现了把百度的页面下载下来这个功能,那么请求和下载在这行代码体现在哪里?

每一个请求的过程,就已经实现了下载,换句话说,请求就是下载。

那么,所谓scrapy的请求和下载是什么?请求,就是网址下载,就是请求的URL或者说访问网址

知道了这一点,东西很多最都可以理解比如,中间件下载这个东西他的英文在解析函数前还是后执行?肯定是前啊,因为解析下载的英文还有就是scrapy.Request在中间件之前还是之后?按照文档说法,请求通过下载中间件到下载啊,应该是之前啊,但其实,scrapy.Request在中间件后面执行。因为它是下载里面的(请求就是下载)。

当然,如果上面你不相信的话,可以试一下换代理,中间件需要这样一句代码

request.meta['proxy'] = 'http://192.13.2.2:8888'

之后,才是才是请求呢。你不会用的时候,觉得很多地方不合理。你就觉得工具很烂,应该是你用的不好。

转载请注明原文地址: https://www.6miu.com/read-5031450.html

最新回复(0)