我正在尝试进行一些网络爬网(用于使用Python udemy自动完成无聊的课程),但是我一直遇到HTTPError: 403 Client Error: HTTP Forbidden for url:
错误。这是我一直在使用的代码:
import bs4
import requests
ro = requests.get('https://www.amazon.com/Automate-Boring-Stuff-Python-Programming/dp/1593275994/')
ro.raise_for_status()
这是我收到的错误消息:
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
ro.raise_for_status()
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/requests/models.py", line 940, in raise_for_status
raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 403 Client Error: HTTP Forbidden for url: https://www.carsales.com.au/cars/details/2012-mazda-3-neo-bl-series-2-auto/SSE-AD-6368302/
我已经在线阅读了有关更改用户代理的信息,但我也不知道这是什么或如何执行。有人可以在这里提供一些帮助吗?我完全迷路了,我似乎无法在任何地方获得任何网络抓取信息。如果有帮助,我就在Mac上。谢谢。
答案 0 :(得分:1)
requests包允许您更改用户代理,这使服务器认为您是其他浏览器。
import requests
from bs4 import BeautifulSoup
headers = {'User-Agent': 'Mozilla/5.0'}
ro = requests.get('https://www.amazon.com/Automate-Boring-Stuff-Python-Programming/dp/1593275994/', headers=headers)
ro.raise_for_status()
soup = BeautifulSoup(ro.text, 'html.parser')
print(soup.prettify())
答案 1 :(得分:0)
首先,我建议使用if语句或切换用例语句将ro.raise_for_status()
替换为ro.status_code
,但是,如果要使用ro.raise_for_status()
,则可以在try内使用它-catch块。关于该错误,Amazon似乎阻止了具有默认requests
模块用户代理的请求,为解决此问题,您可能需要将用户代理更改为以下内容: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
,以获取更多信息。有关实施此操作的信息,请检查this页的 使用Python请求 部分。
P.S:请确保检查Web抓取Amazon是否合法。