首页 > 其他分享 >scrapy通用爬虫及反爬技巧

scrapy通用爬虫及反爬技巧

时间:2023-04-07 09:03:35浏览次数:34  
标签:技巧 Scrapy 爬虫 爬取 并发 scrapy 下载 延迟

一、通用爬虫

通用爬虫一般有以下通用特性:

爬取大量(一般来说是无限)的网站而不是特定的一些网站。

不会将整个网站都爬取完毕,因为这十分不实际(或者说是不可能)完成的。相反,其会限制爬取的时间及数量。

在逻辑上十分简单(相较于具有很多提取规则的复杂的spider),数据会在另外的阶段进行后处理(post-processed)

并行爬取大量网站以避免被某个网站的限制所限制爬取的速度(为表示尊重,每个站点爬取速度很慢但同时爬取很多站点)。

Scrapy默认设置是对特定爬虫做了优化,而不是通用爬虫。不过, 鉴于scrapy使用了异步架构,其对通用爬虫也十分适用。

总结了一些将Scrapy作为通用爬虫所需要的技巧, 以及相应针对通用爬虫的Scrapy设定的一些建议。

1.1 增加并发

并发是指同时处理的request的数量。其有全局限制和局部(每个网站)的限制。

Scrapy并发增加的程度取决于您的爬虫能占用多少CPU。 一般开始可以设置为 100 。不过最好的方式是做一些测试,获得Scrapy进程占取CPU与并发数的关系。 为了优化性能,您应该选择一个能使CPU占用率在80%-90%的并发数。

增加全局并发数:

CONCURRENT_REQUESTS = 100

1.2 降低log级别

当进行通用爬取时,一般您所注意的仅仅是爬取的速率以及遇到的错误。 Scrapy使用 INFO log级别来报告这些信息。为了减少CPU使用率(及记录log存储的要求), 在进行通用爬取时应该使用 INFO log级别。 不过在开发的时候使用 DEBUG 应该还能接受。

设置Log级别:

LOG_LEVEL = 'INFO'

1.3 禁止cookies

除非您 真的 需要,否则请禁止cookies。在进行通用爬取时cookies并不需要, (搜索引擎则忽略cookies)。禁止cookies能减少CPU使用率及Scrapy爬虫在内存中记录的踪迹,提高性能。

禁止cookies:

COOKIES_ENABLED = False

1.4 禁止重试

对失败的HTTP请求进行重试会减慢爬取的效率,尤其是当站点响应很慢(甚至失败)时, 访问这样的站点会造成超时并重试多次。这是不必要的,同时也占用了爬虫爬取其他站点的能力。

禁止重试:

RETRY_ENABLED = False

1.5 减小下载超时

如果您对一个非常慢的连接进行爬取(一般对通用爬虫来说并不重要), 减小下载超时能让卡住的连接能被快速的放弃并解放处理其他站点的能力。

减小下载超时:

DOWNLOAD_TIMEOUT = 15

1.6 禁止重定向

除非您对跟进重定向感兴趣,否则请考虑关闭重定向。 当进行通用爬取时,一般的做法是保存重定向的地址,并在之后的爬取进行解析。 这保证了每批爬取的request数目在一定的数量, 否则重定向循环可能会导致爬虫在某个站点耗费过多资源。

关闭重定向:

REDIRECT_ENABLED = False

scrapy反爬技巧

有些网站实现了特定的机制,以一定规则来避免被爬虫爬取。 与这些规则打交道并不容易,需要技巧,有时候也需要些特别的基础。 如果有疑问请考虑联系 商业支持。

下面是些处理这些站点的建议(tips):

使用user-agent池,轮流或随机选择来作为user-agent。

禁止cookies(参考 COOKIES_ENABLED),有些站点会使用cookies来发现爬虫的轨迹。

设置下载延迟(2或更高)。参考 DOWNLOAD_DELAY 设置。

如果可行,使用 Google cache 来爬取数据,而不是直接访问站点。

使用IP池。例如免费的 Tor项目 或付费服务(ProxyMesh)。

使用高度分布式的下载器(downloader)来绕过禁止(ban),您就只需要专注分析处理页面。这样的例子有: Crawlera

自动限速扩展

该扩展能根据Scrapy服务器及您爬取的网站的负载自动限制爬取速度。

设计目标

更友好的对待网站,而不使用默认的下载延迟0。

自动调整scrapy来优化下载速度,使得用户不用调节下载延迟及并发请求数来找到优化的值。 用户只需指定允许的最大并发请求数,剩下的都交给扩展来完成。

扩展是如何实现的

在Scrapy中,下载延迟是通过计算建立TCP连接到接收到HTTP包头(header)之间的时间来测量的。

注意,由于Scrapy可能在忙着处理spider的回调函数或者无法下载,因此在合作的多任务环境下准确测量这些延迟是十分苦难的。 不过,这些延迟仍然是对Scrapy(甚至是服务器)繁忙程度的合理测量,而这扩展就是以此为前提进行编写的。

限速算法

算法根据以下规则调整下载延迟及并发数:

