html解析Python

2024-09-26 18:19:28 发布

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

我有以下HTML:

<div class="col-sm-8"
                data-pdf-class="column8">
                <a target='_blank' href='https://datacvr.virk.dk/data/visenhed?enhedstype=person&id=4003893917'>Tove Kjeldsen</a><br/>Lundevangsvej 19<br/>2900 Hellerup<br/>Ejerandel: 5-9,99%<br/>Kapitalklasse: B<br/>Erhvervelsesdato: 30.06.1996        <br/><br/>
<a target='_blank' href='https://datacvr.virk.dk/data/visenhed?enhedstype=person&id=4004146416'>Inge Lise Klastrup</a><br/>Ærøgade 5<br/>8000 Aarhus C<br/>Ejerandel: 5-9,99%<br/>Kapitalklasse: B<br/>Erhvervelsesdato: 30.06.1996        <br/><br/>
<a target='_blank' href='https://datacvr.virk.dk/data/visenhed?enhedstype=person&id=4003886026'>Asta Johanne Kjeldsen</a><br/>Meldskiftet 9<br/>6950 Ringkøbing<br/>Ejerandel: 5-9,99%<br/>Stemmeandel: 33,33-49,99%<br/>Kapitalklasse: A, B<br/>Erhvervelsesdato: 30.06.1996        <br/><br/>
ASTA OG HENRY KJELDSENS FAMILIEFOND<br/>c/o Henry Kjeldsen<br/> Enghavevej 17<br/>6950 Ringkøbing<br/>Ejerandel: 25-33,32%<br/>Stemmeandel: 50-66,66%<br/>Kapitalklasse: A, B<br/>Erhvervelsesdato: 30.06.1996        <br/><br/>
<a target='_blank' href='https://datacvr.virk.dk/data/visenhed?enhedstype=person&id=4000019274'>Jens Lykke Kjeldsen</a><br/>Tranmose 2<br/>6950 Ringkøbing<br/>Ejerandel: 5-9,99%<br/>Kapitalklasse: A, B<br/>Erhvervelsesdato: 30.06.1996        <br/><br/>
<a target='_blank' href='https://datacvr.virk.dk/data/visenhed?enhedstype=person&id=4000271454'>Anne Birte Kjeldsen</a><br/>Enghavevej 13<br/>6950 Ringkøbing<br/>Ejerandel: 5-9,99%<br/>Kapitalklasse: B<br/>Erhvervelsesdato: 30.06.1996        <br/><br/>
HENRY KJELDSEN. RINGKØBING TØMMERHANDEL A/S<br/>Enghavevej 17<br/>6950 Ringkøbing<br/>Ejerandel: 33,33-49,99%<br/>Kapitalklasse: B<br/>Erhvervelsesdato: 30.06.1996        <br/><br/>
    </div>

我试图提取名字,但不是所有的名字都有一个'a'标签。输出应为:

  • 托夫·凯尔德森
  • 伊格丽丝克拉斯特鲁普
  • 阿斯塔·约翰娜·凯尔德森
  • 亨利克杰德森家族

等等。。。你知道吗


Tags: httpsbrtargetdatapersonhrefdkblank
1条回答
网友
1楼 · 发布于 2024-09-26 18:19:28

虽然还不完全清楚应该从html转储中解析哪些名称,但我发现这段代码的性能很好。你知道吗

import re

matches_result_total = list()

with open("/path/to/dump.html", "r") as file:
    file = file.read()
    matches_temp1 = re.findall("<a.+>(.+)</a>", file, re.U)
    matches_temp2 = re.findall("<br/><br/>[\n]?([^<]+)<br/>", file, re.U)
    matches_result_total = matches_temp1 + matches_temp2

print(matches_result_total)

对我来说,这会产生一个结果:

['Tove Kjeldsen','Inge Lise Klastrup', 'Asta Johanne Kjeldsen', 'Jens Lykke Kjeldsen', 'Anne Birte Kjeldsen', 'ASTA OG HENRY KJELDSENS FAMILIEFOND', 'HENRY KJELDSEN. RINGKØBING TØMMERHANDEL A/S']

更新:

正如alecxe所说,在大多数情况下,使用regex来解析HTML或任何复杂的结构化语言都是疯狂的,然而,如果一个人知道HTML是如何结构化的,那么他可以限制regex的使用范围,以避免可怕的死亡,正如alecxe在他提供的链接中所解释的那样。:)

考虑到这段特殊的html的结构,我认为使用它应该是安全的,因为我在下面的代码中添加了一些内容。你知道吗

import re

matches_result_total = list()

with open("/path/to/dump.html", "r") as file:
    file = file.read()
    matches_temp1 = re.findall("<br/><br/><a.+>(.+)</a><br/>", file, re.U)
    matches_temp2 = re.findall("<br/><br/>[\n]?([^<]+)<br/>", file, re.U)
    matches_result_total = matches_temp1 + matches_temp2

print(matches_result_total)

现在只有当给定的html转储以2个换行符开始,然后以链接标记或文本继续时,才匹配。你知道吗

相关问题 更多 >

    热门问题