gpt4 book ai didi

python - 使用 BeautifulSoup 提取特定的 TD 表格元素文本?

转载 作者:太空狗 更新时间:2023-10-29 15:41:12 26 4
gpt4 key购买 nike

我尝试使用 BeautifulSoup 库从自动生成的 HTML 表中提取 IP 地址,但我遇到了一点麻烦。

HTML 的结构如下:

<html>
<body>
<table class="mainTable">
<thead>
<tr>
<th>IP</th>
<th>Country</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="hello.html">127.0.0.1<a></td>
<td><img src="uk.gif" /><a href="uk.com">uk</a></td>
</tr>
<tr>
<td><a href="hello.html">192.168.0.1<a></td>
<td><img src="uk.gif" /><a href="us.com">us</a></td>
</tr>
<tr>
<td><a href="hello.html">255.255.255.0<a></td>
<td><img src="uk.gif" /><a href="br.com">br</a></td>
</tr>
</tbody>
</table>

下面的小代码从两个 td 行中提取文本,但我只需要 IP 数据,而不需要 IP 和国家/地区数据:

from bs4 import BeautifulSoup
soup = BeautifulSoup(open("data.htm"))

table = soup.find('table', {'class': 'mainTable'})
for row in table.findAll("a"):
print(row.text)

这个输出:

127.0.0.1
uk
192.168.0.1
us
255.255.255.0
br

我需要的是 IP table.tbody.tr.td.a 元素文本而不是国家 table.tbody.tr.td.img.a 元素.

是否有任何有经验的 BeautifulSoup 用户知道如何进行这种选择和提取。

谢谢。

最佳答案

这为您提供了正确的列表:

>>> pred = lambda tag: tag.parent.find('img') is None
>>> list(filter(pred, soup.find('tbody').find_all('a')))
[<a href="hello.html">127.0.0.1<a></a></a>, <a></a>, <a href="hello.html">192.168.0.1<a></a></a>, <a></a>, <a href="hello.html">255.255.255.0<a></a></a>, <a></a>]

只需申请.text关于这个列表的元素。

有多个空<a></a>上面列表中的标签是因为 <a> html 中的标签未正确关闭。要摆脱它们,您可以使用

pred = lambda tag: tag.parent.find('img') is None and tag.text

最终:

>>> [tag.text for tag in filter(pred, soup.find('tbody').find_all('a'))]
['127.0.0.1', '192.168.0.1', '255.255.255.0']

关于python - 使用 BeautifulSoup 提取特定的 TD 表格元素文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22746176/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com