spider永远以1个并发请求数及 AUTOTHROTTLESTARTDELAY 中指定的下载延迟启动。 当接收到响应时,下载延迟会调整到该响应延迟与之前下载延迟之间的平均值。

AutoThrottle扩展尊重标准Scrapy设置中的并发数及延迟。这意味着其永远不会设置一个比 DOWNLOADDELAY 更低的下载延迟或者比CONCURRENTREQUESTSPERDOMAIN 更高的并发数 (或 CONCURRENTREQUESTSPER_IP ,取决于您使用哪一个)。

自动限速扩展参数

下面是控制AutoThrottle扩展的设置:

AUTOTHROTTLE_ENABLED 默认False
AUTOTHROTTLE_START_DELAY 默认5.0
AUTOTHROTTLE_MAX_DELAY 默认60
AUTOTHROTTLE_DEBUG 默认False
CONCURRENT_REQUESTS_PER_DOMAIN
CONCURRENT_REQUESTS_PER_IP
DOWNLOAD_DELAY

我这里整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。欢迎初学和进阶中的小伙伴!

标签:技巧,Scrapy,爬虫,爬取,并发,scrapy,下载,延迟
From: https://www.cnblogs.com/q-q56731526/p/17294848.html

相关文章

  • ida技巧合集
    ida中的反汇编窗口像visualstudio一样显示反编译代码......
  • M3U8流视频数据爬虫
    HLS技术介绍现在大部分视频客户端都采用HTTPLiveStreaming,而不是直接播放MP4等视频文件(HLS,Apple为了提高流播效率开发的技术)。HLS技术的特点是将流媒体切分为若干【TS片段】(比如几秒一段),然后通过一个【M3U8列表文件】将这些TS片段批量下载供客户端播放器实现实时流式播放。......
  • 数量关系蒙题技巧
    存在一定运气,但如何在10min内搞完10道数量是一个挑战,所以运气也是实力的一部分。①倍数关系,和差关系②极值问题(求最小猜第二小,求最大猜第二大)③区间问题(第三段的正确率超过一半,其次第二段,最后第四段)④几何问题(求边长、周长的问题,蒙整数;蒙半径找2倍关系蒙小的,蒙直径找2......
  • 从3s到25ms!看看人家的接口优化技巧,确实很优雅!!
    转载链接地址:https://mp.weixin.qq.com/s/7qcXDTiVIWAowlGJ_AQ6nA大家好,最近看到京东云的一位大佬分享的接口优化方案,感觉挺不错的,拿来即用。建议收藏一波或者整理到自己的笔记本中,随时查阅!下面是正文。一、背景   针对老项目,去年做了许多降本增效的事情,其中发现最多的......
  • 在线商城爬虫 带爬取记录 以11TREET 为例
    整体思路第一步 抓取全部的列表页链接第二步抓取每个列表页的商品总数,页数 第三步单个列表页进行分业抓取商品价格第四步单个列表页抓取完成后输出商品数据并在本地文件记录本次抓取最后一步合并各个列页表抓取的商品数据 第一步爬取的网站,获得分类信息https:......
  • 如何计算爬虫需要多少代理IP呢
    当我们使用网络爬虫进行数据爬取时,经常会遇到一些反爬措施,如IP封禁、验证码等。为了规避这些反爬措施,我们需要使用代理IP。那么如何计算我们需要多少代理IP呢?首先,我们需要明确一点,代理IP的数量并不是越多越好,过多的代理IP反而会影响我们的爬取效率和稳定性。因此,我们需要根据具体情......
  • 网站优化的九大技巧,助力您的SEO策略
    网站已经成为现代企业宣传和销售的重要平台。如何让自己的网站在搜索引擎中获得更高的排名,是很多企业关注的问题。网站优化(SEO)是一种提高网站在搜索引擎中排名的技术,本文将介绍9个优化技巧,助力您的SEO策略。一、关键字研究关键字是网站优化的重要因素。通过了解目标受众的搜索......
  • CAD模板怎么设置?CAD模板设置技巧
    在CAD制图过程中,如果需要设置一个模板的话该如何操作呢?CAD模板怎么设置?本节CAD制图教程就和小编一起来了解一下浩辰CAD软件中设置CAD模板的相关操作技巧吧!CAD模板设置步骤:步骤一:启动浩辰CAD后,打开或者是新建一个可以作为模板的图形文件。步骤二:点击软件左上角的【G】图标,在下拉......
  • selenium 小技巧集合(三)
    iframe切换iframe,又叫浮动帧标记,是内嵌的网页元素,可以将一个html文件嵌入到另一个html文件中显示对iframe进行操作,需要用到以下三种方法:switch_to_iframe()            切换到iframe上(未来会被删除,不建议使用)switch_to.frame()       ......
  • selenium 小技巧集合(四)
    警告框处理在WebDriver中处理JavaScript所生成的alert、confirm以及prompt十分简单,具体做法是使用switch_to.alert方法定位到alert/confirm/prompt,然后使用text/accept/dismiss/send_keys等方法进行操作text:返回alert/confirm/prompt中的文字信息accept():接受现有警......