Python 爬虫的故事:这是人干的事么?

AirPython

共 2376字,需浏览 5分钟

 ·

2020-10-15 16:10

爬虫原理

我是一个爬虫,每天穿行于互联网之上,爬取我需要的一切

说起来还要感谢 HTTP 协议,因为它,全世界的网站和浏览器才能够连接通信,而我也是借助 HTTP 协议,获取我想要的数据

我只需要伪装成一个浏览器,向服务器发送 HTTP 请求,就能拿到网页 HTML 文件或者数据

接着,我再按照 HTML 的格式规范,去解析其中的图片、链接 、表单

等等我关注的信息

获取链接标签以后,我又可以进一步爬取链接背后的网页,如此反复,要不了多久,一个网站中暴露出来的内容我就能爬个干净


当然了,咱们做爬虫也还是有底线的,干我们这一行,有一个约定俗成的规定,那就是 Robots 协议

只要你在网站的根目录下放置一个叫 robots.txt 的文件,里面写上哪些目录禁止访问,我就会绕道而行,就像这样:

User-agent: *

Disallow: /a/

Disallow: /b/

Disallow: /c/

就像程序员们经常互相鄙视一样,在咱们爬虫的圈子里,也存在鄙视链

地位最高的要数搜索引擎的爬虫了,他们高高在上,正大光明的爬,各个网站欢迎还来不及,都想被他们收录到搜索引擎之中,给网站带来流量,这些爬虫,都是圈子里的大佬,我们惹不起

另外有一些爬虫,他们有的不遵守 robots 协议,随意乱爬,有的一天天的净知道爬美女图片,把人家服务器爬崩溃了,这些爬虫我们也是看不起的

像我这样老实本分的爬虫,平日的工作就是爬取一些网站的数据,像购物网站、点评网站等等

虽然我们很守规矩,但这些个网站还是很不待见我们,为了拿到数据,我们展开了旷日持久的拉锯战

反爬虫技术

现在很多网站都上云了,云上的资源可昂贵了,CPU、内存、存储这些都价格不菲,尤其是网络带宽,价格是真心贵

那些网站不待见咱们这些爬虫也就可以理解了,我们不像搜索引擎爬虫可以给他们带来好处,相反,还会消耗他们的服务器性能,花掉他们宝贵的流量,那可是白花花的人民币,谁不心疼啊?

所以这些网站加了一个措施:一旦在 HTTP 请求中的 user-agent 字段发现这是一个爬虫,那就不搭理我们了。

这个 user-agent 是 HTTP 协议中表示客户端名字的字段,那个时候我刚刚入行,没什么经验,不懂得伪装,很容易就被发现

为了能够继续爬数据,我只好改头换面,伪装成了浏览器的名字,圈子里有的兄弟还伪装成了搜索引擎爬虫的名字,我可不像他们那样没下线

这一招管用了没多久,这些网站就升级了策略,通过我们的行为来识别是不是真的浏览器;我们毕竟是程序,那速度比人类点击快多了,网站一旦发现我们短时间内发起了很多请求,那就掐断连接

我只好降低爬取的频率,避免被拉入黑名单

有些网站更狠,在网页里面插入一些假的图片,只有几个像素那种,人类的眼睛是看不见的,但是我们不知道啊,对我来说都是 标签,我一访问就中计了!立刻被拉入黑名单

没有办法,摊上这种事,我只好想办法换个 IP 再去爬,真是难顶

听说圈子里有些大佬用上了分布式技术,组团去爬,很多个 IP 地址,其中一个或者几个封了也不用怕,我真是很羡慕

前后端分离

在我的职业生涯中,遇到过一些奇怪的网站,明明网页中有数据,但是我一访问拿到的 HTML 中啥也没有,一度让我很郁闷

后来才知道,原来他们用上了一个叫前后端分离开发的技术,数据不再从服务器渲染到 HTML 网页中,而是浏览器通过单独的 API 接口拿到后再动态加载出来,难怪我拿到的只是一个空壳子

为了拿到数据,我只好也学着去请求这些数据接口,不过因为这些网站都有 API 网关,会检查请求的 Token 或者 Authorization 之类的认证字段,再加上我不知道他们的接口参数格式,导致我经常拿不到数据

到了最近两年,我拿到的网页 HTML 越来越简单了,在浏览器中丰富多彩的页面,一查看源代码竟然只有简单几行,真是见了鬼了!

终于有一天,一个前辈告诉我,现在流行单页应用 SPA 了,页面全都是在前端动态生成的,拿到的 HTML 根本没有价值

这简直欺人太甚了!

一不做二不休,我决定弄一个真正的浏览器进来,这个内嵌的浏览器没有界面,专门为我服务,嵌入到我的程序中,让他去真正的渲染网页,渲染完成后我再去取数据!

这是真正意义上模拟人类去访问网站了,再也不用模拟繁琐的数据接口访问,也不用担心单页应用,前端渲染就前端渲染,我再也不怕了!

验证码

到后来,不知道是谁发明的,网站们纷纷用上了一种叫验证码的技术,给我们出了难题

开始的验证码还算比较简单,一般都是些简单的数字、英文字符做了些变形,就像这样:

圈子里很快有大佬教我们用文字识别技术 OCR 来自动识别这种验证码,我也折腾了一下,费了老大劲终于可以识别出来,准确率不敢说 100%,99% 还是有的

不过没多久,这验证码就变得越来越复杂,什么汉字识别,物体识别,滑动解锁,一个比一个难,根本超出了我的理解范围,你瞧瞧下面这些验证码,这是人干的事儿吗?

哎,这还真是人才能干的事,不是我们爬虫能干的~

如今,这些网站的反爬虫技术越来越先进,我们能发挥的空间被一步步挤压

前段时间,有个愣头青爬虫把一家公司的服务器给爬崩溃了,把人家正常业务都弄停掉了,他还被抓了起来,现在监管越来越严,搞得大家人心惶惶。

内忧外患不断,不少爬虫兄弟失业的失业,转行的转行,爬虫这碗饭,真是越来越不好吃了。。。



推荐阅读


带你用 Python 实现自动化群控(入门篇)

这些自动化场景,批处理完全可以取代 Python

抖音超火的九宫格视频是如何生成的,Python 告诉你答案


浏览 21
点赞
评论
收藏
分享

手机扫一扫分享

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

手机扫一扫分享

分享
举报