我实际上是试图刮一些汽车数据从不同的网站,我一直在使用 selenium 与chromebrowser,但一些网站实际上阻止 selenium 与验证码验证(例如:https://www.leboncoin.fr/),而这只需要1或2个请求。我尝试在chromebrowser中更改$_ cdc,但这并没有解决问题,我一直在chromebrowser中使用这些选项
user_agent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36'
options = webdriver.ChromeOptions()
options.add_argument(f'user-agent={user_agent}')
options.add_argument('start-maximized')
options.add_argument('disable-infobars')
options.add_argument('--profile-directory=Default')
options.add_argument("--incognito")
options.add_argument("--disable-plugins-discovery")
options.add_experimental_option("excludeSwitches", ["ignore-certificate-errors", "safebrowsing-disable-download-protection", "safebrowsing-disable-auto-update", "disable-client-side-phishing-detection"])
options.add_argument('--disable-extensions')
browser = webdriver.Chrome(chrome_options=options)
browser.delete_all_cookies()
browser.set_window_size(800,800)
browser.set_window_position(0,0)
我试图刮的网站使用DataDome的机器人安全,有线索吗?
4条答案
按热度按时间deyfvvtc1#
为了避免像Datadome这样的反网页抓取服务,我们首先应该了解它们的工作原理,这实际上可以归结为3类检测:
1.请求详细信息
像Datadome这样的服务使用这些工具来计算每个访问者的信任分数。低分数意味着你很可能是一个机器人,所以你要么被要求破解验证码,要么被完全拒绝访问。那么,我们如何获得高分数呢?
IP地址/代理
对于IP地址,我们希望通过代理来分配负载,IP地址有以下几种:
*数据中心:分配给Google Cloud、AWS等大公司的地址
这些都是可怕的为您的机器人评分,应该避免。
*住宅:分配给居住空间的地址。
这些都是伟大的为您的机器人得分。
*移动的:分配给手机基站的地址。
这些都是一样好的住宅,有时甚至更好。
因此,为了保持高信任分数,我们的scraper应该在一个住宅或移动的代理池中轮换。
Javascript指纹
网站可以使用Javascript对连接的客户端(scraper)进行指纹识别,因为Javascript会泄漏大量有关客户端的数据:操作系统、支持字体、可视渲染能力等。
例如:如果Datadome看到一堆Linux客户端通过1280 x720窗口连接,那么它可以简单地推断出这类设置很可能是bot,并给每个具有这些指纹详细信息的人低信任分数。
如果你使用Selenium来绕过Datadome,你需要修补这些漏洞来脱离低信任区。这可以通过修补浏览器本身来伪造指纹细节,如操作系统等。
有关这方面的更多信息,请参见我的博客How to Avoid Web Scraping Blocking: Javascript
请求详细信息
最后,即使我们有大量的IP地址,并修补了浏览器以防止泄漏关键指纹细节,如果我们的连接模式不寻常,Datadome仍然会给予我们低信任分数。
为了解决这个问题,我们的scraper应该以不明显的模式进行刮擦,它应该偶尔连接到非目标页面,比如网站的主页,这样看起来更像人类。
现在我们了解了scraper是如何被检测到的,我们可以开始研究如何绕过这个问题了。Selenium有一个很大的社区,这里要寻找的关键词是“stealth”。例如,selenium-stealth(及其分支)是修补Selenium指纹泄露的一个很好的起点。
不幸的是,这个抓取区域不是很透明,因为Datadome可以简单地收集已知的补丁并相应地调整它们的服务。这意味着你必须自己找出很多东西,或者使用web抓取API来为你抓取最初几个请求之后的受保护网站。
我已经尽我所能地把这个问题回答出来了,所以更多的信息请看我关于这个问题的系列博客文章How to Scrape Without Getting Blocked
nzkunb0c2#
它可能是由于无数的原因发生的。尝试通过答案here,给出了一些方法,在你可以防止这个问题。
一个简单的解决方案有时对我有用,就是在selenium中使用
Waits
/Sleep
调用,请参阅文档中关于Waits的here。sbdsn5lh3#
验证码有什么问题吗?你可以用Anti Captcha或其他廉价的服务来解决它。下面是NodeJS的一个例子:https://github.com/MoterHaker/bypass-captcha-examples/blob/main/geo.captcha-delivery.com.js
dffbzjpn4#
关于您从不同网站或https://www.leboncoin.fr/抓取汽车数据的用例的更多细节将帮助我们构建更规范的答案。然而,我能够使用Selenium访问 Page Source,如下所示:
但是,从DOM Tree可以明显看出,网站通过DataDome受到了 Bad Bots 的保护,如下所示:
DataDome的第一次尝试
主要功能如下:
结尾
有关DataDoe的文档可在以下位置找到: