作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试为我的 urllib 请求设置用户代理:
opener = urllib.request.build_opener(
urllib.request.HTTPCookieProcessor(cj),
urllib.request.HTTPRedirectHandler(),
urllib.request.ProxyHandler({'http': proxy})
)
最后:
response3 = opener.open("https://www.google.com:443/search?q=test", timeout=timeout_value).read().decode("utf-8")
将用户代理 header 设置为的最佳方法是什么
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36
最佳答案
据我所知,对于urllib
,我们有两个选择。
build_opener
返回 OpenerDirector
对象,它具有 addheaders
属性。我们可以使用该属性更改用户代理和其他 header 。
opener.addheaders = [('User-Agent', 'My User-Agent')]
url = 'http://httpbin.org/user-agent'
r = opener.open(url, timeout=5)
text = r.read().decode("utf-8")
或者,我们可以使用install_opener
将OpenerDirector对象安装到全局开启器中。并使用 urlopen 提交请求。现在可以使用 Request
来设置 header 。
urllib.request.install_opener(opener)
url = 'http://httpbin.org/user-agent'
headers = {'user-agent': "My User-Agent"}
req = urllib.request.Request(url, headers=headers)
r = urllib.request.urlopen(req, timeout=5)
text = r.read().decode("utf-8")
我个人更喜欢第二种方法,因为它更一致。一旦我们安装了 opener,所有请求都将具有相同的处理程序,并且我们可以继续以相同的方式使用 urllib。但是,如果您不想对所有请求使用这些处理程序,则应选择第一种方法并使用 addheaders
为特定 OpenerDirector 对象设置 header 。
与 requests
事情更简单了。
如果我们想更改所有请求的用户代理或其他 header ,我们可以使用 session.heders
属性,
s = requests.session()
s.headers['user-agent'] = "My User-Agent"
r = s.get(url, timeout=5)
或者如果我们只想为特定请求设置 header ,请使用 headers
参数。
headers = {'user-agent': "My User-Agent"}
r = requests.get(url, headers=headers, timeout=5)
关于python - 将用户代理实现到 urllib.request.build_opener 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53035241/
我正在尝试为我的 urllib 请求设置用户代理: opener = urllib.request.build_opener( urllib.request.HTTPCooki
我是一名优秀的程序员,十分优秀!