Python 3,urlopen - HTTP 错误 403:禁止

Posted

技术标签:

【中文标题】Python 3,urlopen - HTTP 错误 403:禁止【英文标题】:Python 3, urlopen - HTTP Error 403: Forbidden 【发布时间】:2018-05-15 14:44:56 【问题描述】:

我正在尝试自动下载出现在 google 图片搜索中的第一张图片,但我无法读取网站源代码并出现错误(“HTTP 错误 403:禁止访问”)。 有任何想法吗?谢谢您的帮助!

这是我的代码:

from urllib.request import urlopen
from bs4 import BeautifulSoup

word = 'house'
r = urlopen('https://www.google.pl/search?&dcr=0&tbm=isch&q='+word)
data = r.read()

【问题讨论】:

也许谷歌不喜欢urlopen()发送的默认用户代理 可能重复***.com/questions/16627227/… 【参考方案1】:

显然您必须传递 headers 参数,因为该网站阻止您认为您是请求数据的机器人。我在这里找到了一个这样做的例子HTTP error 403 in Python 3 Web Scraping。

另外,urlopen 对象不支持headers 参数,所以我不得不改用Request 对象。

from urllib.request import urlopen, Request
from bs4 import BeautifulSoup

word = 'house'
r = Request('https://www.google.pl/search?&dcr=0&tbm=isch&q='+word, headers='User-Agent': 'Mozilla/5.0')
response = urlopen(r).read()

【讨论】:

谢谢@Alex,它解决了我的问题!现在我可以阅读网站源代码了:)

以上是关于Python 3,urlopen - HTTP 错误 403:禁止的主要内容,如果未能解决你的问题,请参考以下文章

python异常处理时报错,提示:HTTPError: HTTP Error 404: Not Found

Python:从 urllib2.urlopen 调用中获取 HTTP 标头?

Python爬虫3-----Urllib库的基本使用1

python urllib2.urlopen(url).read()乱码

在 Python 3 中为 urllib.request.urlopen 更改用户代理

python3.7 urlopen请求HTTPS警告'CERTIFICATE_VERIFY_FAILED'解决办法