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

如何用BeautifulSoup直接提取《国富论》在线版每页文本并生成DataFrame?

嘿,很高兴帮你搞定这个问题!确实,BeautifulSoup完全可以直接帮你提取单页书籍内容并构建DataFrame,不用绕弯路。下面给你拆解具体的实现思路和代码:

直接用BeautifulSoup提取内容构建DataFrame的方案

核心思路

先通过requests获取页面源码,用BeautifulSoup精准定位到书籍正文的容器标签(避开页眉、页脚、导航栏这些无关内容),提取整理文本后直接塞进DataFrame里,比先抓全部文本再清洗高效得多。

1. 先定位正文容器

首先打开目标页面,用浏览器开发者工具(F12)查看HTML结构,找到包裹书籍正文的核心标签。比如古腾堡的页面通常会把正文放在带id="text"的<div>里,或者带有特定class的容器里——这一步很关键,决定了你提取的内容是否干净。

2. 完整代码示例

import pandas as pd
import requests
from bs4 import BeautifulSoup
import re

# 替换成你要访问的完整页面URL
target_url = 'https://www.gutenberg.org/files/38194/38194-h/38194-h.htm'

# 获取页面内容,确保编码正确避免乱码
response = requests.get(target_url)
response.encoding = 'utf-8'

# 解析HTML
soup = BeautifulSoup(response.text, 'html.parser')

# 定位正文容器:这里以古腾堡的标准id="text"为例,你要根据实际页面调整
main_content = soup.find('div', id='text')

# 提取所有段落文本,过滤空行和无效内容
paragraphs = []
for p in main_content.find_all('p'):
    text = p.get_text(strip=True)
    if text:  # 跳过空段落
        # 可选:清洗掉页码、页眉等干扰内容,比如开头的数字页码
        cleaned_text = re.sub(r'^\d+\s*', '', text)
        paragraphs.append(cleaned_text)

# 把单页内容整合成一条观测值,构建DataFrame
page_df = pd.DataFrame({
    'page_url': [target_url],
    'page_content': [' '.join(paragraphs)]
})

# 查看结果
print(page_df)

3. 关键细节提醒

  • 选择器一定要适配页面:如果你的目标页面正文不在id="text"的div里,就用开发者工具找到正确的标签或class,替换find方法的参数(比如soup.find('article', class_='book-content'))。
  • 文本清洗按需调整:如果页面里有其他干扰内容(比如章节标题重复、脚注),可以用正则表达式或者BeautifulSoup的decompose()方法先移除干扰标签,再提取文本。
  • 多页扩展:如果要处理多页内容,只需要把URL做成循环,每次提取单页内容后用pd.concat()追加到DataFrame里即可。

这种方式直接精准抓取正文,比先抓全部文本再筛选要更简洁高效,完全替代你之前的迂回操作~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:34:16