You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何抓取带独立div id的用户评论?Python批量提取整页评论

提取Team-BHP单页所有用户评论的解决方案

核心思路

之前的代码硬编码了具体的post_message_xxx ID,只能抓取单条评论。要获取整页评论,只需匹配所有ID以post_message_开头的<div>元素即可,这可以通过XPath或BeautifulSoup的筛选规则实现。


方案1:基于lxml实现(沿用你当前的库)

修改XPath路径,使用starts-with()函数匹配所有目标元素,再遍历提取内容:

import requests
from lxml import html

url = 'https://www.team-bhp.com/forum/luxury-imports-niche/213083-looking-buying-bmw-x1-need-advice.html'

# 匹配所有ID以post_message_开头的div
xpath_path = '//div[starts-with(@id, "post_message_")]'
response = requests.get(url)
source_code = html.fromstring(response.content)

# 获取所有评论元素
comment_elements = source_code.xpath(xpath_path)

# 遍历输出每条评论
for idx, element in enumerate(comment_elements, 1):
    comment_text = element.text_content().strip()
    print(f"评论 {idx}:\n{comment_text}\n{'='*50}")

方案2:基于BeautifulSoup实现(你可接受的库)

利用BeautifulSoup的lambda筛选器匹配目标ID,代码更直观:

import requests
from bs4 import BeautifulSoup

url = 'https://www.team-bhp.com/forum/luxury-imports-niche/213083-looking-buying-bmw-x1-need-advice.html'

response = requests.get(url)
soup = BeautifulSoup(response.content, 'lxml')

# 筛选所有ID以post_message_开头的div
comment_elements = soup.find_all('div', id=lambda x: x and x.startswith('post_message_'))

# 遍历输出每条评论
for idx, element in enumerate(comment_elements, 1):
    comment_text = element.get_text(strip=True)
    print(f"评论 {idx}:\n{comment_text}\n{'='*50}")

注意事项

  • 建议给请求添加User-Agent头,模拟浏览器请求,避免被网站反爬机制拦截:
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'}
    response = requests.get(url, headers=headers)
    
  • 若目标页面存在分页,需额外处理分页逻辑(解析下一页URL并循环抓取)。

内容的提问来源于stack exchange,提问作者Jay21

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 20:45:41