gpt4 book ai didi

python - HTML 表格到 Pandas 表格 : Info inside html tags

转载 作者:太空狗 更新时间:2023-10-29 21:23:56 24 4
gpt4 key购买 nike

我有一张来自网络的大表,可通过请求访问并使用 BeautifulSoup 进行解析。它的一部分看起来像这样:

<table>
<tbody>
<tr>
<td>265</td>
<td> <a href="/j/jones03.shtml">Jones</a>Blue</td>
<td>29</td>
</tr>
<tr >
<td>266</td>
<td> <a href="/s/smith01.shtml">Smith</a></td>
<td>34</td>
</tr>
</tbody>
</table>

当我使用 pd.read_html(tbl) 将其转换为 pandas 时输出是这样的:

    0    1          2
0 265 JonesBlue 29
1 266 Smith 34

我需要将信息保存在 <A HREF ... > 中标记,因为唯一标识符存储在链接中。也就是说,该表应如下所示:

    0    1        2
0 265 jones03 29
1 266 smith01 34

我对其他各种输出没意见(例如,jones03 Jones 会更有帮助),但唯一 ID 很重要。

其他单元格中也有 html 标签,通常我不希望保存这些标签,但如果这是获取 uid 的唯一方法,我可以保留这些标签并稍后清理它们,如果我必须。

是否有一种访问此信息的简单方法?

最佳答案

由于这个解析作业需要提取文本和属性值,它不能完全“开箱即用”地通过诸如pd.read_html。其中一些必须手工完成。

使用 lxml ,您可以使用 XPath 提取属性值:

import lxml.html as LH
import pandas as pd

content = '''
<table>
<tbody>
<tr>
<td>265</td>
<td> <a href="/j/jones03.shtml">Jones</a>Blue</td>
<td >29</td>
</tr>
<tr >
<td>266</td>
<td> <a href="/s/smith01.shtml">Smith</a></td>
<td>34</td>
</tr>
</tbody>
</table>'''

table = LH.fromstring(content)
for df in pd.read_html(content):
df['refname'] = table.xpath('//tr/td/a/@href')
df['refname'] = df['refname'].str.extract(r'([^./]+)[.]')
print(df)

产量

     0          1   2  refname
0 265 JonesBlue 29 jones03
1 266 Smith 34 smith01

以上可能有用,因为它只需要几个添加 refname 列的额外代码行。

但是 LH.fromstringpd.read_html 都解析 HTML。所以它的效率可以通过删除 pd.read_html 和使用 LH.fromstring 解析表格一次:

table = LH.fromstring(content)
# extract the text from `<td>` tags
data = [[elt.text_content() for elt in tr.xpath('td')]
for tr in table.xpath('//tr')]
df = pd.DataFrame(data, columns=['id', 'name', 'val'])
for col in ('id', 'val'):
df[col] = df[col].astype(int)
# extract the href attribute values
df['refname'] = table.xpath('//tr/td/a/@href')
df['refname'] = df['refname'].str.extract(r'([^./]+)[.]')
print(df)

产量

    id        name  val  refname
0 265 JonesBlue 29 jones03
1 266 Smith 34 smith01

关于python - HTML 表格到 Pandas 表格 : Info inside html tags,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31771619/

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