一、python爬虫
爬虫基本流程:
1.requests模块
通过post、get请求url,返回网页数据利用re或bs4进行解析即可,和我们平时部署接口请求接口差不多,这里不详述。
2.selenium模块(推荐)
上面提到的requests模块更多是爬取静态网页,遇到动态网页,就需要这个爬虫利器selenium了。它的优点主要有: 当页面内容是由 JavaScript 动态生成,通过 requests 请求页面无法获取内容,而selenium可以。 requests 爬虫程序容易被反爬虫策略限制,selenium模拟鼠标键盘操作,让程序的行为和人一样,可绕过大部分反爬。
安装部署参考https://www.jianshu.com/p/dd848e40c7ad
二、反爬机制
首先,我们需要了解网站如何识别爬虫,主要通过如下: 单一ip访问频次。 单一ip访问数据流量。 大量重复简单的网站浏览行为 只下载网页,没有后续的js、css请求 设置了爬虫陷阱(高级、本人暂时没遇见过)
下面主要介绍两种常见的反爬机制
1.验证码
验证码目前是大部分网站主要的反爬机制之一,且发展极快,以前还是数字字母组合,现在已有手势验证码、旋转验证码、滑动验证码、问题验证码等层出不穷。 结合深度学习算法破解验证码的开源项目有很多,例如github高达28kStar的12306抢票项目https://github.com/testerSunshine/12306中就有破解12306验证码的模型。但个人认为破解验证码还是比较麻烦,且许多开源的模型也不能破解所有验证码,自己训练模型就更费时费力了。所以这里有几个小技巧去避免验证码反爬触发。
模拟鼠标点击操作、滑轮拖动、回车进入网页等,避免直接通过输入网页地址的方式去访问。例如进行下一页,可通过滑动页面到底端,然后点击下一页,而不是直接再网址栏输入页面数字。 通过time库每一步都设置2-5s的等待时间,虽然这样要牺牲时间,但可以有效被网页识别是恶意爬虫。 部分网址登陆账号后便不会触发验证码,如淘宝。所以也可以注册一个账号去爬目标网站。
2.访问限制
访问限制指的是某些网页对于同一个ip同时有两个请求时会直接被限制访问,例如链家网、贝壳网。破解这种情况的方式有: 用代理ip。代理ip能有效破解这种访问限制的反爬,但免费代理一般时效只有3分钟,收费代理要30RMB一个月,成本较高。 每次请求都更换请求头的User-Agent。该方法可破解链家网的反爬。通过预先设定一批不同的请求头,每次请求随机用一个请求头。 只开一个进程进行爬虫、且每步也都设置2-5s的等待时间。
3.总结
总的来说,避免被反爬,可通过结合代理ip+更换请求头+设置等待时间+模拟人行为的方式进行爬虫。如果没有代理ip资源,建议一个ip只开一个进程进行网页爬虫,也基本不会触发反爬。当然也有些网页例外,例如安居客的验证码是设置成每隔一段时间就出现,所以这类只能暴力破解验证码了。另外,可以的话,尽量按照robots.txt定义的行为进行文明爬虫。
三、防追踪定位(隐藏自己)
每次我们请求一个网页,后端可以清楚知道我们的ip,即使是用到高匿名代理ip也是可以追踪到原始ip信息,因此不想被对方知道自己的ip及真实地址,隐藏自己就很有必要。 防追踪定位主要方式是通过高匿名代理ip+禁止Cookie追踪+Canvas防护+WebRTC隐藏的方式进行,通过这几种方式,能有效防止自己真实信息泄露。 未完待续。。。