如何使用多个正则表达式函数在python中提取数据

2024-06-23 20:09:16 发布

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

我对python不太熟悉。我正在从一个学校网站上抓取有关其地址、电话、电子邮件和学校链接的数据。我抓取了json数据,其中一个键包含我在下面显示的所有这些值

这是我在“地址”键下收到的输出:

<br>title='École privée'/>
17 rue Jean Gallart  <br>49650 ALLONNES  #This is the address
<br>Téléphone : <a href="tel:0241528201">0241528201</a>   #Phone no
<br>Adresse de courriel : <a href="mailto:ce.0491164Z@ac-nantes.fr">ce.0491164Z@ac-nantes.fr</a>  # Email 
<br><br><a href="./etablissement/Allonnes/ECOLE-PRIMAIRE-PRIVEE-SAINT-DOUCELIN/0491164Z.html">  #Link for school


所有内容都在一行中,我将其格式化,使其看起来清晰,并删除了不必要的内容<;字体标签

我想以以下格式提取这些项目:

地址:让·加拉特街17号阿隆49650
电话:0241528201
电子邮件:ce。0491164Z@ac-南特
学校链接=https://etablissement/Allonnes/ECOLE-PRIMAIRE-PRIVEE-SAINT-DOUCELIN/0491164Z.html

我尝试使用正则表达式提取电子邮件:

emails = re.findall(r"[a-z0-9\.\-+_]+@[a-z0-9\.\-+_]+\.[a-z]+", address)
print (emails)

但这并没有回报

我尝试提取href标记:

soup = BeautifulSoup(address, 'lxml')
for anchor in soup.find_all("a"):
print(anchor.attrs)

我得到了一个接近的输出:

{'href': 'tel:0241528201'}<br>
{'href': 'mailto:ce.0491164Z@ac-nantes.fr'}<br>

{'href': './etablissement/Allonnes/ECOLE-PRIMAIRE-PRIVEE-SAINT-DOUCELIN/0491164Z.html'}<br>

如何在不同的变量下逐个提取这些项目,以便轻松地将其保存到csv文件中?
提前谢谢


Tags: braddress电子邮件地址frac学校href
1条回答
网友
1楼 · 发布于 2024-06-23 20:09:16

这并不是完美的(链接模式是松散的),但它应该可以完成以下工作:

import re
full_string = """<br>title='École privée'/>
17 rue Jean Gallart  <br>49650 ALLONNES
<br>Téléphone : <a href="tel:0241528201">0241528201</a>
<br>Adresse de courriel : <a href="mailto:ce.0491164Z@ac-nantes.fr">ce.0491164Z@ac-nantes.fr</a>
<br><br><a href="./etablissement/Allonnes/ECOLE-PRIMAIRE-PRIVEE-SAINT-DOUCELIN/0491164Z.html">"""

addr_pattern = r'/>\s+(.*)?(?=\n<br>Téléphone)'
tel_pattern = r'<br>Téléphone.*?>(\d+)</a>'
mail_pattern = r'<br>Adresse de courriel.*?>(.*)?</a>'
link_pattern = r'<br><br><a href="(.*)?">'

print("Address: " + re.search(addr_pattern, full_string).group(1).replace('<br>', "").replace("  ", " "))
print("Telephone: " + re.search(tel_pattern, full_string).group(1))
print("Email: " + re.search(mail_pattern, full_string).group(1))
print("Link for school: " + re.search(link_pattern, full_string).group(1))

相关问题 更多 >

    热门问题