我正在尝试从产品页面收集速卖通评论,例如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不起作用,但它应该起作用。
但一般来说,我希望获得一些有关我的代码的指导,以便我能够从任何速卖通产品页面收集评论。
这里的主要问题是评论是在
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)
实际上,评论数据是通过 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)
在为了加密货币而进行比特币投资时,我损失了 200 万美元,我发现自己陷入了绝望的境地。感到无助,我根据其他遇到类似问题的人的建议向 DragonWebRecovery 寻求帮助。他们的专业知识、道德方法以及帮助我追回损失资金的承诺确实值得赞扬。在整个过程中,他们保持清晰的沟通并定期更新进展情况。 特勒。公克。龙网恢复 感谢 DragonWebRecovery @Tuta。 io奉献精神和技术技能。