爬虫反反爬虫:转

著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:xlzd
链接:http://www.zhihu.com/question/34980963/answer/60627797
来源:知乎

爬虫自动换User-Agent在代码实现上只需要一句就够了,并不是什么高难度的技术活。爬虫为什么要换不同的User-Agent呢,无非就是为了模拟浏览器,让服务器不容易识别出自己是爬虫。

对于爬虫,其实上上策是爬网站之前先去读一下网站的『robots.txt』文件,看看网站开发者(或网站主人)允许你爬什么不允许你爬什么,然后按照主人的意愿,别做出格的事情。这着实是一种情怀。

当然,其实大部分情况下我们还是希望可以不论网站主人答不答应都爬下我们需要的内容,这就需要用到一些反反爬虫的机制了。题主提到的换U-A其实就是一种方法,当然仅仅换U-A对于大部分有反爬虫机制的网站是不够的。

以下是几种简单常见的反爬虫机制和解决办法。

最简单的自然就是什么也不做,这样的网站爬起来就非常简单了,不赘述。

稍微拦一下的,可能就会校验下User-Agent了,U-A的作用就是标识你是什么浏览器/Client等等。一般编程语言内置的网络库或者第三方网络库,会将U-A设置成自己的标识,对于这样的情况网站开发者就能够很容易拦截了。于是就有了题主所说的换U-A,其实就是将库默认的U-A替换为常用浏览器的U-A,以达到干扰服务器识别的作用。

再复杂一点的,可能就不只是通过浏览器标识来识别了,访问者的IP也是标识之一。这样的反爬虫机制有一个问题就是,如果从同一个IP出去的真实请求很多,比较容易误判为爬虫。一般服务器会根据IP+Cookie来识别每个用户。要爬取这样的网站,一个比较简单且有效的方案是换代理。很多网站提供免费代理,抓下它们,然后在发请求通过代理(最好是高匿代理),就可以搞定大部分网站了。值得注意的是代理的有效时间一般比较短,所以爬代理之后应该有一个有效的机制校验已有代理的有效性。

更复杂的网站,就可能会通过账号来限制了。这样的网站一般在注册账号登录之前并不能完整浏览需要的资讯,必须要注册并登录后才能看到。这样的网站就需要注册一批账号了,在一个账号不可用之后更换新的账号。可以写一个脚本来批量注册账号。当然注册的时候一般会伴随验证码,对于简单的验证码可以Google以下OCR找找资料,复杂的验证码就手输或者购买人肉打码服务吧。

更加复杂的,就是一些社交网站了。社交网站大多非常封闭,拿新浪微博为例,微博在登录时需要提交很多参数,登录后请求的页面也不是最终的源码,还需要自己解析一遍。对于有大量js渲染的网页,一般复杂但是容易(是的,这两个词不矛盾)的,可以自己解析,复杂但是不容易的就通过一些库去做吧(比如Python的selenium等)。

........

中间还有很多就不总结了,最后讲一种情况。大概这属于爬虫界的无解难题了,就是请求所有的资源都需要付费。是的,这类网站你需要在你的账户里充值,然后每次请求都是付费的,他们才不关心你是机器还是人,反正收费嘛。

大概就是这样,时间比较紧,总结中很多漏洞,请见谅。

时间: 2024-10-05 12:17:01

爬虫反反爬虫:转的相关文章

爬虫与反爬虫

转自:https://mp.weixin.qq.com/s/-w-yC6PCdTOpfKS8HZEleA 前言 爬虫与反爬虫,是一个很不阳光的行业. 这里说的不阳光,有两个含义. 第一是,这个行业是隐藏在地下的,一般很少被曝光出来.很多公司对外都不会宣称自己有爬虫团队,甚至隐瞒自己有反爬虫团队的事实.这可能是出于公司战略角度来看的,与技术无关. 第二是,这个行业并不是一个很积极向上的行业.很多人在这个行业摸爬滚打了多年,积攒了大量的经验,但是悲哀的发现,这些经验很难兑换成闪光的简历.面试的时候,

第三百四十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫和反爬的对抗过程以及策略

第三百四十五节,Python分布式爬虫打造搜索引擎Scrapy精讲-爬虫和反爬的对抗过程以及策略-scrapy架构源码分析图 1.基本概念 2.反爬虫的目的 3.爬虫和反爬的对抗过程以及策略 scrapy架构源码分析图

反-反爬虫:用几行代码写出和人类一样的动态爬虫

欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:李大伟 Phantomjs简介 什么是Phantomjs Phantomjs官网介绍是:不需要浏览器的完整web协议栈(Full web stack No browser required),也就是常说的无头浏览器--或者好听点叫做:无界面的web解析器. Phantomjs的特点 由于"无头"--免去了渲染可视化的网页界面,她的速度要比一般的浏览器快不少,又因为她是完整的web协议栈,所以不仅仅提供了JavaScri

【Python】爬虫与反爬虫大战

爬虫与发爬虫的厮杀,一方为了拿到数据,一方为了防止爬虫拿到数据,谁是最后的赢家? 重新理解爬虫中的一些概念 爬虫:自动获取网站数据的程序反爬虫:使用技术手段防止爬虫程序爬取数据误伤:反爬虫技术将普通用户识别为爬虫,这种情况多出现在封ip中,例如学校网络.小区网络再或者网络网络都是共享一个公共ip,这个时候如果是封ip就会导致很多正常访问的用户也无法获取到数据.所以相对来说封ip的策略不是特别好,通常都是禁止某ip一段时间访问.成本:反爬虫也是需要人力和机器成本拦截:成功拦截爬虫,一般拦截率越高,

爬虫(Spider),反爬虫(Anti-Spider),反反爬虫(Anti-Anti-Spider)

爬虫(Spider),反爬虫(Anti-Spider),反反爬虫(Anti-Anti-Spider),这之间的斗争恢宏壮阔... Day 1小莫想要某站上所有的电影,写了标准的爬虫(基于HttpClient库),不断地遍历某站的电影列表页面,根据 Html 分析电影名字存进自己的数据库.这个站点的运维小黎发现某个时间段请求量陡增,分析日志发现都是 IP(1.1.1.1)这个用户,并且 useragent 还是 JavaClient1.6 ,基于这两点判断非人类后直接在Nginx 服务器上封杀.

我是怎样把反反爬虫把数据爬下来的

最近看到公司的商务一条一条的从某个网站上复制数据到excel里,于是乎就打算写个爬虫把那个网站的数据都爬下来.一般的流程是模拟用户访问->获取数据->解析页面元素->balabala想干啥干啥.但这个网站大概是知道自己对爬虫很有吸引力,于是做了反爬虫的处理.查看返回的数据有一段这样的代码: void(function fuckie6(){if(location.hash && /MSIE 6/.test(navigator.userAgent) && !/

反反爬虫 IP代理

0x01 前言 一般而言,抓取稍微正规一点的网站,都会有反爬虫的制约.反爬虫主要有以下几种方式: 通过UA判断.这是最低级的判断,一般反爬虫不会用这个做唯一判断,因为反反爬虫非常容易,直接随机UA即可解决. 通过单IP频繁访问判断.这个判断简单,而且反反爬虫比较费力,反爬虫绝佳方案.需采用多IP抓取. 通过Cookie判断,例如通过会员制账号密码登陆,判断单账号短时间抓取次数判断.这个反反爬虫也很费力.需采用多账号抓取. 动态页面加载.这个考验前端工程师的功底,如果前端写的好,各种JS判断,各种

关于爬虫与反爬虫简略方案

像安全与黑客从来都是相辅相成一样. 爬虫与反爬虫也是在双方程序员的斗智斗勇的过程不断发展和成长的. 抓包 抓包的目的: 分析出协议请求使用的数据,请求接口,参数等等. 常用的抓包分析工具: Fiddler Charles Sniffer Wireshark 具体使用策略,请自行百度,Google. 抓数据 这是我使用代理ip请求登录接口时,某APP的响应: 使用 HttpClient 模拟请求 充分了解 HttpClient 的特性,使用方式等. HttpClient4.5官方教程 user_a

爬虫与反爬

爬虫与反爬 (1) 基本的概念 爬虫: 自动获取网站数据的程序 关键是 定时,定量的,批量的获取 反爬虫: 使用技术手段 防止爬虫程序的方法 存在误伤,即 反爬技术 将普通用户识别为爬虫 如果误伤高 --- 效果再好也不能使用 例子: 比如 限制 ip === 用户的ip 一般都是 局域网内动态分配的, 一个爬虫的ip 可能分配给 另一个 非爬虫的用户 有效的方法: 可以在一段时间内 限制 ip,过一段时间 再把 ip释放 反爬的成本: 成功率越高成本越大,拦截率越高,误伤率越高 反爬虫的目的: