Python выскабливает адрес электронной почты из ссылки href - PullRequest
0 голосов
/ 05 октября 2018

Я хочу получить все адреса электронной почты из этих школ (зеленые ссылки): 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 голосов
/ 05 октября 2018

Вы можете найти все ссылки на каждую школу, а затем запустить запрос для каждой:

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']
0 голосов
/ 05 октября 2018

Вам нужна другая функция, похожая на getLinks, например, называемая getEmail, в которой вы передаете ей URL-адрес подстраницы, она использует urlopen и BeautifulSoup (так же, как вы делали в первой функции), чтобы получитьсодержимое HTML и извлеките адрес электронной почты с этой страницы.

Затем ваш главный код должен вызвать getEmail для КАЖДОЙ ссылки, полученной из getLinks.

...