无法使用 Python 和 BS4 导航亚马逊分页



我一直在尝试创建一个简单的网络抓取程序来抓取亚马逊上 100 本畅销书排行榜的书名。我之前在另一个网站上使用过这段代码,没有问题。但出于某种原因,它会很好地废弃第一页,但随后会为后续迭代发布相同的结果。

我不确定这是否与亚马逊创建其网址的方式有关。当我在浏览器中的 url 末尾手动输入"#2"(及以后(时,它可以正常导航。

(一旦抓取工作,我计划将数据转储到 csv 文件中。但是现在,打印到终端就可以了。

import requests
from bs4 import BeautifulSoup
for i in range(5):
    url = "https://smile.amazon.com/Best-Sellers-Kindle-Store-Dystopian-Science-Fiction/zgbs/digital-text/6361470011/ref=zg_bs_nav_kstore_4_158591011#{}".format(i)
    r = requests.get(url)
    soup = BeautifulSoup(r.content, "lxml")
    for book in soup.find_all('div', class_='zg_itemWrapper'):
        title = book.find('div', class_='p13n-sc-truncate')
        name = book.find('a', class_='a-link-child')
        price = book.find('span', class_='p13n-sc-price')
        print(title)
        print(name)
        print(price)
print("END")

这是您必须面对的常见问题,某些站点异步加载数据(使用 ajax(,这些是 XMLHttpRequest,您可以在 DOM 检查器的选项卡中看到网络。通常,网站使用POST方法从不同的端点加载数据,以解决您可以使用urllib或请求库的问题。

在这种情况下,请求是通过GET方法进行的,您可以从此URL中抓取它,而无需扩展代码 https://www.amazon.com/Best-Sellers-Kindle-Store-Dystopian-Science-Fiction/zgbs/digital-text/6361470011/ref=zg_bs_pg_3?_encoding=UTF8&pg=3&ajax=1 只需更改pg参数

最新更新