1. 刮之前先做好计划
与任何项目一样,如果能在着手之前制定出明确的策略,网络爬虫工作就会顺利得多。首先,你需要数据是为了什么?这个问题看似显而易见,但答案对于确定你应该收集哪些信息至关重要。
接下来,您打算从哪里获取信息?爬虫工具应与目标网站高度匹配,因此仔细分析数据来源将有助于您开发或购买适合该任务的程序。
问题三:你打算如何利用收集到的信息?你可以自行处理,使用软件,甚至将其送入复杂的处理流程。答案将是你决定收集数据结构和文件格式的第一步。
你还有许多其他问题和想法需要理清,其中大部分都取决于你想实现什么目标。有一点是肯定的,那就是“三思而后行”这一原则在网页抓取中同样适用。
2. 表现得更有人情味
如果你想判断网站访客是真人还是机器人,只需观察其行为方式即可。机器人的动作快如闪电,除非收到指令,否则绝不会与页面进行交互。因此,它们很容易被识别并拦截。
为了帮助爬虫避免被发现,你必须教会它像普通访客——也就是人类——那样行事。这其中的妙处在于,人们的行为方式千差万别,因此你在编写代码时拥有很大的自由度。以下是我们建议你添加的一些操作:
- 添加随机的停顿间隔,就像真人正在阅读页面内容一样。5到10秒的延迟效果就很好。
- 以树状结构浏览页面。如果要抓取多个子页面,在跳转时务必先经过父页面。这样可以模拟用户点击一个页面、返回、再点击下一个页面,如此循环的过程。
- 让机器人时不时地点击一些随机的东西。这可是大家都会做的事,不只是我,对吧?
总之,你的机器人之所以必须以某种特定方式行事,是因为该网站可能会监控并记录其活动。但如果网站无法追踪到该机器人呢?请阅读下一条,你将找到答案。
3. 轮换代理
使用代理来确保你的真实IP不被封禁,这简直是再简单不过的事了。同样,获取特定地理位置的代理来访问受地域限制的内容也是如此。但只要搭配得当的工具,代理还能为你做更多事情!
目前,您需要的工具是一个用于轮换 代理池的服务器。借助它,您发送的每个请求都会被分配给代理池中的一个随机IP地址,并发送至目标网站。这样,您就可以随心所欲地抓取网站内容,而每个请求看起来都像是来自不同的地点和用户。
此外,轮换代理可确保即使某个 IP 地址被封禁,您也不会因此受阻,直到手动更换代理为止。虽然某个请求可能会失败,但其他请求仍能正常进行。一款优秀的工具还会对失败的请求进行重试,例如 WebScrapingAPI 会对失败的 API 调用进行重试,以确保您的数据库中没有数据缺失。
为了获得最佳效果,建议使用住宅轮换代理。住宅IP地址最不容易被察觉或封禁,通过轮换这些IP,可以进一步降低爬虫被检测到的风险。但请注意,这种做法有时可能有些小题大做。如果您的爬虫无需应对复杂的反机器人措施,数据中心轮换代理同样能胜任,且成本更低。
4. 使用无头浏览器
无头浏览器与普通浏览器并无二致,唯一的区别在于它没有图形用户界面。若要使用它浏览网页,则必须通过命令行界面进行操作。
您绝对应该在网页抓取流程中加入无头浏览器,而动态网站正是原因所在。如今,许多网站都使用 JavaScript 来为访问者提供更好的用户体验。最简单的例子就是调整页面元素的大小,使其能完美适配访问者的屏幕分辨率。
问题在于,宝贵的 HTML 代码被隐藏在 JavaScript 代码后面。要获取它,你需要执行该 JS 代码。普通的爬虫无法做到这一点,但所有浏览器都能做到。
因此,如果没有浏览器环境,爬虫工具将无法从任何使用JavaScript的网站上收集数据——而目前绝大多数网站都使用JavaScript,或者至少那些重要的网站都是如此。
如果你打算从零开始开发一个网页抓取工具,我建议你试试 Puppeteer,以下是关于它的功能及使用方法的详细介绍。
5. 轮换 User-Agent 标头
User-Agent 是一个 HTTP 请求头,它会告知您正在访问的网站您使用的浏览器和操作系统。从某种意义上说,网站会利用这个请求头来了解访问者的更多信息。这对数据分析非常有帮助,同时也有助于识别机器人。
用户代理字符串可能如下所示:
Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0简体中文(大陆)
有三种主要情况需要避免:
- 完全没有用户代理。大多数爬虫都不使用用户代理,这很可疑,也等于公开表明它们是机器人。请确保每次请求都发送看起来正常的请求头。
- 用户代理信息过时。通常,浏览器每次更新都会更改该标头。因此,如果您的列表中包含Mozilla的用户代理信息,但该浏览器已更新并更改了该信息,您访问的网站就会察觉到其中有问题。
- 每次请求都使用相同的请求头。你可以使用实际浏览器的标准用户代理,但这会导致数百个来自不同 IP 地址的请求,而这些请求的指纹却完全相同。这会暴露你的行踪。
关于这个话题,这里再分享一个额外的小技巧:试试使用 Googlebot 的用户代理。当然,任何网站都希望被收录,因此它们通常不会阻碍 Google 的爬虫进行抓取。不过需要注意的是:Google 的爬虫也有特定的 IP 地址和行为模式,因此仅靠用户代理并不能保证一定成功。
6. 添加反验证码功能
如果你能顺利进行网页抓取,通常不会遇到验证码,除非是极少数情况。不过,一旦遇到,这会非常令人烦恼,因为它可能会让你的抓取程序立即停止运行,或者返回错误数据(即验证码页面的代码)。
反验证码作战计划分为两个部分:预防和处理。您应主要侧重于预防,因为这无疑是更有效的方法。具体操作如下:
- 使用代理服务器,使请求看起来像是来自不同的来源。
- 请更改请求头(尤其是 User-Agent)。否则,即使使用了多个 IP 地址,你仍然可能会被识别出来。
- 执行该页面的 JavaScript 代码。使用无头浏览器是最佳选择。许多网站会向未执行此操作的访客弹出验证码,因为这种行为属于异常。
所以,基本上,请参考第3、第4和第5条建议。
如果爬虫仍然遇到问题,您就需要一个验证码破解工具。在选择网页爬取工具时,请确保所选工具已内置此功能。否则,虽然从技术上讲您可以自行集成一个破解工具,但这意味着需要额外的编码工作,还会浪费时间。顺便提一下,我们的 API 具备此功能——不过话说回来,我们的 API 本来就很少遇到验证码。
7. 制作一个网址列表
在启动爬取任务时,您通常会整理出一份包含有价值信息的 URL 列表。这里有一个建议:与其直接将 URL 发送给爬虫,不如建立一个列表,并标记所有已爬取过的链接。为了便于区分,您还可以将爬取到的数据与 URL 一起保存。
原因很简单:如果电脑崩溃或发生其他意外情况,你仍然知道自己已经拥有哪些数据,从而避免了无谓的重复抓取。
我们的建议是编写一个用于数据提取和记录保存的脚本。手动更新列表不仅耗时费力,而且无论如何都跟不上机器人的更新速度。
8. 了解页面结构
收集更多数据自然需要更多时间。因此,提高效率的一种方法是精确定位爬虫应抓取的信息。理论上这很简单,但每个网站和网页都是独一无二的。为了减少开销并节省时间,你必须了解目标页面的结构。
方法如下
- 访问该页面;
- 右键单击目标文本,然后点击“检查元素”;
- 请注意这些信息的嵌套结构、所属类以及对应的标签;
- 试着在其他相关页面中寻找结构模式。很有可能,你可以编写一个脚本,从整个网站中收集所有所需的信息。
完成这些步骤后,您将能更轻松地提取所需的具体信息。这样做的好处是,您不再需要处理那些会使文档杂乱无章的无关 HTML 内容。
了解页面布局对于抓取产品信息尤为重要。同一个网站上的产品页面结构通常都大同小异,甚至完全相同。只要掌握其中的规律,就能更快地提取和解析数据。
9. 在请求之间添加延迟
网络爬虫的意义在于以比人类更快的速度收集数据。我们理解这一点,但速度快也带来了一种不希望看到的副作用:它会昭然若揭地暴露请求是由机器人发出的。
请记住我们之前提到的“像普通访客一样行事”的原则:如果爬虫行为过于显眼,被封禁的概率就会大大增加。不过不用担心,你只需在使用同一IP地址进行多次并发或连续访问时,加入随机的延迟即可。
请注意:仅在使用同一代理时才需执行此操作。如果你在每次请求后都会更改 IP 和请求头,则无需设置延迟。但如果你是通过某个 IP 地址登录的,就应始终使用该 IP,这意味着你需要设置延迟。
请确保计时器设置的延迟时间略有不同,以便延迟效果呈现随机性。5到10秒之间的延迟时间应该效果不错。
10. 将重要页面缓存
在某些情况下,您可能需要重新访问之前已抓取过的页面,以获取更多信息。与其重复抓取,不如在首次访问时将页面缓存起来,这样所有数据都会被保存下来。
即使使用最先进的网页抓取工具,机器人也可能无法在第一次尝试时获取数据;即便成功了,你的努力也可能是白费的。不如一次性抓取所有 HTML 内容,然后从保存的版本中提取你需要的任何信息。
例如,您可以将产品页面缓存起来,以便随时调用。如果您今天需要查看产品规格,而明天可能需要查看价格,相关数据早已收集完毕,静待处理。
不过请注意,这只适用于静态信息!如果你需要获取股价,就必须不断提取最新数据,因为缓存版本很快就会过时。
11. 登录时请务必小心
你所需的数据可能隐藏在登录页面之后。社交媒体平台便是典型例子。当然,即使没有账号,你也能获取一些零星的内容,但这会费时费力,而且你可能想要查看那些只有加入群组或好友列表后才能看到的内容。简而言之,你可能需要登录,而这会带来一些问题。
所有拥有账户的网站用户都必须同意其《服务条款》。在这些条款中,可能会有条款明确禁止使用机器人、自动化工具或网络爬虫。在这种情况下,提取数据显然违反了用户已同意的规则。
还有一点需要注意:虽然网站可能不会对未注册访客格外关注,但它们会更加关注已登录用户发送的Cookie。因此,本质上来说,会有更多“目光”聚焦在你的机器人身上。行为过于明显或带有特征性Cookie的机器人,被封禁的可能性会更大。
您应该怎么做:
- 请仔细阅读《服务条款》,并确保您没有违反其中规定。
- 请确保您已遵循本文中的所有其他建议,尤其是关于代理、用户行为、JS 渲染以及请求头的内容。
12. 避免对网站造成损害
大多数网站管理员都不希望自己的网站上出现爬虫。对一些人来说,机器人只是个小麻烦;对另一些人来说,它们却是重大威胁。事实很简单:黑客和其他不法分子利用机器人制造麻烦和破坏,比如导致网站崩溃,或者试图窃取机密数据。
即使你的初衷完全是友好的,也可能无意中引发麻烦。大量并发请求可能会导致服务器崩溃,因此,以下是一些最佳实践,以确保你不会在身后留下混乱:
- 降低请求数量,以避免导致整个网站崩溃;
- 请阅读 Robots.txt 文件,该文件应说明允许机器人执行哪些操作。虽然它并非具有法律约束力的文件,但确实表达了网站所有者的意愿。
- 请注意如何使用抓取的数据。例如,擅自转载内容既会造成损害,也属于违法行为,因为该内容受版权法保护。
- 在可能的情况下,请向网站所有者征得许可后再收集网站信息。
通过友好且符合道德规范的行为,你可以尽自己的一份力,确保机器人被视为真正有用的工具,而非某种数字掠夺者。
额外提示:选择合适的网页抓取工具
虽然网络爬虫没有万能的公式,但有些因素值得考虑,它们能在最佳时机带来最佳效果。本文旨在解答所有疑问,涵盖所有明文或潜规则,并介绍所有最佳实践。API 将帮助解决日常爬虫中的诸多难题,这也正是我们首推自动化作为首要技巧的原因。
明智地进行数据抓取,并享受您辛勤工作的成果——我们将为您提供1000次免费通话!
虽然上述部分技巧涉及如何使用数据抓取工具,但其中许多功能可以由软件本身集成并实现自动化,从而让您能够专注于自己的任务和目标。正因如此,我们认为选择合适的软件与我们讨论的所有技巧同样重要,甚至更为关键。
老实说,我认为WebScrapingAPI 是一个绝佳的选择,尤其是因为你可以通过免费套餐试用该 API,在投入资金之前亲自体验它的实际表现。
如果您想多了解一下,我们撰写了一份详尽的选购指南,其中介绍了20款网络爬虫工具,欢迎查看!




