求助:使用Python爬取商品评论数失败,无法获取标签内的323
解决评论数爬虫的问题
嘿,我来帮你搞定这个评论数抓取的问题!你已经找到了正确的标签product-reviews-count,只是还差一步提取标签里的内容而已,别担心,这很简单~
核心问题分析
你的代码已经定位到了包含评论数的标签,但没有对这个标签做文本内容提取操作,所以才拿不到里面的数字323。
具体解决方案
1. 提取标签内的文本内容
BeautifulSoup的标签对象有.text或.get_text()方法,可以直接获取标签包裹的文本内容。修改你的循环试试:
for reviewcnt in bsObj.findAll(attrs={'class': 'product-reviews-count'}): # 获取标签内的原始文本,strip()去掉多余的空格、换行符 raw_text = reviewcnt.text.strip() print("原始文本:", raw_text)
这时候你应该能看到类似323或者评论(323)这样的内容。
2. 提取纯数字(如果文本带额外文字)
如果原始文本里包含非数字内容(比如“323条评论”“评论数:323”),可以用正则表达式提取里面的数字:
import re for reviewcnt in bsObj.findAll(attrs={'class': 'product-reviews-count'}): raw_text = reviewcnt.text.strip() # 提取文本里的所有数字,取第一个匹配结果 review_num = re.findall(r'\d+', raw_text)[0] print("提取到的评论数:", review_num)
3. 特殊情况:评论数在子标签里
如果product-reviews-count标签里还有嵌套的子标签(比如<span class="product-reviews-count"><span>323</span></span>),可以先定位子标签再提取文本:
for reviewcnt in bsObj.findAll(attrs={'class': 'product-reviews-count'}): # 直接获取子内容的文本 review_num = reviewcnt.contents[0].text.strip() # 或者用find()精准找子标签 # review_num = reviewcnt.find('span').text.strip() print("评论数:", review_num)
额外提示
如果上面的方法都拿不到内容,可能是评论数是动态加载的(比如页面滚动后才加载,或者通过JavaScript渲染),这种情况你可能需要用selenium这类工具模拟浏览器加载页面,但这个稍微复杂一点,如果你遇到这种情况可以再告诉我细节~
内容的提问来源于stack exchange,提问作者Jaehyun Lee
相关产品推荐
相关产品推荐

