Python从href链接中抓取电子邮件地址

时间:2018-10-05 14:16:30

标签: python email href screen-scraping

我想从这些学校获得所有电子邮件地址(绿色链接): http://www.schulliste.eu/schule/

现在我有获取所有href链接的代码,但是如何单击每个链接并从每个单击的链接中删除电子邮件地址?

from bs4 import BeautifulSoup
from urllib.request import urlopen
import re
import requests

def getLinks(url):
    html_page = urlopen(url)
    soup = BeautifulSoup(html_page)
    links = []

    for link in soup.findAll('a', attrs={'href': re.compile("^http://")}):
        links.append(link.get('href',))

    return links

print(getLinks("http://www.schulliste.eu/schule/"))

2 个答案:

答案 0 :(得分:1)

您可以找到每个学校的所有链接,然后在每个学校上运行一个请求:

import requests
from bs4 import BeautifulSoup as soup
def get_emails(_links:list, _r = [0, 10]):
  for i in range(*_r):
     new_d = soup(requests.get(_links[i]).text, 'html.parser').find_all('a', {'class':'my_modal_open'})
     if new_d:
       yield new_d[-1]['title']

d = soup(requests.get('http://www.schulliste.eu/schule/').text, 'html.parser')
results = [i['href'] for i in d.find_all('a')][52:-9]
print(list(get_emails(results)))

输出:

['schuleamhasenwald-gue@freenet.de', 'kita-stmartin@htp-tel.de', 'wundertuete@stephansstift.de', 'a.haeupl@igs-baltic-schule.de', 'kindergarten@bothel.de']

答案 1 :(得分:0)

您需要具有类似于getLinks的其他功能,例如称为getEmail,在其中传递子页面的URL,它使用urlopen和BeautifulSoup(就像您在第一个函数中所做的一样)获取HTML内容并从该页面提取电子邮件地址。

然后,您的主要代码需要调用getEmail,以获取从getLinks检索到的每个链接。