首页 > 解决方案 > 如何避免机器人检测并使用 python 抓取网站?

问题描述

我的问题:

我想抓取以下网站:https ://www.coches.net/segunda-mano/ 。但是每次我用 python selenium 打开它时,我都会收到消息,他们检测到我是一个机器人。我怎样才能绕过这个检测?首先,我尝试了使用 selenium 的简单代码:

from selenium import webdriver
from bs4 import BeautifulSoup

browser = webdriver.Chrome('C:/Python38/chromedriver.exe')
URL = 'https://www.coches.net/segunda-mano/'
browser.get(URL)

然后我用请求尝试了它,但我也不工作。

from selenium import webdriver
from bs4 import BeautifulSoup

from fake_useragent import UserAgent

import requests

ua = UserAgent()

headers = {"UserAgent":ua.random}

URL = 'https://www.coches.net/segunda-mano/'
r = requests.get(URL, headers = headers)

print(r.statuscode)

在这种情况下,我收到消息 403 = 状态代码,说明禁止访问 URL。

不知道如何在不被阻止的情况下访问该网页。我将非常感谢您的帮助。提前致谢。

标签: pythonseleniumweb-scrapingpython-requestsbots

解决方案


Selenium 很容易被检测到,尤其是所有主要的反僵尸程序提供商(Cloudflare、Akamai 等)。

为什么?

  1. Selenium 和大多数其他主要网络驱动程序设置了一个浏览器变量(网站可以访问)navigator.webdriver调用true. 您可以通过前往 Google Chrome 控制台并运行来自行检查console.log(navigator.webdriver)。如果您使用的是普通浏览器,那将是错误的。

  2. 用户代理,通常所有设备都有所谓的“用户代理”,这是指访问网站的设备。Selenium 的用户代理看起来像这样:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/59.0.3071.115 Safari/537.36. 你抓到了吗?HeadlessChrome包括在内,这是另一种检测途径。

这些只是可以检测到 Selenium 浏览器的多种方式中的两种,我强烈建议您阅读这个这个

最后,如果你想要一个简单的、直接的解决方案来绕过检测,它几乎实现了我们讨论过的所有这些概念,我建议使用undetected-chromedriver。这是一个开源项目,它尽力让您的 Selenium chromedriver 看起来像人。


推荐阅读