尝试使用 Beautifulsoup 抓取速卖通产品评论

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

我正在尝试从产品页面收集速卖通评论,例如https://www.aliexpress.com/item/3256801798731854.html

我已经编写了代码,可以抓取此页面并收集评论。

import requests
from bs4 import BeautifulSoup
from time import sleep

url = "https://www.aliexpress.com/item/3256801798731854.html"

response = requests.get(url).text

soup = BeautifulSoup(response, "html.parser")

reviews = soup.select("div.f-content dl.buyer-review dt.buyer-feedback")

for rev in reviews:
    rev_text = rev.find("span").text
    print(rev_text)
    sleep(1)

问题是,当我尝试运行这段代码时,我的终端中什么也没有得到,这太疯狂了。 我真的不明白为什么我的 Reviews 变量返回一个空列表,因为

print(reviews)
打印一个空列表。

我在 Beautifulsoup 中的 select 语句有什么问题。

我也不明白为什么代码

reviews1 = soup.select("div.f-content")
不起作用(打印空列表)但
reviews2 = soup.select("div", class_ = "f-content")
可以工作

我在我的几项工作中都看到了这个问题,我不明白为什么reviews1不起作用,但它应该起作用。

但一般来说,我希望获得一些有关我的代码的指导,以便我能够从任何速卖通产品页面收集评论。

python-3.x web-scraping beautifulsoup
4个回答
2
投票

这里的主要问题是评论是在

iframe
中呈现的,所以你的网址是另一个。

另请检查这个答案,它涉及硒溶液

示例

import requests
from bs4 import BeautifulSoup
from time import sleep

url = "https://feedback.aliexpress.com/display/productEvaluation.htm?v=2&productId=1005001985046606&ownerMemberId=227141890&companyId=236776222&memberType=seller&startValidDate=&i18n=true"
response = requests.get(url).text
soup = BeautifulSoup(response)

reviews = soup.select("div.f-content dl.buyer-review dt.buyer-feedback")

for rev in reviews:
    rev_text = rev.find("span").text
    print(rev_text)
    sleep(1)

1
投票

实际上,评论数据是通过 API 作为 POST 方法从外部源动态生成的。所以你必须使用 API url 来代替。

示例:

AJAX

输出:

import requests from bs4 import BeautifulSoup import pandas as pd api_url = "https://feedback.aliexpress.com/display/productEvaluation.htm" headers={ 'content-type':'application/x-www-form-urlencoded' } payload = { 'ownerMemberId': '227141890', 'memberType': 'seller', 'productId': '1005001985046606', 'companyId':'', 'evaStarFilterValue': 'all Stars', 'evaSortValue': 'sortdefault@feedback', 'page': '2', 'currentPage': '1', 'startValidDate':'', 'i18n': 'true', 'withPictures': 'false', 'withAdditionalFeedback': 'false', 'onlyFromMyCountry': 'false', 'version':'', 'isOpened': 'true', 'translate': 'Y', 'jumpToTop': 'true', 'v': '2' } res = requests.post(api_url,data=payload,headers=headers) #print(res) data =[] for payload['page'] in range(1,26): soup = BeautifulSoup(res.text, "html.parser") reviews = soup.select("div.f-content dl.buyer-review dt.buyer-feedback") for rev in reviews: rev_text = rev.find("span").text data.append({ 'Reviews':rev_text }) df =pd.DataFrame(data) print(df)



0
投票

“div > .f-内容”等

我认为这应该有效。

soup.select 文档


-2
投票

在为了加密货币而进行比特币投资时,我损失了 200 万美元,我发现自己陷入了绝望的境地。感到无助,我根据其他遇到类似问题的人的建议向 DragonWebRecovery 寻求帮助。他们的专业知识、道德方法以及帮助我追回损失资金的承诺确实值得赞扬。在整个过程中,他们保持清晰的沟通并定期更新进展情况。 特勒。公克。龙网恢复 感谢 DragonWebRecovery @Tuta。 io奉献精神和技术技能。

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