Python BeautifulSoup查找强和td类的下一个值

2024-06-16 12:39:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个HTML页面中的以下示例HTML表。在

<table id="fullRecordTable" valign="bottom" cellpadding="3" cellspacing="0" class="yellow" width="100%" summary="Vollanzeige des Suchergebnises"> ... <tr> <td width="25%" class='yellow'> <strong>Sachbegriff</strong> </td> <td class='yellow'> Messung </td> </tr> <tr> ... </tr> <tr> ... </tr> <tr> ... </tr> <tr> <td width="25%" class='yellow'> <strong>DDC-Notation</strong> </td> <td class='yellow'> 530.8<br/>T1--0287<br/>542.3 </td> </tr>

我正在尝试打印"DDC-Notation"和下面三个值:"530.8""T1--0287""542.3"

我的代码是:

^{pr2}$

但第一次就不行了。在

抱歉,这是我的第一篇文章。如果我不能解释我的问题,我就再试一次


Tags: brid示例htmltable页面widthtr
1条回答
网友
1楼 · 发布于 2024-06-16 12:39:49

如果您使用交互式环境来调试代码,那么生活会轻松得多,因为您可以四处寻找所需的东西。在

在这种情况下,我知道你想找一根绳子。我直接找的。在

找到它之后,我找到了它的祖父母,即td元素,然后是{}的兄弟姐妹,另一个{}。在

为了方便起见,我在一个名为td的变量中添加了that,因为我不确定如何挖掘出您想要的部分。在

最后,我发现children属性包含一个包含所需项的列表。这只是一个剥离HTML标记、新行和空白的问题。在

>>> import bs4
>>> HTML = open('temp.htm').read()
>>> soup = bs4.BeautifulSoup(HTML, 'lxml')
>>> strong = soup.find_all(string='DDC-Notation')
>>> strong
['DDC-Notation']
>>> strong[0].findParent()
<strong>DDC-Notation</strong>
>>> strong[0].findParent().findParent()
<td class="yellow" width="25%">
<strong>DDC-Notation</strong>
</td>
>>> strong[0].findParent().findParent().findNextSibling()
<td class="yellow">
      530.8<br/>T1 0287<br/>542.3
    </td>
>>> td = strong[0].findParent().findParent().findNextSibling()
>>> td
<td class="yellow">
      530.8<br/>T1 0287<br/>542.3
    </td>
>>> td.children
<list_iterator object at 0x00000000035993C8>
>>> list(td.children)
['\n      530.8', <br/>, 'T1 0287', <br/>, '542.3\n    ']

编辑:今天早上我突然想到,如果我提供一个合并脚本,这个答案可能对您更有用。在写这篇文章的时候,我发现(再一次)处理这样一个列表中的项目要比看起来的要多一些。在

当Python输出大多数内容时,它会自动将它们转换为字符串。但是,当您处理HTML元素列表中的项目时,它们将元素而不是字符串,如果您想将它们作为字符串处理,则必须首先尝试转换它们,因此需要使用“item=str(item).strip()”行。它将元素转换为字符串并丢弃空白。在

^{pr2}$

输出:

530.8
T1 0287
542.3

相关问题 更多 >