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

如何用BeautifulSoup4选取两个td元素并同行输出?

问题:配对抓取下的两个内容并同行输出

HTML示例

<tr>
<td class ='verseNumCell'>
፳
</td>
<td class ='verseConentCell'>
ወትቤሎን ኢትስምያኒ ኖሔሚን ስምያኒ መራር እስመ መረርኩ ፈድፋደ ወብዙኀ ።
</td>
</tr>
<tr>
<td class ='verseNumCell'>
፳፩
</td>
<td class ='verseConentCell'>
አንሰ ምልእትየ ሖርኩ ወዕራቅየ አግብአኒ <span class='divineWord'>እግዚአብሔር</span> ለምንት ትብላኒ ኖሔሚን እንዘ <span class='divineWord'>እግዚአብሔር</span> አኅሰረኒ ወፈድፋደ አሕመመኒ ።
</td>
</tr>

当前实现代码

import bs4
import requests
import re

url = "https://www.ethiopicbible.com/books/%E1%8A%A6%E1%88%AA%E1%89%B5-%E1%8B%98%E1%8D%8D%E1%8C%A5%E1%88%A8%E1%89%B5-1"
parameters = {}
response = requests.get(url, params=parameters)
soup = bs4.BeautifulSoup(response.text, "html.parser")
element_list = soup.find("div", class_="geezBibleChapterContainer").find_all("td")

for element in element_list:
    text = element.get_text()
    text = os.linesep.join([s for s in text.splitlines() if s])
    if not re.match(r'^\s*$', text):
        print(text)

当前输出

፳
ወትቤሎን ኢትስምያኒ ኖሔሚን ስምያኒ መራር እስመ መረርኩ ፈድፋደ ወብዙኀ ።
፳፩
አንሰ ምልእትየ ሖርኩ ወዕራቅየ አግብአኒ እግዚአብሔር ለምንት ትብላኒ ኖሔሚን እንዘ

期望输出

፳ ወትቤሎን ኢትስምያኒ ኖሔሚን ስምያኒ መራር እስመ መረርኩ ፈድፋደ ወብዙኀ ።
፳፩ አንሰ ምልእትየ ሖርኩ ወዕራቅየ አግብአኒ እግዚአብሔር ለምንት ትብላኒ ኖሔሚን እንዘ

解决方案

不需要分别在不同的soup中选取元素,核心思路是先定位所有<tr>行,再在每行内抓取对应的两个<td>内容,确保配对后同行输出。修改后的代码如下:

import bs4
import requests
import os  # 补充原代码缺失的导入

url = "https://www.ethiopicbible.com/books/%E1%8A%A6%E1%88%AA%E1%89%B5-%E1%8B%98%E1%8D%8D%E1%8C%A5%E1%88%A8%E1%89%B5-1"
response = requests.get(url)
soup = bs4.BeautifulSoup(response.text, "html.parser")
# 获取章节容器内的所有行
row_list = soup.find("div", class_="geezBibleChapterContainer").find_all("tr")

for row in row_list:
    # 在当前行内分别获取 verseNumCell 和 verseConentCell
    verse_num_td = row.find("td", class_="verseNumCell")
    verse_content_td = row.find("td", class_="verseConentCell")
    
    # 确保两个元素都存在再处理
    if verse_num_td and verse_content_td:
        # 去除内容中的换行、多余空格
        verse_num = ' '.join(verse_num_td.get_text().split())
        verse_content = ' '.join(verse_content_td.get_text().split())
        # 同行输出配对内容
        print(f"{verse_num} {verse_content}")

关键优化点

  • 以<tr>为遍历单位,天然保证两个<td>属于同一行,避免错位
  • 使用' '.join(text.split())简化文本清理,一次性去除所有冗余换行和空格
  • 增加元素存在性判断,避免空值引发异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 19:45:28