爬虫小技巧

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了爬虫小技巧相关的知识,希望对你有一定的参考价值。

1、何为爬虫

  • 爬虫的概念就是能按照给定的目标及规则实现自动化采集网络数据的程序或脚本。通俗的来说,就是通过程序来模拟人登陆网站去获取想要数据,就是这么简单。
  • 爬虫的本质是直接用程序脚本去实现http请求,访问目标网站或数据接口,然后对获得的数据去进行解析,从而得到你想要的数据。
  • 本人认为爬虫的最高境界是完完全全模拟出人的操作,让网站监控那一方无法区分出是爬虫还是人。当然这是非常难的,现在几乎不可能,但技术在进步嘛。

2、反爬虫侦测机制(可能不全,供学习交流)

本骚年预言,在未来最贵的东西将是数据,没错,就是数据,所以,从各种数据源如何去成功获取数据将会变得越来越困难,但是新的爬虫技术也会层出不穷,不要慌,不扯了直接入正题。以下我会给出我所实践出的爬虫技巧:

1. User-Agent机制

  • 通过游览器的开发者工具中看到,每次进行http访问时,它的请求头里都有User-Agent这个参数,列如: 
    技术分享
  • user-agent指的是访问网站时的用户代理,简单的说,它指的是你的访问终端,即游览器、硬件平台、系统软件的相关信息。

  • 现在很多网站为了防爬虫,都会对user-agent这个参数进行检测,我们在爬数据时尽量把这个参数带上。

  • 在爬取数据时也可以合理地切换不同的user-agent来营造新的客户机环境,降低被侦测的几率,提升其并发抓取数据的能力。特别是对应单点式登录时,使你在同台服务器上提升数据并发爬取的能力(即模拟多个用户登录)。(属个人意见,请大家指教)

2.Referer机制

  • 每次进行http访问时,它的请求头里经常会包含referer这个参数,列如:技术分享
  • referer翻译成中文是“引用”的意思,在http头里指代的是引用站点,即访问该链接的前一个访问的链接,告诉该链接他是从哪里跳转过来的。
  • 为了反爬虫,部分网站或接口都对referer做了监控,如淘宝等网站。无referer或假referer都被认定为非法访问。这时候就需要我们用游览器开发者工具去跟踪一下该链接访问流程,从而提取出对应的referer加到请求头中,来实现数据爬取。

3.Cookies机制

  • 这可是重点啊,cookie在我们的web应用中,常常用来辨别用户身份、进行session跟踪等功能,也起到了反爬虫作用。以下我会简述我在实践中所遇到的cookie反爬虫机制和一些对策。(如有问题请及时提出,谢谢) 
    1. 身份验证 
      很多网站的数据都是需要你登录后才能进行数据爬取,而用户的登录状态则是记录在cookie中,大部分的网站都是把sessionId作为key放在cookie中,来跟踪用户。这个时候我们就需要去模拟用户的登录来获取对应的cookie。 
      模拟登陆是关键点也是个大难点,只要你成功实现模拟登陆,后面的数据爬取都将不是问题。这里我就拿比较普通的网站来举例子: 
      • 首先是打开游览器开发者工具,先人工尝试一遍登录,细细观察整个流程确定需要哪些参数,需要注意cookie的变化。
      • 然后正式开始,先解析登陆页面获取待提交的表单以及response头set-cookie中的参数(之前讲的referer和user-agent也别忘了),根据表单放入对应的参数(如账户、密码等),同时在http头中放入对应的cookie及相关参数。需注意,在整个登录过程中可能会遇到动态验证码的问题,这个时候你可以去搞个验证码解析平台(如优优,云速等)或者你把你的爬虫程序做成半手动的,直接获取验证码图片流并存到本地,通过人工输入验证码。
      • 然后提交登录表单即可,登录成功后,携带对应的cookie来进行数据爬取。
    2. 访问流程验证 
      啥是访问流程验证?莫慌,我来解答。现在很多网站在加载数据时都会通过ajax的异步方式来获取数据以提高网站性能,有次我在爬取某个网站的ajax接口的数据时,发现得不到数据,后来就去研究其中的cookie值的变化,发现访问需要某个特定的cookie值,这个特定的cookie值是哪里来的啊?本人就去查访问该接口前的所有的ajax接口,终于发现了这个cookie值。 
      事实证明,按正常的人为访问流程,获取数据会先访问这些通行证接口(本人瞎起的名字,莫喷)来获取访问数据的权限特定的cookie值,最后才能得到数据。归更到底,爬虫的目标就是要完全模拟人为正常操作。

4.峰值规避机制

  • 有部分网站会对每个IP进行流量监控,当某个IP在单位时间内的访问次数超过设定的峰值时,就会对该IP的访问进行限制(如弹出验证码页面,弹出登录页面、直接禁止访问等手段),这个时候就需要我们对该接口进行峰值测试,找出这个单位峰值(这个过程可能会很烦,坚持少年)。之后,把爬虫程序单位时间内的访问次数降到峰值以下就OK了。

5.代理IP机制

  • 有些网站会对每个IP进行非常严格的流量监控,除了上面说的峰值规避机制,还可以通过代理IP的方式来解决对我们爬虫程序的限制,当我们发现我们的IP被封时,可以通过切换IP的形式(即代理IP)来继续爬取数据。常见的IP代理商有VPN等。

6.客户端爬取机制

  • 如何实现数据的精确爬取?如何规避种种反爬虫机制?如何更真实地模拟人为操作?那就把你的爬虫程序放到离数据源最近的地方,就是在客户端实现数据爬取,如何实现呢?就是通过游览器插件来完成,我们程序员大多用的是chrome游览器,所以我就写了个chrome游览器插件来爬取数据。
  • 我的设计是通过chrome插件去定时向服务端领取爬虫任务。领取任务后,通过插件去自主打开目标网页,页面加载完全后向页面注入js代码,来爬取数据,并临时存储在chrome游览器的内置数据库中,等整个流程走完后,从chrome数据库中拿出所有抓取到的数据,再自主访问服务端接口来提交这些数据。

3、爬虫技术小结

    • 同志们,我说的这些技巧都很实用,但是也请大家永远都不要小看反爬虫机制,他们有时候会让你们感到头疼万分,比如生物探测算法、各种奇葩的验证码图片等等。
    • 爬虫程序和防爬虫机制始终都在进行着一场无休止的博弈,新的爬虫技术不断问世,同样,防爬虫机制也在不断完善,同志们不要放弃,不要被困难打倒,始终坚信一点:“世上没有爬取不到的数据!!!”。
    • 本人接触爬虫也就几个月,所以上述内容可能存在错误可能不全,大家不要介意,希望大家多多提出建议,一起交流学习。







以上是关于爬虫小技巧的主要内容,如果未能解决你的问题,请参考以下文章

反-反爬虫的一些小技巧

python3 爬虫小技巧,

Python爬虫简单入门及小技巧

Python网络爬虫技巧小总结,静态动态网页轻松爬取数据

Python爬虫提速小技巧,多线程与多进程(附源码示例)

更多Requests的小技巧以及总结