python - 如何避免机器人检测并使用 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。
不知道如何在不被阻止的情况下访问该网页。我将非常感谢您的帮助。提前致谢。
解决方案
Selenium 很容易被检测到,尤其是所有主要的反僵尸程序提供商(Cloudflare、Akamai 等)。
为什么?
Selenium 和大多数其他主要网络驱动程序设置了一个浏览器变量(网站可以访问)
navigator.webdriver
调用true
. 您可以通过前往 Google Chrome 控制台并运行来自行检查console.log(navigator.webdriver)
。如果您使用的是普通浏览器,那将是错误的。用户代理,通常所有设备都有所谓的“用户代理”,这是指访问网站的设备。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 看起来像人。
推荐阅读
- android - 使用对话框的 KEY 检索 Firebase 数据
- java - 从将对象存储为值的哈希图中获取最小值
- angular - 修改类型以在嵌套对象(路由)中具有新属性
- python - 在 pytest 测试开始时创建服务器
- mysql - 根据前一行中的列值和同一行中的其他列计算列值(oracle 11g db)
- haskell - 如何在 Haskell 中使用用户输入测试小程序
- ios - 使用 react-native-share 将视频分享到 IOS 上的 Instagram
- string - 如何计算一个单元格中的唯一特征字符串?
- python - 为什么在导入内部函数时会发生 UnboundLocalError
- css - 如何使用变换改善这种悬停动画效果:比例和原点?