How to fix HTTPError: Forbidden in urllib/urlopen

How to fix HTTPError: Forbidden in urllib/urlopen

我最近才开始学习python,虽然我之前确实有一些编码经验。

我正在尝试使用 BeautifulSoup 从网站上抓取某些内容,但一直出现错误。我意识到这个问题之前已经发布过,但我不确定如何实施解决方案..

这是我的代码:

import bs4
from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup
my_url = 'http://archive.ontheissues.org/Free_Trade.htm'

#opening up connection, grabbing the page
uClient = uReq(my_url)

我收到的错误信息是:

  File "D:\Anaconda\lib\urllib\request.py", line 649, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)

HTTPError: Forbidden

据推测,答案 here 解决了问题,但我不确定如何实际编码以及我的整个修改后的脚本应该是什么样子。

有人能告诉我如何修改我的代码吗?

使用请求。它更好,因为它为您完成了所有繁重的工作 (urllib):

# pip install requests

from requests import Session
from bs4 import BeautifulSoup


my_url = 'http://archive.ontheissues.org/Free_Trade.htm'

s = Session()

r = s.get(my_url)

# get soup
soup = BeautifulSoup(r.content, 'html5lib')

print(soup.prettify())

另一种方法是尝试使用 Request 方法设置已知的浏览器用户代理:

import bs4
from urllib.request import Request,urlopen as uReq
from bs4 import BeautifulSoup as soup
my_url = 'http://archive.ontheissues.org/Free_Trade.htm'
req=Request(my_url,headers={'User-Agent': 'Mozilla/5.0'})
#opening up connection, grabbing the page
uClient = uReq(req)