Skip to content

Web网络爬虫

更新: 2025/2/24 字数: 0 字 时长: 0 分钟

网络爬虫(Web Spider),又称网络蜘蛛、网络机器人,以下简称“爬虫”,是一组按照一定规则采集并存储网络资源(图片、音频、视频、数据等)的自动化程序。

web_spider

建议

我们可以把互联网看作一张巨大的蜘蛛网,蜘蛛网中的每个节点就是一个网页,节点与节点之间的连接就是网页与网页之间的链接。爬虫通过网页链接进入网页节点,当采集完当前网页节点后,沿着网页链接来到下一个网页节点进行采集,直到整个目标网站采集完成。

应用与市场

搜索引擎

对于没有接触过爬虫的人来说,第一次听到爬虫也许会很陌生,但其实爬虫早已应用在了我们的日常生活中。我们现在几乎每天都会使用的搜索引擎,如谷歌(Google)、百度、搜狗等,它们本质上就是一个大型的爬虫。

img

Robots 协议

Robots 协议(Robots Exclusion Protocol)全称“机器人排除协议”,也称“机器人协议”、“君子协议”等,它使用 robots.txt 文本文件简单明了的告诉爬虫被允许访问的页面范围,通常放在网站的根目录下,以帮助控制爬虫访问网站的特定部分。首先说明一下 robots.txt 文件的内容,以 B 站的 robots.txt 文件内容为例,主要分为以下三部分:

  • 用户代理(User-agent):每个爬虫都有自己的用户代理标识,这里就是通过用户代理标识来针对具体的某个爬虫,* 表示该规则适用于所有爬虫。
  • 允许(Allow):指定允许爬虫访问的页面或目录。
  • 不允许(Disallow):指定不允许爬虫访问的页面或目录。

image-20240519163754083

虽然 Robots 协议定义了爬虫的访问范围,但是否遵守 Robots 协议完全取决于爬虫的意愿。也就是说,爬虫可以忽略网站的 robots.txt 文件,直接访问网站上所有没有口令保护的页面,这就是为什么 Robots 协议被称之为“君子协议”的原因。言下之意就是,Robots 协议只能防君子,防不了小人。如果爬虫遵守 Robots 协议的话,那么爬虫在访问网站时,它会首先检查该站点根目录下是否存在 robots.txt 文件,如果该文件存在,爬虫就会按照该文件中的内容来确定访问的范围;反之,爬虫能够访问网站上所有没有口令保护的页面。例如,当你在百度搜索“淘宝”的时候,淘宝网的 robots.txt 文件会对百度搜索引擎进行限制,因此百度搜索引擎就只能访问淘宝网“Allow”规定的页面,于是乎在搜索结果下方会出现:“由于该网站的 robots.txt 文件存在限制指令(限制搜索引擎抓取),系统无法提供该页面的内容描述”。百度作为一个搜索引擎,至少在表面上遵守了淘宝网的 Robots 协议,所以用户不能从百度上搜索到淘宝内部的产品信息。

20200226002914

提醒

需要强调的是,robots.txt 文件的作用并不是阻止爬虫的访问,而是限制爬虫访问不方便展示的页面。例如,自己的网站被搜索引擎所访问后,搜索引擎会记录下网站的结构和内容,以后他人在搜索相关内容时,自己的网站就可以被展示出来,这有助提高网站的曝光度和流量,因此这个时候我们会反而会希望爬虫来访问自己的网站,这也是网站价值的一种体现。

Python 开发

在目前的市场环境中,一旦牵扯到爬虫基本上都会使用到 Python 语言,为什么市场选择使用 Python 语言来做爬虫?原因有如下两点:

  1. Python 的语法简单,开发效率高,适合爬虫这种数据实时要求性高的场景
  2. Python 在爬虫这块的三方库特别的丰富,很多功能都已经封装好了,直接拿来用即可,所以使用 Python 来写爬虫就变的很简单

img

重要

另外要记住,不是只有 Python 才能写爬虫,用 Java、C 都可以写爬虫,只是用 Python 相对来说更简单。另外也请各位记住,编程语言只是工具,抓取到数据才是目的,只要能达到目的,用什么工具那都是其次的

矛与盾

反爬机制

上面说过,爬虫是一段采集数据的程序,也就是说爬虫访问网站终究是一个机器行为,不是一个人类的自然行为。对此,一些网站是相当反感的,因为网站的拥有者通常希望访问本网站更多是真实的人类而不是爬虫,为此网站会设置一些反爬机制,用来校验访问的主体是人还是爬虫。常见的反爬机制如下:

  • 请求头参数校验。
  • 访问频率限制。
  • IP 黑名单禁止访问。
  • 各种类型的验证码识别。
  • JS 加密参数校验等等。

反反爬策略

