我一直在努力创建一个简单的网络抓取程序,以便在亚马逊上搜集100本畅销书排行榜。我之前在其他网站上使用过此代码没有任何问题。但由于某种原因,它会废弃第一页,但随后会针对以下迭代发布相同的结果。
我不确定它是否与亚马逊如何创建网址有关。当我手动输入"#2" (以及更高版本)在浏览器的URL末尾,它可以很好地导航。
(一旦scrape正在工作,我计划将数据转储到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")
答案 0 :(得分:1)
这是您必须面对的常见问题,一些站点异步加载数据(使用ajax),这些是您可以在DOM检查器的选项卡网络中看到的XMLHttpRequest。通常,网站使用POST
方法从不同的端点加载数据,以解决您可以使用urllib或请求库的问题。
在这种情况下,请求是通过GET方法进行的,您可以从此网址中删除该请求,而无需扩展您的代码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
参数