如何从一个页面单独获取所有电子邮件



我正试图从特定页面获取所有电子邮件,并将它们分离为一个单独的变量,甚至更好的是一个字典。这是一些代码。

import requests
import re
import json
from bs4 import BeautifulSoup
page = "http://www.example.net"
info = requests.get(page)
if info.status_code == 200:
print("Page accessed")
else:
print("Error accessing page")
code = info.content
soup = BeautifulSoup(code, 'lxml')
allEmails = soup.find_all("a", href=re.compile(r"^mailto:"))
print(allEmails)
sep = ","
allEmailsStr = str(allEmails)
print(type(allEmails))
print(type(allEmailsStr))
j = allEmailsStr.split(sep, 1)[0]
print(j)

请原谅那些糟糕的变量名,因为我把它们放在一起,这样它本身就可以了。例如,示例网站的输出将类似于

[<a href="mailto:k@domain.xyz">k</a>, <a href="mailto:russia@siberia.net">kolyma</a>, <a href="mailto:house@chinatown.com">location</a>, <a href="mailto:sophia@bulgaria.cf">balkans</a>]

所以如果我运行这个问题,它只会返回

[<a href ="mailto:k@domain.xyz">k</a>

但如果我想让它单独返回那里的每封电子邮件,我该怎么做?

根据您的预期输出,您可以使用BeautifulSoupunwrap函数

allEmails = soup.find_all("a", href=re.compile(r"^mailto:"))
for Email in allEmails:
print(Email.unwrap()) #This will print the whole element along with tag
# <a href="mailto:k@domain.xyz">k</a>

要只获取电子邮件str,您可以尝试:

emails = []
for email_link in allEmails:
emails.append(email_link.get("href").replace('mailto:', ''))
print(emails)

最新更新