虽然网站可以通过反爬机制来校验访问的主体是真实的人类还是爬虫,那么爬虫也可以通过制定相关的策略或者技术手段,来绕过或破解网站中的反爬机制,从而获取到网站中有价值的数据,这个就是反反爬策略。常见的反反爬策略如下:

  • 添加请求头来模拟人类正常请求。
  • 使用代理 IP 模拟多人请求。
  • 使用机器学习模型来识别验证码。
  • 逆向解密网站的 JS 加密参数。

为了让爬虫更加具象化,我们可以将爬虫想象成一名特工,把反爬网站想象成一个布满各种检测装置的房间,特工的任务就是绕开房间中的所有检测装置,拿到房间中有价值的数据。这里我们可以看到,爬虫走的是一条技术对抗的路线,沿着这条路线我们会学习到很多其它技术路线的知识,例如 JS 逆向调试、图像识别、网络安全等等。到此,如果你对爬虫依然保有热情的话,请继续学下去吧!

img

提醒

在爬虫与网站对抗的过程中,爬虫处于攻方,网站处于守方,两方相互对抗,但又相互依存。为什么讲相互依存呢?试想一下,如果某个反爬机制永远无法被突破,虽然消灭了爬虫,同样做网站安全也会被消灭,没有攻何来的防呢。

建议

有很多不从事 IT 行业的人,会把爬虫程序员和黑客混为一谈,认为爬虫什么数据都能拿到,其实这是一个很大误区。爬虫拿的都是网络上公开的数据,即使是不从事 IT 行业的人也可以获取到,只是说爬虫的效率会高很多。当然也有爬虫拿不到的数据,例如服务器的后台数据、网站的 VIP 资源数据等,如果能拿到这些数据那就真属于黑客了,而且还有可能涉及违法犯罪!

法律界限

在爬虫的圈子里,有时会看到公安机关依法查处编写爬虫程序盗取其他公司数据的不良企业。一时间风声鹤唳,关于爬虫程序是否违法的讨论遍布程序员圈子。那么到底编写爬虫程序是否违法呢?这里进行一个详细的说明:

  1. 允许存在,法律是允许爬虫存在的,因为爬虫采集的数据就是网站上用户打开页面能够看到的数据,因此通过爬虫采集数据一般而言都不违法。
  2. 正反两面,虽然法律允许爬虫的存在,但不带代表着爬虫没有违法风险,就像菜刀一样,法律允许菜刀存在,但不代表着拿菜刀砍人就是合法的。简单来说,爬虫是一个数据采集工具,工具是无罪的,主要看你用来干嘛。
  3. 风险行为,如果对法律的警告置若罔闻的话,符合下列行为的爬虫会有进去喝茶的法律风险:
    • 强行采集的站点有 Robots 协议禁止采集的声明时。例如,淘宝网有 Robots 协议禁止采集,爬虫对其进行忽略,强行采集数据。
    • 高频采集对网站服务器造成了很大压力,干扰到网站的正常运行。例如,利用爬虫一秒钟访问网站上万次,造成了网站瘫痪。
    • 利用网站 Bug 窃取网站收费资源进行获利,属于违法行为。例如,利用爬虫绕过网站检测,窃取网站的收费资源进行获利,给网站带来了经济损失。
    • 采集个人敏感信息,属于违法行为。根据《中华人民共和国民法典》第一千零三十二条和第一千零三十四条,自然人享有隐私权,个人信息受法律保护。如果爬虫程序采集到公民的姓名、身份证件号码、联系方式、住址、账号密码、财产状况、行踪轨迹等个人信息,并将之用于非法途径的,则构成非法获取公民个人信息的违法行为。

综上,为了避免进去喝茶,开发的爬虫程序要安分守己,并且时常进行优化,避免干扰到网站的正常运行,并且在使用爬取到的数据时,发现涉及到用户隐私和商业机密等敏感内容时,一定要及时终止爬取和传播。如果因为爬虫的问题产生官司,并且对方能够举证你的爬虫有破坏动产的行为,那么打官司基本上会败诉并要求做出赔偿。

行业二十问

以下是业界某位大神关于爬虫相关问题的回答。

1.非爬虫方向的技术转行做爬虫是否可行?

答:可行,而且有一定的基础会很容易上手,至于深入的部分就看自己了。

2. 非技术转行做爬虫是否可行?

答:可行,但我认为较难,因为爬虫做深了以后是需要你了解各种相关领域知识的,而你现在对这些领域的东西一无所知,甚至可能连编程都还不知道怎么开始,起点会比有基础的人低很多。

3. 爬虫工作日常如何?加班多不多?

答:这个得看公司的,有些公司搞得都是些天天更新反爬的平台(比如工商信息相关的),那基本就是得一直盯着看会不会出问题,一不小心就会要加班。

4. 爬虫对于学生党的用处体现在哪些地方?

