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

BeautifulSoup科普特语文本抓取格式异常问题及修正问询

解决科普特语文本抓取的格式问题

问题核心

页面通过CSS伪元素实现单词分隔和章节号显示,BeautifulSoup无法直接解析伪元素内容,导致抓取结果无单词空格、缺失章节号,无法生成1: ⲡϫⲱⲱⲙⲉ ⲙⲡⲉϫⲡⲟ ...的目标格式。

解决方案

1. 提取章节号

章节号通常存储在元素的data-*属性(伪元素内容常依赖这类属性),或嵌入在元素的style属性中。需先定位章节容器元素,再针对性提取:

from bs4 import BeautifulSoup

soup = BeautifulSoup(html_content, 'html.parser')
# 假设章节容器带有verse类
verse_containers = soup.find_all(class_='verse')

for container in verse_containers:
    # 优先从data属性提取(最常见)
    chapter_num = container.get('data-chapter') or container.get('data-verse')
    # 若章节号在style的伪元素content中,解析style属性
    if not chapter_num:
        style_attr = container.get('style', '')
        if 'content' in style_attr:
            # 提取content中的章节号,比如content: '1:'
            chapter_num = style_attr.split("'")[1].strip(':')

2. 修复单词分隔

若每个科普特语单词是独立的word类元素,直接遍历拼接添加空格:

# 承接上方代码,在循环内处理单词
word_elements = container.find_all(class_='word')
# 提取每个单词文本并拼接
formatted_words = ' '.join([word.get_text(strip=True) for word in word_elements])

如果单词分隔完全依赖CSS伪元素(无独立单词元素),需检查页面是否有隐藏属性存储拆分后的单词(如data-word),若没有则只能根据科普特语字符特征尝试拆分(可靠性较低,优先找属性存储的内容)。

3. 生成目标格式

将章节号和格式化后的文本组合:

final_line = f"{chapter_num}: {formatted_words}"
print(final_line)

示例验证

假设目标HTML结构为:

<div class="verse" data-chapter="1">
    <span class="word">ⲡϫⲱⲱⲙⲉ</span>
    <span class="word">ⲙⲡⲉϫⲡⲟ</span>
</div>

运行代码后输出:

1: ⲡϫⲱⲱⲙⲉ ⲙⲡⲉϫⲡⲟ

额外提示

如果页面是动态渲染的(章节号或单词通过JS生成),需改用selenium加载页面后再抓取,直接获取渲染后的完整文本,避免解析伪元素的麻烦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 03:42:41