如何使用 BS4 搜索特定单词,然后在该单词之后立即获取同一元素中的文本?

我是 BeautifulSoup 和 Python 的新手。我正在抓取一些页面,有时会给出电话号码,有时却没有。如果它在那里,我想刮掉它。HTML 非常简单:


<div>

    <p>Email: someone@somewhere.com</p>

    <p>Telephone: 1234567890</p>

    <p>Postal code: B3H 2F5</p>


</div>

我正在检查电话号码是否存在,如下所示:


phoneNumber = soup.find(string='Telephone:')

if phoneNumber:

    phoneNumber = # Some code here to get the actual number 

else:

    phoneNumber = ('None')

print (phoneNumber)

该 div 中通常还有其他几个 p 标签,但并不总是存在相同的标签,因此我不能依赖它们作为参考点。电话号码也不总是遵循相同的模式。我能做的最好的事情就是确定电话号码始终以“电话:”开头并包含在 ap 标签中。这似乎是找到它的唯一可靠方法。


我不明白的是如何获得实际的电话号码,即


“电话:”后的标签


如何在“电话:”一词后获取此元素中的数字?


湖上湖
浏览 77回答 2
2回答

交互式爱情

使用一些正则表达式逻辑,您可以直接找到<p>包含电话号码的标签:import refrom bs4 import BeautifulSouphtml = """<div>&nbsp; &nbsp; <p>Email: someone@somewhere.com</p>&nbsp; &nbsp; <p></p>&nbsp; &nbsp; <p>Postal code: B3H 2F5</p>&nbsp; &nbsp; <p>Telephone: 1234567890</p></div>"""soup = BeautifulSoup(html)#Find the tag containing "Telephone:"phone_tag = soup.find('p', text=re.compile('Telephone:'))if phone_tag:&nbsp; &nbsp; phone = phone_tag.text.replace('Telephone:','').strip()else:&nbsp; &nbsp; phone = None

当年话下

事实证明,我不知道使用 搜索此字符串的更好方法re.compile。我会在这里发布答案,以防其他人正在寻找同样的东西。对我有用的是:phoneNumber = soup.find('p', text = re.compile('Telephone:'))这给了我字符串出现的整个 p 标签,我一开始没有意识到,所以我可以这样做:if phoneNumber:&nbsp; &nbsp; phoneNumber = phoneNumber.get_text().strip().replace('Telephone:', '')else:&nbsp; &nbsp; phoneNumber = ('None')
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python