Python使用BeautifulSoup提取Trustpilot网页元素文本返回None如何解决
问题原因
你遇到返回全为None的问题主要有两个核心原因:
- 你选用的类名
styles_reviewContent__3TSDf包含Trustpilot前端构建时自动生成的随机哈希后缀,这类后缀会随网站版本更新频繁变动,属于不稳定选择器,匹配不到对应元素是大概率情况。 - 直接用
requests.get不带请求头发起请求时,Trustpilot的反爬机制会返回异常拦截页面,你拿到的页面内容本身就不存在需要定位的元素。
解决方法
按以下步骤调整即可正常抓取:
- 首先添加标准浏览器请求头,伪装正常用户访问,避免被反爬策略拦截
- 替换不稳定的带哈希类名,优先使用网站固定的
data-testid属性做选择器,这类属性是开发者特意标记的功能属性,长期不会变动 - 若静态页面仍无目标内容,说明评论是客户端JS异步渲染的,更换为Selenium、Playwright等支持JS渲染的工具获取完全加载后的页面即可
修正后的代码示例
import requests from bs4 import BeautifulSoup url = "https://uk.trustpilot.com/review/rockar.com" # 配置浏览器请求头 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" } resp = requests.get(url, headers=headers) soup = BeautifulSoup(resp.content, 'html.parser') # 用固定属性定位评论块和标题 for review_block in soup.find_all('div', {'data-testid': 'review-content'}): review_title = review_block.find("h2", {'data-testid': 'review-title'}) if review_title: print(review_title.get_text(strip=True))
注:如果运行上述代码仍无法获取内容,说明该站点当前已将评论改为纯客户端异步渲染,替换为JS渲染工具爬取即可。
内容的提问来源于stack exchange,提问作者Sahal Nurain
相关产品推荐
相关产品推荐

