【问题标题】:Banned despite IP and User Agent rotation Scraping尽管 IP 和用户代理轮换抓取,但仍被禁止
【发布时间】:2019-07-16 13:54:20
【问题描述】:

即使我在 Selenium Headless Chrome 中使用代理和用户代理轮换(并且我已经通过 https://free-proxy-list.net/ 和 TOR 提取了 ip,并使用 https://httpbin.org/ 对其进行了测试,它显示了预期的代理 ip 和用户代理我知道这应该是可行的),我在 Glassdoor 主页“https://www.glassdoor.com/index.htm”第一次尝试使用新 IP 和用户代理时仍然被阻止。

作为上下文:

  • 在本地运行的 Docker 容器中开发
  • 在 Selenium Python 中使用 Headless Chrome
  • 使用最近从 https://free-proxy-list.net/ 提取的代理以及带有旋转 TOR 代理的 Selenium(两者都给出相同的结果)
  • 使用来自https://developers.whatismybrowser.com/useragents/explore/software_name/chrome/ 的随机用户代理,符合 Docker 容器操作系统和浏览器规范(X11 和 Chrome/6 或 Chrome/7,因此不存在 JS 显示问题)
  • 抓取 Glassdoor 招聘信息。其他招聘网站运行良好,因此它是 Glassdoor 特有的。
  • 如果我使用像 ProtoVPN 这样的免费本地 VPN 提供商,它工作得很好,但这个解决方案不可扩展,因为整个想法不是在这个项目上花钱,而是让收集自动化(不是任何商业产品,只是想要足够的数据来练习一些 NLP/机器学习)

这是 Chrome 设置:

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--headless")
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--disable-translate")
chrome_options.add_argument(f"--proxy-server={ip}")
chrome_options.add_argument(f"user-agent=[{random_user_agent()}]")

我的理论是 Glassdoor 正在以某种方式测试我的浏览器,它表明我正在使用代理,或者我有一个设置表明它是一个自动浏览器。关于正在发生的事情有什么想法吗?

编辑: 我已经检查过 Selenium 被检测到的可能性,但现实是,即使我使用 Selenium 和免费代理/TOR/VPN,使用 VPN 进行抓取也没有问题,因此这意味着问题必须在使用代理与 VPN,所以也许有人可以帮助我了解这是怎么回事。

【问题讨论】:

  • 我和@JeffC 一起讨论这个问题。我对这个问题感到不舒服,因为您似乎在寻求有关如何绕过安全功能的建议。
  • 有很多方法可以对浏览器进行指纹识别和检测硒...您只是接触了 IP 和用户代理的皮毛。但是,您应该遵守他们的使用条款并停止抓取

标签: python selenium docker google-chrome web-scraping


【解决方案1】:

我认为这与您的 IP 地址或浏览器代理无关。您可能会被阻止,因为该站点正试图阻止抓取。见Can a website detect when you are using selenium with chromedriver?

【讨论】:

  • 我已经阅读了你指导我的问题,尽管它对理解 Selenium 的局限性非常有帮助,但它仍然没有解释为什么它只在我使用免费代理时才检测到,我可以假设他们会通过与我相同的方式提取来阻止,但是通过使用 TOR,很难以相同的方式解释,因为没有预先确定的 IP 的 AFAIK 列表。另外,为什么我在使用 VPN 时没有被阻止?答案应该更多地围绕使用代理或 VPN 之间的区别。我猜他们会留下不同的签名,我猜有些网站不允许你使用代理?
【解决方案2】:

我可以用那个简单的 python 脚本访问这个页面。

也许该网站已通过 selenium 自动对浏览器进行了指纹识别。也许试试https://github.com/GoogleChrome/puppeteer 或我的脚本。 此外,免费代理通常质量很差,也许您可​​以使用服务器或付费代理。

要选择最佳用户代理,您可以使用该库:https://github.com/Lobstrio/shadow-useragent

     1 import requests
     2 
     3 headers = {
     4     'authority': 'www.glassdoor.fr',
     5     'upgrade-insecure-requests': '1',
     6     'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36',
     7     'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
     8     'accept-encoding': 'gzip, deflate, br',
     9     'accept-language': 'fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7',
    10 }
    11 
    12 params = (
    13     ('countryRedirect', 'true'),
    14 )
    15 
    16 response = requests.get('https://www.glassdoor.fr/index.htm', headers=headers, params=params)
    17 print(response.content)

【讨论】:

    【解决方案3】:

    Glassdoor 有一个 API,您可以作为合作伙伴访问。 (您需要联系他们以获取访问权限)它应该为您提供所需的一切,而无需抓取网站。

    https://www.glassdoor.com/developer/index.htm

    【讨论】:

      猜你喜欢
      • 2020-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-20
      • 1970-01-01
      相关资源
      最近更新 更多