爬虫抓取技术

  互联网数据很多,发现好内容并能持续不断的抓取是一项不简单的工作。

反反爬虫

爬虫的固定套路也就那么多,各种网站爬取策略的不同就在于网站的反爬虫机制不同,因此多作试验,摸清网站的反爬机制,是大规模爬虫的先行工作。爬虫与反爬虫是无休止的斗争,也是一个见招拆招的过程,但总体来说,以下方法可以绕过常见的反爬虫。

  • 加上headers。这是最基础的手段。加上了请求头就可以伪装成浏览器,混过反爬的第一道关卡;反之,连请求头都不加,网站可以直接看出是程序在访问而直接拒绝。一般的网站加上User-Agent就可以,反爬严格的网站则要加上cookie甚至各种参数都要加上。
  • 随机延时。这是最简单有效的一种手段。稳定性是大规模爬虫的另一个核心问题,虽然与效率冲突。许多网站都会统计同一个IP一段时间内的访问频率,如果采集过快,会直接封禁IP。不要为了一时爽而不加延时导致几分钟后IP就被封24小时,还不如老老实实地加延时慢慢爬一夜爬完。至于延时加多少因各个网站而异,但一般情况下延时个3~5秒就足够了。
  • 如果页面量实在太大,每次访问设置的随时延时也会成为额外大量的时间成本。单个IP快速访问会有被封的风险,这是就要用代理池,有两点好处:一是降低某个IP单位时间内的访问频率,降低被封风险;二是即使IP被封,也有别的IP可以继续访问。代理池有免费和收费的,免费代理可以从许多网站上获取(这也是一个爬虫项目),但大部分都没用,有用的小部分也会很快挂掉;收费代理好一点,但也好不了多少。高质量的代理成本就高了不少,这个要结合项目实际需求来考虑成本。所以,如果网站不封IP就可以不用代理,以免减慢访问速度,增大被拒的概率。
  • 有的网站必须要登录才能访问,才能爬虫。以知乎为例,知乎的模拟登录必较简单,甚至现在都没有对帐号和密码加密,直接明文post就可以。请求头的cookie含有登录信息,而知乎的cookie寿命较长,所以可以直接在网站上人工登录然后把cookie复制到代码中;知乎目前的反爬机制是如果判断是机器人就封帐号但不封IP——封IP是同样的机器无法访问,但却可以用同样的帐号在其他机器上访问;封号是同样的帐号在各种终端上都无法访问,但同一台机器上却可以换号访问。基于这种机制,爬知乎就不需要IP代理池而需要的是帐号池。举另一个例子,腾讯有一个子网站,它也要求必须QQ登录,而且cookie只有6分钟的寿命,而且一个帐号一天只能访问130次超过就封号,无论爬得再慢——这种情况下只能搞大量的QQ号进行自动登录并不断切换。
  • 如果有的网站的反爬机制实在太过丧心病狂,各种JS代码逻辑十分复杂艰深,那只能模拟浏览器了。模拟浏览器其实就是一种自动的浏览器访问,与正常的用户访问很类似,所以可以跳过大部分的反爬机制,因为你装得实在太像正常用户;不过缺点也很明显,就是慢。所以可以用requests搞定的优先用requests,实在没有办法了再考虑模拟浏览器。
  • 验证码。验证码一出就蛋疼了……Python有自动识别图像的包,不过对于大部分网站的验证码都无能为力。写一个自动识别验证码的程序理论上不是不行,但是这种复杂的机器学习项目一点都不比爬虫系统本身难度低,从成本的角度考虑实在是得不偿失——何况对于有些网站如谷歌,验证码识别是非常困难的。所以对于验证码问题,首先是躲过去尽量不要触发验证码,实在触发了只能乖乖人工去填验证码。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏www.96php.cn

【性能优化】PHP代码输出压缩后HTML

此操作也可以归结在性能操作类别上,虽然效果不是很明显,但在一定情况下起得很好的作用,下面理几点使用该方法的原因 大流量访问页面压缩代码节省RMB,百度...

2918
来自专栏杨建荣的学习笔记

对IMP-00013问题的思考(r3笔记第71天)

对于IMP的问题或者是各类ORA问题,如果碰到的时候使用oerr是一个很不错的参考方案。比如对于ora错误12041的解释如下。 > oerr ora 1204...

2514
来自专栏web前端教室

简单粗暴,以小见大 -- 实现一个按钮的前端组件

按钮,一个button,一个div,一个a标签,都可以做成按钮。现在要把它做成一个前端组件,那前端组件是什么? 定义很多,我随便网上查一个,“指一些设计为通用性...

1837

Kubernetes服务网格(第8部分):Linkerd作为入口控制器

Linkerd的设计目的是使service-to-service的内部通信在应用程序中安全、快速和可靠。然而,这些目标同样适用于edge。在这篇文章中,我们...

2156
来自专栏Coding01

svn + 钉钉机器人制作简单的代码跟踪系统

我在很早之前使用一个第三方的支付聚合平台 ping++ (https://www.pingxx.com)

551
来自专栏分布式系统和大数据处理

ppk谈JavaScript

这本书买得比较早,断断续续读了几次。这次花了一周时间重新读了一遍。总得来说,这本书中的部分理念,不说完全过时,但在现在的技术环境下也很难实现了。例如书中提到的“...

372
来自专栏大数据-Hadoop、Spark

解决Linux克隆后eth0不见的问题

1.通过VMware WorkStation的clone功能,克隆了一份Linux虚拟机,主机名为:mini2,执行ifconfig -a查看所有网卡信息,发现...

2444
来自专栏代码GG之家

只需一个命令,快速定位android的启动耗时

有兴趣合作,帮忙制作公众号的一些宣传图册的伙伴,可以加我微信,商谈具体事宜。 回顾: Android 启动过程框架 这节我们讲一个命令,用来定位android...

1726
来自专栏CSDN技术头条

创建一个分布式网络爬虫的故事

编者按:作者通过创建和扩展自己的分布式爬虫,介绍了一系列工具和架构, 包括分布式体系结构、扩展、爬虫礼仪、安全、调试工具、Python 中的多任务处理等。以下为...

1928
来自专栏Young Dreamer

好用的前端页面性能检测工具—sitespeed.io

引言 最近在做HTTP2技术相关调研,想确认一下HTTP2在什么情境下性能会比HTTP1.x有显著提升,当我把http2的本地环境(nginx+PHP)部署完成...

22610

扫码关注云+社区