【问题标题】:Requests.get in Python using "User-Agent" not simulating a browser requestRequests.get 在 Python 中使用“User-Agent”不模拟浏览器请求
【发布时间】:2014-05-26 21:33:13
【问题描述】:

我必须从 Linux 终端使用 Python 从网页中收集信息,它工作得很好,但是当我尝试使用 requests.get 时,一些页面(不是全部)正在检索无效的 URL,因为它们有代理检测器并且它们没有'不知道如何回答我的请求(我不是来自 Linux 终端的浏览器或移动应用程序)。

使用“User-Agent”标头也不起作用,我尝试了几种不同的方法来发送它以模拟我是 Mozilla 浏览器:

user_agent = {'User-Agent': 'Mozilla/5.0'}

user_agent = {'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; hu-HU; rv:1.7.8) Gecko/20050511 Firefox/1.0.4'}

或许多其他组合。

在某些服务器上当我尝试使用这一行时:

page = requests.get(url, headers=user_agent)

我收到一个错误的请求,因为这些服务器试图向我发送一个用于桌面或移动浏览器的网页,但它们无法识别它。

以这种方式发送用户代理我做错了吗?我在 Python Notebook 中尝试了我的代码,由于我目前(当然)正在从浏览器发送请求,因此它运行良好。

【问题讨论】:

  • 也许他们正在尝试运行一些 JavaScript 来检测浏览器。查看页面源代码。
  • @MaximilianoRios 您的 Python Notebook 不太可能影响您的 requests 请求的标头。提示:尝试添加一些Referer头(今天我在印度找到一个页面,在缺少Referer的情况下回复404)。
  • 但是很容易识别问题,我从终端发送一个请求,它得到一个不确定的来源,我从 python 笔记本发送它,它可以工作。我会尝试添加一个推荐人,看看这是否有效
  • 您始终可以使用http://httpbin.org/get 来回显标题;很可能您需要的不仅仅是 User-Agent 标头,requests 会破坏这些标头。添加一个Referrer,也许?
  • 我建议你使用像wireshark 这样的工具来精确地查看服务器和实际浏览器之间的对话是什么。您将看到它是否涉及 cookie、javascript、自定义标头或...

标签: python python-requests


【解决方案1】:

您使用的是非常旧的用户代理,并且确实有些网站会因此而阻止您。

>>> import requests
>>> header = {'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:32.0) Gecko/20100101 Firefox/32.0',}
>>> url = 'http://www.w3.org/'
>>> r = requests.get(url, headers=header)
>>> r.headers
CaseInsensitiveDict({'content-length': '40737', 'content-location': 'Home.html', 'accept-ranges': 'bytes', 'expires': 'Tue, 24 Jun 2014 04:44:36 GMT', 'vary': 'negotiate,accept', 'server': 'Apache/2', 'tcn': 'choice', 'last-modified': 'Mon, 23 Jun 2014 11:15:15 GMT', 'etag': '"9f21-4fc7ef51956c0;89-3f26bd17a2f00"', 'cache-control': 'max-age=600', 'date': 'Tue, 24 Jun 2014 04:34:36 GMT', 'p3p': 'policyref="http://www.w3.org/2001/05/P3P/p3p.xml"', 'content-type': 'text/html; charset=utf-8'})
>>> r.request.headers
CaseInsensitiveDict({'Accept-Encoding': 'gzip, deflate, compress', 'Accept': '*/*', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:32.0) Gecko/20100101 Firefox/32.0'})
>>> 

【讨论】:

    【解决方案2】:

    我用fake UserAgent

    使用方法:

    from fake_useragent import UserAgent
    import requests
    
    
    ua = UserAgent()
    print(ua.chrome)
    header = {'User-Agent':str(ua.chrome)}
    print(header)
    url = "https://www.hybrid-analysis.com/recent-submissions?filter=file&sort=^timestamp"
    htmlContent = requests.get(url, headers=header)
    print(htmlContent)
    

    输出:

    Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1309.0 Safari/537.17
    {'User-Agent': 'Mozilla/5.0 (X11; OpenBSD i386) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36'}
    <Response [200]>
    

    【讨论】:

      猜你喜欢
      • 2013-06-14
      • 1970-01-01
      • 2020-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-09
      • 2012-04-11
      相关资源
      最近更新 更多