答:这个问题看个人,因为爬虫技术可用的地方太多了,没法一个一个地都拿出来说。比如你想搞个自动签到的工具,这其实本质上就是爬虫;比如你想搞个自动回复设定内容的机器人,这其实本质上也是爬虫。

5. 学到什么程度才能入职爬虫工程师?

答:我觉得首先发请求不用说了吧。抓包工具的使用也不用说了吧。熟练掌握 XPath、正则表达式这种解析工具也是基本的,然后 JSON 之类的传输格式至少要了解过长啥样吧,再就是 JS 逆向总得会一点吧(从只改变量名函数名混淆级别的代码中找出加密参数生成部分的程度)。差不多会这些以后,再自己做几个项目,应聘个初级爬虫工程师没啥问题。

6. 如何成为一名优秀的爬虫工程师?

答:垂直爬虫做到后面本质上就是逆向,你需要有良好的逆向思维方式,并且对一些安全领域的骚东西也有一定的了解,这样你才能游刃有余地处理高难度的反爬。

7. 学爬虫的学习路线?

答:有一些 Python 基础就可以做爬虫了,主要是数据获取、数据解析、数据预处理、数据持久化这方面的东西,然后是一些三方库和框架,如 Scrapy、Selenium WebDriver 等。

8. 大约学习并从事爬虫几年才可以达到一个不错的高度?

答:这个问题也很看个人,我觉得主要看有没有需求逼迫成长吧。之前招人的时候,很多三年经验的也就比入门水平稍微好一点,他们在工作时遇到的难点几乎全是依靠自动化测试工具解决的,对逆向水平毫无增长。所以建议还是多依靠逆向手段去解决问题,成长速度会很快。

9. 薪资方面如何,在几年内可以达到15K?

答:同上,标 15K 及以上的招聘还是挺多的,看看招聘需求就知道大概到什么程度了。

10. 面试爬虫哪些技能点是加分项?

答:丰富且有深度的逆向经验、熟悉通信协议底层实现、有过哪些骚操作经历等,但主要还是逆向经验和反爬方面的经验。

11. 作为一名爬虫工程师,对该岗位的前景如何看待?

答:未来主要内容在 App 上的平台应该会越来越多,难度也会越来越高,所以对于爬虫工程师的逆向水平要求会越来越高,只会简单逆向甚至不会逆向的人找工作会越来越难。

12. 爬虫和数据挖掘是一样的吗?

答:不一样,爬虫只是将数据取回来,具体怎么分析才是数据挖掘的事情。

13. 爬虫是否和黑客差不多?

答:差很多,与上个问题类似,只不过“黑客”这个词太宽泛了,黑客也是有具体方向的。

14.千奇百怪的验证码只能对接打码平台吗?有啥其他办法?

答:自己破呗,逆向+机器学习。

15. 如何爬取某个平台?

答:涉及法律问题,这种针对某个平台的东西是不能细说的。

16. 爬虫违法吗?如何避免过线导致的违法?怎么规避法律风险?

答:算是擦边球吧,其实你即使遵守规则去爬别人的网站,只要人家想搞你,还是可以让你做的事情变成违法的。所以建议不要做太过分的事情,毕竟狗急了也会跳墙。还有就是不要为一些明显是做灰黑产的人/公司写代码,一旦他们出事了,你也会被牵连。知乎上之前那个很火的被抓了的人,从回答内容中来看其实就是做打码平台的那个微凉,他这一个平台据说赚了至少千万,主要应该是提供给做黑产的人使用了,这种情况下被抓是迟早的事。最好的避免违法的办法就是明显觉得不太好的事情就不要去碰,基本就不会有啥问题。

17. 如何有目的地爬取到真正想要的数据?

答:让需要数据的人提需求,如果你自己就是那个需要数据的人,那就去做市场调研,看看你需要的数据在哪里能找到。

18. 反爬虫最先进的技术是什么?最有效的技术是什么?

答:最先进的技术其实就是使用在 PC 平台上已经玩烂的各种反破解技术将行为监测点(设备指纹、用户操作等)隐藏起来,然后传给服务端做行为识别,如果操作非人类或者缺少某些东西就触发风控。最有效的技术其实不是技术而是方法,这个方法就是账号收费,将你的数据变成需要花多少钱才能看到这样子的,就能做到啥高端技术都不用上、轻松提高爬虫方的获取数据成本的效果,当然这也需要结合良好的产品设计,否则普通用户的体验会很差。

19. 请问爬虫在x领域有哪些应用?

答:这个应该是对应领域的人自己思考一下自己拿到那些公开数据究竟可以做什么。

20. 需要大量账号的平台成本过高该怎么办?

答:人家就是依靠这种方式来提高你成本的,你如果觉得成本过高要么放弃要么换一条路线获取数据。