我正在尝试从自动交易器页面中抓取数据,并且设法抓住了该页面上每个报价的链接,但是当我尝试从每个报价中获取数据时,即使我使用的是标头,我也会得到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)
[对于处于相同位置的人:自动交易器使用cloudflare保护每个“汽车详细信息”页面,因此,我建议使用硒)]
答案 0 :(得分:1)
如果您可以设法通过浏览器获取数据,即以某种方式在网站上看到此数据,则可以通过请求复制该数据。
简而言之,您需要在请求中添加标头以匹配浏览器的请求:
您的浏览器会发送大量额外的标头,您永远不知道服务器实际检查了哪些标头,因此该技术将为您节省大量时间。
但是,如果有一些针对钝请求副本的保护措施(例如,一些临时令牌,因此请求无法重用。在这种情况下,您需要Selenium(浏览器仿真/自动化),这并不困难,因此值得使用。