【发布时间】: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、自定义标头或...