python 来自Amazon的Web抓取评论仅返回第一页的数据

5w9g7ksd  于 2023-04-19  发布在  Python
关注(0)|答案(2)|浏览(151)

我试图从亚马逊刮评论.评论可以出现在多个页面上刮一个以上的页面,我构造了一个链接列表,我后来分别刮:

# 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条评论,我收到了第一页的所有10条评论(&pageNumber=1),在接下来的每一页中,我都没有收到任何信息。
Output of above code
在查看对应的soup对象时,找不到审核信息,这是为什么?
我只尝试在for循环外抓取第2页,但没有返回任何审阅信息。
两个月前,我尝试了相同的代码,它工作了80多页。我不明白为什么它现在不工作了(亚马逊改变了什么吗?)感谢您的时间和帮助!

iyr7buue

iyr7buue1#

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

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

4ktjp1zp2#

我碰巧遇到了和你一样的问题。做了一点研究,结果发现你需要给予正确的头(不仅仅是用户代理)。我不知道你用了什么头,但这对我有用:
转到http://httpbin.org/get复制“headers”下的所有内容,但删除“Host”,并将其粘贴为您的标题!
希望这对你有用!

相关问题