【问题标题】:urlopen HTTP errorurlopen HTTP 错误
【发布时间】:2017-05-30 14:59:27
【问题描述】:

我尝试从古腾堡项目中打开一个页面以使用 BeautifulSoup 进行编辑

import urllib2
from bs4 import BeautifulSoup

url = "http://www.gutenberg.org/files/54801/54801-h/54801-h.htm"
page = urllib2.urlopen(url)
soup_packtpage=BeautifulSoup(page)

print(soup_packtpage)

我在 cloud9 工作。我有以下错误:

Traceback (most recent call last):
File "soup.py", line 5, in <module>
page = urllib2.urlopen(url)
File "/usr/lib/python2.7/urllib2.py", line 127, in urlopen
return _opener.open(url, data, timeout)
File "/usr/lib/python2.7/urllib2.py", line 410, in open
response = meth(req, response)
File "/usr/lib/python2.7/urllib2.py", line 523, in http_response
'http', request, response, code, msg, hdrs)
File "/usr/lib/python2.7/urllib2.py", line 448, in error
return self._call_chain(*args)
File "/usr/lib/python2.7/urllib2.py", line 382, in _call_chain
result = func(*args)
File "/usr/lib/python2.7/urllib2.py", line 531, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 403: Forbidden

怎么了?

【问题讨论】:

  • 这是一个 HTTP 错误,而不是 python 错误。意思是你不能提出这个要求。可能缺少标头,例如 cookie 或 API 凭据
  • 我无法重现此问题。我得到一个巨大的打印输出。
  • 你得到 403 因为它需要设置 cookie。在我第一次尝试时,它把我带到了 ~welcome_stranger 页面,然后在第二次尝试请求成功。这是你看到的吗?

标签: python beautifulsoup urllib2


【解决方案1】:
import cookielib
import urllib2

headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12;rv:50.0) Gecko/20100101 Firefox/50.0'}
cookie = cookielib.CookieJar()
handler = urllib2.HTTPCookieProcessor(cookie)
opener = urllib2.build_opener(handler)

request = urllib2.Request(url = "http://www.gutenberg.org/files/54801/54801-h/54801-h.htm", headers=headers)
page = opener.open(request).read()

尝试请求并添加标头。它适用于 Python 2.7.13

【讨论】:

    【解决方案2】:

    您应该尝试使用 requests 包。

    这在 python 3.6 中对我来说很好

    import requests
    from bs4 import BeautifulSoup as bs4
    
    url = "http://www.gutenberg.org/files/54801/54801-h/54801-h.htm"
    r = requests.get(url)
    #page = urllib3.urlopen(url)
    soup_packtpage = bs4(r.text, 'html.parser')
    
    print(soup_packtpage)
    
    paragrapghs = soup_packtpage.findAll("p")
    print(paragrapghs)
    
    f = open("guttenberg_book.html", 'a', encoding="utf-8")
    f.write(str(paragrapghs))
    f.close()
    

    我使用 BS4 添加了一个打印段落来帮助您入门.. 这仅输出书籍文本.. :)

    【讨论】:

      猜你喜欢
      • 2018-05-15
      • 2015-06-25
      • 2015-02-05
      • 1970-01-01
      • 2021-01-21
      • 1970-01-01
      • 2011-07-12
      • 2011-05-13
      • 2023-03-18
      相关资源
      最近更新 更多