Urlretrieve 和 User-Agent?- Python

18 投票
5 回答
14556 浏览
提问于 2025-04-15 19:55

我正在使用urllib模块里的urlretrieve这个功能。

我找不到怎么在我的请求中添加一个用户代理的描述。


用urlretrieve可以做到吗?还是说我需要用其他的方法?

5 个回答

5

你可以使用URLopener或者FancyURLopener这两个类。这里的'版本'参数是用来指定打开链接的工具的用户代理,也就是告诉网站你用的是什么浏览器或工具。

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')
6

我知道这个问题已经存在了7年。我是通过尝试在使用urlretrieve函数时更改User-Agent来找到这个问题的。

对于那些也遇到这个问题但没有找到解决办法的人,这里是我做的步骤:

    # 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)

我添加代理的原因是为了在Charles中监控流量,下面是我得到的流量信息:

查看User-Agent

9

首先,设置版本:

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)

撰写回答