【问题标题】:How to change user agent urllib2如何更改用户代理 urllib2
【发布时间】:2018-02-21 21:05:40
【问题描述】:

我正在尝试使用以下方式访问页面

page = urllib2.urlopen(full_url)
soup = BeautifulSoup(page, 'html.parser')

li_post_id = "post-" + str(post_id)
li_soup = soup.find('li', attrs={'id':li_post_id})

这在我的 ubuntu 机器上运行良好,但是在我的 Windows 服务器上运行它时出现 403 Forbidden 错误,所以我认为问题出在用户代理上。

我如何将其更改为 Firefox?我只看过使用请求更改用户代理的教程,但我不想将我的所有代码都更改为此。

【问题讨论】:

  • 你在HTTP请求头中设置了User-Agent,BS与它无关。
  • 如前所述,BeautifulSoup 根本不与 HTTP 请求交互。你真正想知道的(我相信)是如何使用 urllib2 来做到这一点。我编辑了您的问题以反映这一点。

标签: python python-2.7 user-agent


【解决方案1】:

你可以试试这个。

import random
import requests, bs4


agents= [
'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko)',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko)',
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko)',
'Mozilla/5.0 (Windows NT 6.4; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)']

headers = {"User-Agent":random.choice(agents)}
response = requests.get(full_url,headers=headers)
soup = BeautifulSoup(response.text, 'lxml')

【讨论】:

  • 提问者表示他们已经看到使用requests的答案,但他们正在寻找不同的解决方案。
【解决方案2】:

更改标题与BeautifulSoup 没有任何关系。它仅用于 HTML 解析。您需要在 urllib 请求中更改它,如下所示:

Python3

import urllib.request

req = urllib.request.build_opener()
req.addheaders = [('User-Agent', 'Some user agent')]
response = req.open('http://www.stackoverflow.com')

Python2.7

import urllib2

req = urllib2.build_opener()
req.addheaders = [('User-Agent', 'Some user agent')]
response = req.open('http://www.stackoverflow.com')

【讨论】:

    猜你喜欢
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多