Scrapy效率提升篇

Scrapy效率提升篇

scrapy基于twisted异步IO框架,downloader是多线程的。但是,由于python使用GIL(全局解释器锁,保证同时只有一个线程在使用解释器),这极大限制了并行性,在处理运算密集型程序的时候,Python的多线程效果很差,而如果开多个线程进行耗时的IO操作时,Python的多线程才能发挥出更大的作用。(因为Python在进行长时IO操作时会释放GIL)所以简单的说,scrapy是多线程的,不许要再设置了,由于目前版本python的特性,多线程地不是很完全,但实际测试scrapy效率还可以

 

因为Python GIL的存在,scrapy无论如何设置都是单线程的。Scrapy里默认是10线程的设置是指的Twisted的线程,可以用来并行处理DNS之类的。但上面这些都不重要,因为爬虫是IO密集型的操作,所以只要有并发就可以了,无论是利用协程,callback还是其他方式实现并发。所以你要修改的不是线程数目而是Scrapy里request的并行数,只要这个数目大了一般速度都会增快,如果并行大了速度却没有提升,可能是DOWNLOAD_DELAY太大了。

 

所以,提升scrapy爬取效率的方式有:

1)在 settings.py 里把 DOWNLOAD_DELAY设置小一点(保证IP不被封的情况下)

2)提高并发数( CONCURRENT_REQUESTS )  #也并不是越多越好,CPU调度有上限

3)瓶颈在 IO ,所以很有可能 IO 跑满,但是 CPU 没跑满,所以你用 CPU 来加速抓取其实是不成立的。不如开几个进程来跑,这样 CPU 就跑满了

4)在 setting.py 里面,可以把单 IP 或者单 domain 的 concurrent 线程数改成 16 或者更高,16 线程对一般的网站来说根本没问题,而且 scrapy 自己的调度和重试系统可以保证每个页面都成功抓取
5)动态页面最好找ajax传输的json数据,然后抓取其中需要的内容

6)对于定向采集可以用正则取代xpath(或BS)

7) 代理

8)可以考虑gevent ,针对爬虫这种网络IO密集型的。效率会很高

9)搭建分布式爬虫

转自:https://www.cnblogs.com/heranly-go/p/10189023.html

Scrapy-Redis框架的介绍与应用 摘要: Scrapy-Redis框架是Scrapy爬虫框架的一个扩展,它使用Redis数据库作为Scrapy的调度器和数据存储。本文介绍了Scrapy-Redis框架的基本原理、架构和应用,详细阐述了其在分布式爬虫、数据存储和增量式爬虫等方面的优势,并通过实例说明了如何使用Scrapy-Redis框架进行爬虫开发。 关键词:Scrapy-Redis,分布式爬虫,数据存储,增量式爬虫 一、Scrapy-Redis框架的介绍 Scrapy-Redis框架是Scrapy爬虫框架的一个扩展,它使用Redis数据库作为Scrapy的调度器和数据存储。Scrapy-Redis框架可以在分布式环境下运行,使多台服务器能够同时进行爬取任务,大大提高了爬取效率。此外,Scrapy-Redis框架还支持增量式爬虫,可以根据之前爬取的结果来更新数据,避免重复爬取。 Scrapy-Redis框架主要包含以下组件: 1. Scrapy-Redis调度器 Scrapy-Redis调度器使用Redis的list数据结构实现,每个爬虫任务对应一个Redis列表,爬虫任务被分为多个URL请求,每个请求对应一个Redis列表元素。Scrapy-Redis调度器通过阻塞读取Redis列表来获取待爬取的URL,保证多个爬虫任务之间的URL请求不会重复。 2. Scrapy-Redis去重器 Scrapy-Redis去重器使用Redis的set数据结构实现,对每个爬虫任务的URL进行去重。Scrapy-Redis去重器可以避免重复爬取相同的URL,提高爬取效率。 3. Scrapy-Redis管道 Scrapy-Redis管道使用Redis的hash数据结构实现,将爬取的数据存储到Redis中。Scrapy-Redis管道支持多种数据格式,如json、xml、csv等,可以灵活处理不同类型的数据。 二、Scrapy-Redis框架的应用 1. 分布式爬虫 Scrapy-Redis框架使用Redis作为调度器和数据存储,可以很容易地实现分布式爬虫。多台服务器可以同时运行Scrapy-Redis爬虫,通过Redis列表来共享URL请求和爬取结果。此外,Scrapy-Redis还提供了分布式锁机制,保证多个爬虫任务之间的URL请求不会重复,避免数据重复爬取。 2. 数据存储 Scrapy-Redis框架可以将爬取的数据存储到Redis
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值