Python 使用beautifulsoup访问未标记的文本
我正在使用python和beautifulsoup4提取一些地址信息。 更具体地说,我在检索非美国邮政编码时需要帮助 考虑一家美国公司的以下html数据:(已经是一个soup对象) 你可以看到我需要一些律师,如果地址['zip']='': 这两个对象示例给我带来了麻烦。在下面的示例中,我想检索EC4N 4SAPython 使用beautifulsoup访问未标记的文本,python,beautifulsoup,bs4,Python,Beautifulsoup,Bs4,我正在使用python和beautifulsoup4提取一些地址信息。 更具体地说,我在检索非美国邮政编码时需要帮助 考虑一家美国公司的以下html数据:(已经是一个soup对象) 你可以看到我需要一些律师,如果地址['zip']='': 这两个对象示例给我带来了麻烦。在下面的示例中,我想检索EC4N 4SA <div class="compContent curvedBottom" id="companyDescription"> <div class="vcard clea
<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>
阿尔伯特大厦
维多利亚皇后街00号
伦敦
ec4n4sa
伦敦
英国
业务线
管理服务,nsk
以及下面,我对获得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>
阿尔弗雷德·卡彻街100号
71364
温内登
巴登-沃尔滕堡
德国
电话:+00-1234567
传真:+00-1234567
现在,我在大约68000个账户上运行这个程序,其中28000个非美国账户。我只举了两个例子,我知道目前的方法不是防弹的。可能还有其他的地址格式,这个脚本并没有像预期的那样工作,但我相信弄清楚英国和德国的帐户将非常有帮助
提前感谢您,因为它是唯一一个没有标签的文本,所以您可以使用
find_all(text=True, recursive=False)
仅获取文本(无标记),而不从嵌套标记(
)获取文本。这将为列表提供文本和一些\n
和空格,以便您可以使用join()
创建一个字符串,并使用strip()
删除所有\n
和空格
data = '''<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>'''
from bs4 import BeautifulSoup as BS
soup = BS(data, 'html.parser').find('p')
print(''.join(soup.find_all(text=True, recursive=False)).strip())
结果:
71364
这真漂亮!谢谢你@furas,我会马上尝试一下。我在看这个时没有注意到包含的标记。
find_all(text=True, recursive=False)
data = '''<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>'''
from bs4 import BeautifulSoup as BS
soup = BS(data, 'html.parser').find('p')
print(''.join(soup.find_all(text=True, recursive=False)).strip())
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())