来自亚马逊的网络抓取评论仅返回第一页的数据

问题描述 投票:0回答:4

我正在尝试从亚马逊抓取评论。评论可以出现在多个页面上,以抓取多个页面我构建了一个链接列表,稍后我会单独抓取:

# Construct list of links to scrape multiple pages
links = []
for x in range(1,5):
    links.append(f'https://www.amazon.de/-/en/SanDisk-microSDHC-memory-adapter-performance/product-reviews/B08GY9NYRM/ref=cm_cr_dp_d_show_all_btm?ie=UTF8&reviewerType=all_reviews&pageNumber={x}')

然后我使用 requests 和 beautiful soup 来获取原始评论数据,如下所示:

# Scrape all links in the constructed list
reviews = []
for link in links:
    html = requests.get(link, headers=HEADERS)
    if html.status_code == 200:
        # HTML response was sucssesfull
        soup = BeautifulSoup(html.text, 'html.parser')
        results = soup.find_all('span', {'data-hook': 'review-body'})
        print(len(results))
        for review in results:
            reviews.append(review.text.replace('\n', ''))
    else:
        # HTML response was unsuccsessfull
        print('[BAD HTML RESPONSE] Response Code =', html.status_code)

每页包含 10 条评论,我收到第一页 (&pageNumber=1) 的所有 10 条评论,在接下来的每个页面中我没有收到任何信息。

上述代码的输出

查看对应汤品时找不到评论信息。这是为什么?

我尝试只在 for 循环之外抓取第 2 页,但没有返回评论信息。

两个月前,我尝试了相同的代码,该代码在 80 多个页面上运行。我不明白为什么它现在不起作用(亚马逊改变了一些东西吗?)感谢您的时间和帮助!

python web-scraping beautifulsoup python-requests
4个回答
1
投票

我碰巧遇到了和你一样的问题。做了一些研究,结果发现您需要提供适当的标头(而不仅仅是用户代理)。我不确定你使用了什么标题,但这对我有用:

前往 http://httpbin.org/get 复制“标题”下的所有内容,但删除“主机”,然后将其粘贴为标题!

希望这对您有用!


0
投票

之所以

soup
不包含任何评论信息,是因为亚马逊返回的是带有验证码的页面,而不是包含产品评论的实际页面。
您可以通过将返回的 HTML 转储到文件中并在浏览器中打开它来验证这一点:

with open("example.html") as f:
  f.write(str(soup))

0
投票

您可以通过提供正确的标题来解决此问题。

标题={ 
    “接受”:“text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v =b3;q=0.7", 
    "接受编码": "gzip, deflate, br", 
    "接受语言": "en-US,en;q=0.9", 
    “升级不安全请求”:“1”, 
    “推荐人”:“https://www.google.com/”,
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, 如 Gecko) Chrome/114.0.0.0 Safari/537.36"
}

尝试使用此标题

如果您想了解有关标题的更多信息,请阅读此博客。
https://www.zenrows.com/blog/web-scraping-headers#what-are-http-headers


0
投票

亚马逊最近一直在收紧对其评论页面的限制。最初,他们将用户可以浏览的页面数量限制为 10 个,然后减少到 5 个,最终恢复到 10 个。在很短的一段时间内,他们还阻止非登录用户按“最近”对评论进行排序,后来又受到限制未登录的用户完全无法访问评论页面。

为了解决这些限制,我开发了 Amazon Reviews API,它允许您绕过这些限制并像以前一样继续抓取评论。

使用此 API,您可以通过使用产品的 URL 或其 asin 发出简单的 GET 请求来检索 8 条最新评论。如果您想访问某个产品的所有评论,则需要将您的亚马逊帐户的 cookie 作为参数包含在内。该工具已被多个品牌以及开发人员和初创公司使用,对产品评论进行情绪分析。此外,该 API 支持基于关键字的搜索,使您能够提取任何给定产品的最大数量的相关评论。

对于那些希望收集产品所有评论的人,我们还准备了一个教程,演示如何循环遍历每个过滤器和排序选项以收集全面的数据。

© www.soinside.com 2019 - 2024. All rights reserved.