【问题标题】:Python requests - 403 forbidden - despite setting `User-Agent` headersPython 请求 - 403 被禁止 - 尽管设置了 `User-Agent` 标头
【发布时间】:2017-12-18 13:49:21
【问题描述】:
import requests
import webbrowser
from bs4 import BeautifulSoup

url = 'https://www.gamefaqs.com'
#headers={'User-Agent': 'Mozilla/5.0'}    
headers ={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'}


response = requests.get(url, headers)

response.status_code 返回 403。 我可以使用firefox/chrome浏览网站,所以似乎是编码错误。

我不知道自己犯了什么错误。

谢谢。

【问题讨论】:

    标签: python web-scraping python-requests


    【解决方案1】:

    如果您通过 Session 对象发出请求,则此方法有效。

    import requests
    
    session = requests.Session()
    response = session.get('https://www.gamefaqs.com', headers={'User-Agent': 'Mozilla/5.0'})
    
    print(response.status_code)
    

    输出:

    200
    

    【讨论】:

    • 谢谢。 Session 对象到底是怎么回事?我从来不需要创建 Session 对象来抓取网站。
    • @Moondra Session 对象的主要特点是它与 cookie 的兼容性。如您所知,该网站可能正在设置并请求回显 cookie,以防止抓取,这可能违反了其政策。
    • Cookie。我知道了。谢谢。
    • 我已经在另一个网站上尝试过,但它并没有解决问题,我仍然得到 403。
    • 这里也一样,我想知道您是否找到了解决方案? @SarahJessica
    【解决方案2】:

    使用关键字参数对我有用:

    import requests
    headers={'User-Agent': 'Mozilla/5.0'}
    response = requests.get('https://www.gamefaqs.com', headers=headers)
    

    【讨论】:

      【解决方案3】:

      尝试使用会话。

      import requests
      session = requests.Session()
      response = session.get(url, headers={'user-agent': 'Mozilla/5.0'})
      print(response.status_code)
      

      如果请求仍然返回 403 Forbidden (在会话对象 & 将用户代理添加到标头),您可能需要添加更多标头:

      headers = {
          'user-agent':"Mozilla/5.0 ...",
          'accept': '"text/html,application...',
          'referer': 'https://...',
      }
      r = session.get(url, headers=headers)
      

      在 chrome 中,可以在开发者工具的 Network > Headers > Request-Headers 中找到请求标头。 (按 F12 切换。)

      原因是,很少有网站会在接受请求之前寻找用户代理或特定标头的存在。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-01-29
        • 2023-03-14
        • 2022-01-18
        • 1970-01-01
        • 2020-06-02
        • 2016-11-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多