为了爬数据,我都用过的这些「奇淫巧技」

共 1765字,需浏览 4分钟

 ·

2021-06-08 02:39

作者 | 州的先生


很多人都说数据采集是一个入门门槛极低,进阶和深入门槛极高的方向,州的先生深以为然。
最简单的爬虫,不过是用编程语言甚至是Excel,实现一个 HTTP 请求和响应,数据就到手了。着实简单。
但是,互联网瞬息万变,昨天还能采集的数据,今天就不能采集了;昨天还畅通无阻的网站,今天却变得阻碍连连。
今天州的先生抛砖引玉,简单分享一下自己在工作中遇到的那些数据采集阻碍,和相应的解决方法,都是些简单粗暴的方法。

1、BrowserMobProxy截获接口动态加密参数

场景:在某电商平台的某产品管理后台内,所有的数据接口都会带上一个加密的参数,这个参数来自于页面某个 JS 脚本生成,而且可以一次获取,一段时间内都能使用。
逆向参数的生成过程是一个苦差事,加上其一次获取,可以在一定时间内一直使用,所以索性使用 Selenium + BrowserMobProxy,在自动登录成功之后,通过解析响应中指定接口的 URL 参数,获取到加密参数,保存给后续的数据采集代码使用。

2、PyQt5 制作数据采集助手程序

有这样一个需求场景,采集程序需要打包给非计算机专业人员(小白)使用,采集的网站需要登录,采集的数据并不需要高频、高并发等。
你要怎么做呢?
可选的方案是 Selenium/PyPeteer 处理认证和登录状态,requests 进行数据采集。
我这边选择的方案是,PyQt5 提供程序的图形操作界面,PyQt5 的 QWebEngine 组件用来给用户手动登录网站,并获取登录后的 Cookie;在PyQt5 的子线程内使用 requests 进行数据的采集。最后使用 PyInstaller 将其打包为二进制文件,用户下载运行即可傻瓜式地进行数据采集。

3、MitmProxy篡改滑块验证码结果

众所周知,某宝的登录页面为了防止数据采集,加上了很多防爬机制,滑块验证就是其中一个。
起先沉迷于模拟人类滑动的曲线,屡屡不行,后面索性直接使用 mitmproxy 开始中间人代理模式,捕获滑块验证码相关接口的请求和响应,篡改其响应值,使其顺利绕过滑块验证码,直接登录成功。

4、OpenCV识别拼图验证码

拼图验证码又是一个如今很常见的网站登录验证机制。拖动拼图到图片上对应的缺口上,验证就算通过。
处理的方式大抵也是识别图片中缺口的位置,怎么识别呢,当然是各种计算机视觉的识别技术了。
州的先生使用的是 OpenCV,识别出缺口的位置,再模拟鼠标拖动。当然,使用 mitmproxy 直接在源头上解决掉拼图验证码的产生理论上也是可行的,有兴趣的小伙伴可以试试。

5、浏览器扩展配合加密狗处理密钥

工作中遇到过一个网站,登录前需要完成两个步骤:
  • 电脑上插上一个 USB 加密狗;

  • 浏览器上安装一个浏览器扩展;

二者缺一都没法登录,同时登录的IP还不能换得太频繁,太频繁的后果就是频繁掉线重新登录。
面对这个网站,州的先生其实产出过几个面向不同需求的解决方案,一个是关于账号的有限性和使用人数的无限性的解决方案,这个方案的最终产出是一个「免登陆浏览器」,有兴趣的小伙伴可以查看这篇文章。
基于Python打造账号共享浏览器
另一个解决方案,则是自动登录和采集。
这个网站的自动登录和采集其实也算简单,使用 Selenium 在初始化 driver 的时候,添加上浏览器扩展的参数,把网站登录需要的浏览器扩展添加进去即可。
但是,很多小伙伴并不知道可以在 Selenium 驱动的浏览器中加载浏览器扩展。
这个方法也适用于借助浏览器扩展才能获取到的数据,比如某宝的XX参数网站,借助一些浏览器扩展,可以还原一些指数化数据的真实数值。通过这个方法,就可以自动登录比下载好还原后的数据表了。

6、最后

州的先生进行数据采集所面向的对象多是电商领域的内部网站和平台,与很多小伙伴面向公共领域的数据采集遇到的东西可能不太一样,但是没关系,数据采集没有定式,有的只是见招拆招。
大家在数据采集的时候还使用过什么「奇淫巧技」吗?欢迎留言分享!
浏览 41
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报