使用beautifulsoup访问未标记的文本

2024-05-20 00:39:09 发布

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

使用python和beauthulsi提取一些信息。 更具体地说,在检索非美国邮政编码时,我需要帮助。在

考虑一下一家美国公司的以下html数据:(已经是soup对象)

<div class="compContent curvedBottom" id="companyDescription">
<div class="vcard clearfix">
<p id="adr">
<span class="street-address">999 State St Ste 100</span><br/>
<span class="locality">Salt Lake City,</span>
<span class="region">UT</span>
<span class="zip">84114-0002,</span>
<br/><span class="country-name">United States</span>
</p>
<p>
<span class="tel">
<strong class="type">Phone: </strong>+1-000-000-000
                            </span><br/>
</p>
<p class="companyURL"><a class="url ext" href="http://www.website.com" target="_blank">http://www.website.com</a></p>
</div>

</ul>
</div>

我可以使用以下python代码提取zipcode(84114-0002):

^{pr2}$

你可以看到我需要一些律师用if address['zip'] == '':

这两个soup对象的例子给我带来了麻烦。在下面我想检索EC4N 4SA

<div class="compContent curvedBottom" id="companyDescription">
<div class="vcard clearfix">
<p id="adr">
<span class="street-address">Albert Buildings</span><br/>
<span class="extended-address">00 Queen Victoria Street</span>
<span class="locality">London</span>
                                    EC4N 4SA
                                    <span class="region">London</span>
<br/><span class="country-name">England</span>
</p>
<p>
</p>
<p class="companyURL"><a class="url ext" href="http://www.website.com.com" target="_blank">http://www.website.com.com</a></p>
</div>
<p><strong>Line of Business</strong> <br/>Management services, nsk</p> 
</div>

以及下面,我有兴趣获得71364

<div class="compContent curvedBottom" id="companyDescription">
<div class="vcard clearfix">
<p id="adr">
<span class="street-address">Alfred-Kärcher-Str. 100</span><br/>
                                                71364
                                    <span class="locality">Winnenden</span>
<span class="region">Baden-Württemberg</span>
<br/><span class="country-name">Germany</span>
</p>
<p>
<span class="tel">
<strong class="type">Phone: </strong>+00-1234567
                            </span><br/>
<span class="tel"><strong class="type">Fax: </strong>+00-1234567</span>
</p>
</div>
</div>

现在,我在大约68000个帐户上运行这个程序,其中28000个是非美国的。我只举了两个例子,我知道目前的方法不是防弹的。可能还有其他地址格式,这个脚本不能如预期的那样工作,但我相信找出英国和德国的帐户将有很大的帮助。在

提前谢谢


Tags: brdivcomidhttpaddresswwwwebsite
1条回答
网友
1楼 · 发布于 2024-05-20 00:39:09

因为它只是<p>内没有标记的文本,所以您可以使用

find_all(text=True, recursive=False) 

只获取文本(不带标记),而不从嵌套标记(<span>)中获取。这将给出包含文本和一些\n和空格的列表,这样您就可以使用join()创建一个字符串,strip()删除所有{}和空格。在

^{pr2}$

结果:EC4N 4SA

与第二个HTML相同

data = '''<p id="adr">
<span class="street-address">Alfred-Kärcher-Str. 100</span><br/>
                                                71364
                                    <span class="locality">Winnenden</span>
<span class="region">Baden-Württemberg</span>
<br/><span class="country-name">Germany</span>
</p>'''

from bs4 import BeautifulSoup as BS

soup = BS(data, 'html.parser').find('p')

print(''.join(soup.find_all(text=True, recursive=False)).strip())

结果:71364

相关问题 更多 >