无法用BeautifulSoup刮擦亚马逊。不是标题问题

时间:2020-04-06 12:19:37

标签: python

我想淘汰婴儿产品中的亚马逊畅销书前10名。 我只想要标题文本,但看来我有问题。 我在尝试此代码时得到“ None”。 获得“结果”后,我想使用“内容”对其进行迭代并打印标题。 谢谢!

import requests
from bs4 import BeautifulSoup
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36'}
url = "https://www.amazon.com/gp/bestsellers/baby-products"

r=requests.get(url, headers=headers)
print("status: ", r.status_code)

soup = BeautifulSoup(r.content, 'html.parser')
print("url: ", r.url)

result = soup.find("ol", {"id": "zg-ordered-list"})
content = result.findAll("div", {"class": "a-section a-spacing-none aok-relative"})

print(result)
print(content)

1 个答案:

答案 0 :(得分:2)

您将无法以这种方式抓取亚马逊网站。您正在使用requests.get获取所提供网址的HTTP响应正文。请注意该响应实际是什么(例如,通过print(r.content))。在Web浏览器中看到的内容与原始HTTP响应不同,这是由于Amazon使用了客户端渲染技术(通常是JavaScript等)。

我建议您使用Selenium,它类似于Python运行时内部的典型浏览器,可以像普通浏览器那样渲染网站,并允许您访问在Web浏览器中看到的同一网站的属性。