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

使用BeautifulSoup和lxml实现Python论坛帖子爬取并存储至DataFrame

解决论坛帖子数据抓取并存入pandas DataFrame的问题

嘿,我懂你现在的需求啦——你想把论坛帖子里的用户名和对应内容都抓下来,整理成指定格式的pandas DataFrame,但之前的代码只拿到了内容,没搞定用户名和数据存储对吧?我来帮你调整一下:

首先,你现有代码的问题是只提取了帖子内容,没有定位到每个帖子对应的用户名,也没把数据整合到DataFrame里。咱们一步步来修改:

完整修改后的代码

import requests
from bs4 import BeautifulSoup
import pandas as pd

# 目标论坛帖子URL
url = 'http://www.catforum.com/forum/43-forum-fun/350938-count-one-billion-2016-a-120.html'
# 获取页面内容
r = requests.get(url)
# 用lxml解析(你已经导入了lxml,指定解析器更高效稳定)
soup = BeautifulSoup(r.text, 'lxml')

# 初始化两个列表,分别存储用户名和帖子内容
usernames = []
post_contents = []

# 遍历所有帖子内容的div
for div in soup.select('[id^=post_message]'):
    # 找到当前帖子所在的父容器(论坛里每个帖子通常有独立包裹div,id以post_开头)
    post_container = div.find_parent('div', id=True)
    if post_container and post_container['id'].startswith('post_'):
        # 在父容器里定位用户名元素(这个论坛的用户名在class为bigusername的a标签里)
        username_tag = post_container.find('a', class_='bigusername')
        if username_tag:
            username = username_tag.get_text(strip=True)
            usernames.append(username)
        else:
            # 防止特殊情况找不到用户名,用占位符替代
            usernames.append('Unknown User')
    else:
        usernames.append('Unknown User')
    
    # 获取帖子内容,保留换行格式
    content = div.get_text("\n", strip=True)
    post_contents.append(content)

# 把两个列表转换成你需要的DataFrame格式
df = pd.DataFrame({
    'col1': usernames,
    'col2': post_contents
})

# 打印前几行看看结果
print(df.head())

代码说明

  • 用户名定位逻辑:通过find_parent找到当前帖子内容所在的整个帖子容器,再在容器内提取用户名——这个逻辑适配了该论坛的页面结构,确保每段内容都能对应到正确的发帖人。
  • 数据整合存储:用两个列表分别收集用户名和内容,最后通过pandas的DataFrame方法直接转换成你需要的格式。
  • 异常防护:加了多层判断,避免因为页面结构小变化导致的报错,遇到找不到用户名的情况会自动用Unknown User占位。

运行这段代码后,你就能得到符合要求的DataFrame啦,每个用户名都会对应着他们发布的帖子内容~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:02:54