为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

湖上湖 2023-06-20 17:31:06
我是 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 标签中。这似乎是找到它的唯一可靠方法。我不明白的是如何获得实际的电话号码,即“电话:”后的标签如何在“电话:”一词后获取此元素中的数字?
查看完整描述

2 回答

?
交互式爱情

TA贡献1712条经验 获得超3个赞

使用一些正则表达式逻辑,您可以直接找到<p>包含电话号码的标签:


import re

from bs4 import BeautifulSoup


html = """<div>

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

    <p></p>

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

    <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:

    phone = phone_tag.text.replace('Telephone:','').strip()

else:

    phone = None


查看完整回答
反对 回复 2023-06-20
?
当年话下

TA贡献1890条经验 获得超9个赞

事实证明,我不知道使用 搜索此字符串的更好方法re.compile。我会在这里发布答案,以防其他人正在寻找同样的东西。


对我有用的是:


phoneNumber = soup.find('p', text = re.compile('Telephone:'))

这给了我字符串出现的整个 p 标签,我一开始没有意识到,所以我可以这样做:


if phoneNumber:

    phoneNumber = phoneNumber.get_text().strip().replace('Telephone:', '')

else:

    phoneNumber = ('None')


查看完整回答
反对 回复 2023-06-20
  • 2 回答
  • 0 关注
  • 74 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信