【问题标题】:Python Requests - "To continue your browser has to accept cookies and has to have JavaScript enabled."Python 请求 - “要继续,您的浏览器必须接受 cookie 并且必须启用 JavaScript。”
【发布时间】:2019-05-23 21:32:42
【问题描述】:

我想从 mobile.de 上抓取一些广告供个人使用。

我正在使用带有 requests lib 的 python 3.6,但我遇到了一些机器人检查的问题。我怎样才能从他们的网站通过这个网关?

import requests
from bs4 import BeautifulSoup

r = requests.get("https://www.mobile.de/?lang=en")
bs = BeautifulSoup(r.content, 'lxml')
print(bs)

这部分代码显示如下:

<p>To continue your browser has to accept cookies and has to have JavaScript enabled.</p>

我在哪里可以找到我需要解决的逻辑才能通过这个?

【问题讨论】:

    标签: python python-3.x web-scraping cookies python-requests


    【解决方案1】:

    您收到意外内容的原因是您没有有效的标题。就像@afit 说的那样。但是To continue your browser has to accept cookies and has to have JavaScript enabled. 是有道理的,因为如果您不启用 JavaScript,您将不会加载完整的内容。

    注意:我建议您使用selenium 来执行此操作。 requests_html 无法成功访问网站,原因是在呈现时缺少合适的标题。顺便说一句,如果你想在 JavaScript 中访问 url 并抓取内容,这将是一项艰巨的工作。

    from bs4 import BeautifulSoup
    from selenium import webdriver
    
    dr = webdriver.Chrome()
    dr.get("https://www.mobile.de/?lang=en")
    bs = BeautifulSoup(dr.page_source,"lxml")
    

    【讨论】:

    【解决方案2】:

    他们可以通过多种不同的方式来做到这一点,从微不足道到棘手到大规模绕过。一种方法是修改您的User-Agent,因为他们最简单的方法是基于此拒绝请求。

    r = requests.get(
        'https://yoursite.com',
        headers = {
            'User-Agent': 'Popular browser\'s user-agent',
        }
    )
    

    从您显示的示例 URL 中看起来并不像,但他们可能期望该 URL 在 访问网站上另一个丢弃 cookie 的页面后被访问。如果是这种情况,请提出更早的请求并在您的 requests 调用中提供 cookie。

    【讨论】:

      【解决方案3】:

      为了requests可以处理和保存服务器发送的cookies,你必须使用request.Session()

      所以,而不是

      r = requests.get("https://www.mobile.de/?lang=en") 
      

      像这样使用它:

      req = requests.Session()
      req.get("https://www.mobile.de/?lang=en")
      

      【讨论】:

        猜你喜欢
        • 2016-06-01
        • 1970-01-01
        • 2015-05-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-15
        • 2013-08-11
        • 1970-01-01
        相关资源
        最近更新 更多