你正在运行一个网络爬虫,它工作了几天,突然停止工作,你看得更深,你发现你正在爬取的网站正在阻止你的代理。 你很沮丧,你不知道该怎么办.. 没关系,我们都去过那里。 在这篇博文中,我们将阐明您可以采取哪些措施来解除对代理的阻止并继续抓取而不被发现。
亚马逊、谷歌、Linkedin、Zillow 等网站可以通过多种方式检测网络爬虫。
以下是您一直在做的一些常见错误,您必须停止这样做。
常见错误
您的请求正在生成相同的足迹,您正在一遍又一遍地发送相同的请求标头、相同的用户代理、相同的代理。 常见的网站通过模式使用来检测网络爬虫,例如,谷歌使用 CAPTCHA 运行机器人测试检查,以确定给定 IP 背后的人是否不是机器人,通常机器人不解决验证码,而不是 Crawlbase(以前的 ProxyCrawl ) 验证码解决问题的机器人。
您的请求进行了大量重定向,甚至您的机器人正在抓取的网页出现错误,并且运行在从未存在的 404 页面上。 如果您正在向在 HTTPS 上运行的站点发出请求,请尽量避免向 HTTP URL 发送请求,因为这些请求可能会重定向,一遍又一遍地发送它们,使站点注意到您正在运行一个机器人,这显然是您的机器人不想去。 您的关键是您的机器人保持匿名,否则您必须不断替换您的代理列表并删除停止工作的内容,这将成为一个令人沮丧的问题。
如果您不想维护代理,可以使用 Crawlbase(以前的 ProxyCrawl)智能反向连接 设计用于在每个请求上轮换的代理,或者即使您不想处理代理所做的事情并且根本不希望您的请求与您的爬虫足迹一起使用,Crawlbase 的 Crawling API(以前称为 ProxyCrawl)是您的举行,它掩盖了所有的流量,你不会注意到幕后的工程师如何让你的请求通过任何网站而不被注意到。
您的刮刀未启用 Javascript。 现在这个很棘手,所以请允许我解释一下为什么在许多情况下 javascript 抓取是不可避免的。 让我们举一个机器人爬取 AngelList 或 SimilarWeb 的例子。 在没有启用 javascript 的浏览器的情况下,您能够通过 CURL 请求成功的可能性非常低,如果不是接近没有成功的话。
请求示例。
这永远行不通,不要这样做。
1 | curl -x proxy.crawlbase.com:9000 "https://www.similarweb.com/website/crawlbase.com" |
上面的 curl 命令,向 SimilarWeb 发送请求以获取 crawlbase.com 网站的数据,它使用代理,我们正在添加 -x proxy.crawlbase.com:9000
以端口 9000 旋转反向连接为例,您可以使用您拥有的任何代理或任何代理服务。 上述请求不会带来任何价值,即使您发送了正确的请求标头、cookie 甚至是住宅代理,请使用您的住宅 IP 进行尝试,删除代理选项并自己查看。
你的请求很可能会碰到这个你永远不想得到的丑陋页面。

这会奏效,成功是有保证的。
如何使它工作?
您需要将代理连接到无头浏览器,例如 无头镀铬,或 firefox headless 或仅举几例,它们可以在无头环境中利用真实浏览器。 SimilarWeb 等网站拒绝与真实浏览器的足迹不匹配的 HTTP GET 请求。 在这种情况下,没有代理可以帮助您。
在上述情况下您必须执行的操作,例如使用 抓取 API 的 Crawlbase(以前的 ProxyCrawl)并将您的 CURL 请求更改为类似的内容。
1 | 卷曲“https://api.crawlbase.com/?token=JS_TOKEN&url=https://www.similarweb.com/website/crawlbase.com” |
现在注意 curl 请求,我们从 curl 选项中删除了代理,并且我们正在发送一个带有 Javascript 令牌的请求,其中包含我们最初想要抓取的 URL。 上述请求只会给您来自 SimilarWeb 的成功响应。
这是为什么?
由于 抓取 API 正在幕后做所有的事情,为您运行真正的浏览器,如果发生错误,重试错误并为您提供数据,您甚至不必担心 Crawlbase(以前的 ProxyCrawl)机器人在后台执行的复杂性。
现在的结果不同了,我们获得了我们需要的数据,而不会冒着代理被阻止的风险。
