无法使用Python和漂亮的汤来抓网

问题描述 投票:0回答:2

我正在尝试进行一些网络爬网(用于使用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上。谢谢。

python python-requests http-status-code-403
2个回答
1
投票

请求包允许您更改用户代理,这使服务器认为您是其他浏览器。

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())

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是否合法。

© www.soinside.com 2019 - 2024. All rights reserved.