16

我正在使用 urllib 模块中的 urlretrieve。

我似乎找不到如何在我的请求中添加用户代理描述。


urlretrieve 可以吗?还是我需要使用其他方法?

4

5 回答 5

8

首先,设置版本:

urllib.URLopener.version = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36 SE 2.X MetaSr 1.0'

然后:

filename, headers = urllib.urlretrieve(url)
于 2015-08-22T10:37:48.473 回答
5

您可以使用 URLopener 或 FancyURLopener 类。'version' 参数指定 opener 对象的用户代理。

opener = FancyURLopener({}) 
opener.version = 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.69 Safari/537.36'
opener.retrieve('http://example.com', 'index.html')
于 2011-08-14T19:41:03.790 回答
5

我知道这个问题已经存在了 7 年。我通过试图弄清楚如何更改User-Agentwhile usingurlretrieve函数来解决这个问题。

对于不幸遇到此问题的任何人,我是这样做的:

    # proxy = ProxyHandler({'http': 'http://192.168.1.31:8888'})
    proxy = ProxyHandler({})
    opener = build_opener(proxy)
    opener.addheaders = [('User-Agent','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30')]
    install_opener(opener)

    result = urlretrieve(url=file_url, filename=file_name)

我添加代理的原因是为了监控查尔斯的流量,这是我得到的流量:

查看用户代理

于 2017-04-19T16:39:03.997 回答
2

我认为 urlretrieve 不可能 - 至少不容易。我建议创建一个 urllib2.Request 对象并将所需的标头传递给它。看

http://docs.python.org/library/urllib2.html#urllib2.urlopen

举些例子。

于 2010-03-02T16:14:12.507 回答
2

像这样不使用 urllib 的东西,对我来说是一个刮板

import requests

imageURL='http://image.jpg'
headers={'user-agent': 'Mozilla/5.0'}
r=requests.get(imageURL, headers=headers)
with open('image.jpg', 'wb') as f:
    f.write(r.content)
于 2021-02-11T11:48:05.653 回答