get请求返回403状态代码,即使在使用标头之后也是如此

2024-10-03 06:25:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从autotrader页面中获取数据,并设法获取该页面上每个报价的链接,但当我试图从每个报价中获取数据时,即使我使用了标题,我仍会收到403个请求状态。 我还能做些什么来克服它呢

headers = {"User Agent": 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) '
                     'Chrome/85.0.4183.121 Safari/537.36'}
page = requests.get("https://www.autotrader.co.uk/car-details/202010145012219", headers=headers)
print(page.status_code) # 403 forbidden
content_of_page = page.content
soup = bs4.BeautifulSoup(content_of_page, 'lxml')
title = soup.find('h1', {'class': 'advert-heading__title atc-type-insignia atc-type-insignia--medium '})
print(title.text)

[对于处于相同位置的人:autotrader使用cloudflare保护每个“汽车详细信息”页面,因此我建议使用selenium作为示例]


Tags: oftitle链接typepage页面contentheaders
1条回答
网友
1楼 · 发布于 2024-10-03 06:25:36

如果您能够通过浏览器获取数据,即您在网站中以某种方式看到这些数据,那么您可以通过请求复制这些数据

简而言之,您的请求中需要标题,以匹配浏览器的请求:

  • 在浏览器中打开开发工具(例如F12或cmd+opt+I或单击菜单)
  • 打开网络选项卡
  • 重新加载页面(仅整个网站或目标请求的url,任何提供服务器所需响应的内容)
  • 在“网络”选项卡中找到指向所需url的http请求。右键单击它,单击“复制…”,然后选择所需的选项(例如卷曲)

您的浏览器会发送大量额外的标题,您永远不知道服务器会实际检查哪些标题,因此这种技术将为您节省大量时间

但是,如果存在一些针对钝性请求副本的保护,例如一些临时令牌,那么这可能会失败,因此请求无法重用。在这种情况下,您需要Selenium(浏览器仿真/自动化),这并不困难,因此值得使用

相关问题 更多 >