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

Python 如何使用BS4搜索特定的单词,然后在该单词之后立即获取同一元素中的文本?,python,web-scraping,beautifulsoup,Python,Web Scraping,Beautifulsoup,我对BeautifulSoup和Python非常陌生。我在一些网页上爬行,有时候有电话号码,有时候没有。如果它在那里,我想刮它。HTML非常简单: <div> <p>Email: someone@somewhere.com</p> <p>Telephone: 1234567890</p> <p>Postal code: B3H 2F5</p> </div> 在这个div中通

我对BeautifulSoup和Python非常陌生。我在一些网页上爬行,有时候有电话号码,有时候没有。如果它在那里,我想刮它。HTML非常简单:

<div>
    <p>Email: someone@somewhere.com</p>
    <p>Telephone: 1234567890</p>
    <p>Postal code: B3H 2F5</p>

</div>
在这个div中通常有几个其他的p标记,但是不总是有相同的p标记,所以我不能依赖它们作为参考点。电话号码也不总是遵循相同的模式。我所能做的最好的事情就是确定电话号码的前面总是加上“Telephone:”并用一个p标签包装起来。这似乎是找到它的唯一可靠方法

我不明白的是如何获得实际的电话号码,即,标签中“电话:”之后的任何内容


如何在单词“Telephone:”后获取此元素中的数字?

通过一些正则表达式逻辑,您可以直接找到包含电话号码的
标记:

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
重新导入
从bs4导入BeautifulSoup
html=”“”
电邮:someone@somewhere.com

邮政编码:B3H 2F5

电话:1234567890

""" soup=BeautifulSoup(html) #查找包含“电话:”的标签: phone_tag=soup.find('p',text=re.compile('Telephone:')) 如果是电话标签: phone=phone_tag.text.replace('phone:','').strip() 其他: 电话=无
事实证明,我不知道使用
re.compile
搜索此字符串的更好方法。我会把答案贴在这里,以防其他人也在寻找同样的答案

对我起作用的是:

phoneNumber = soup.find('p', text = re.compile('Telephone:'))
这给了我字符串出现的整个p标记,这是我起初没有意识到的,因此我可以做:

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

如果它的前面总是有:,你可以做一个
str.split(':')[1]
来获取电话号码。这就是为什么有
try/except
,否则根据length@sushanth事实上,它前面总是有一个
,但是如果我这样做
phoneNumber=str.split(':')[1]
它总是返回
None
@MBWD,对我来说很好
对于soup中的p.find(“div”).find_all(“p”):print(p.text.split(“:”)
@sushanth我需要将变量phoneNumber分配给这些号码,如果这些号码存在于页面上,这样它就可以包含在JSON转储中,而不仅仅是打印出来。此外,有时
p
标记的顺序与上面显示的不同,因此我需要通过单词“电话:”进行搜索。
if phoneNumber:
    phoneNumber = phoneNumber.get_text().strip().replace('Telephone:', '')
else:
    phoneNumber = ('None')