Итак, насколько я понимаю из вашего кода, вы хотите почистить ссылки на несколько школ, а затем использовать функцию get_emails()
, чтобы перейти по этим ссылкам и почистить электронные письма о контактах со школой.Если вы загляните внутрь списка results
, который вы передаете get_emails()
, вы увидите, что он содержит некоторые относительные ссылки внутри сайта, с которыми requests
не знает, как обращаться:
>>> print(results[1])
/type/gymnasien/
Эти ссылки могут не совпадать с теми, за которыми вы хотите следовать, поэтому вы можете попытаться удалить их из списка очищенных ссылок, прежде чем передавать их в функцию get_emails()
:
results_filtered = [link for link in results if link.startswith('http://')]
ЗатемВы можете использовать эти результаты ниже и get_emails()
не должен больше жаловаться на MissingSchema
.Окончательный код будет выглядеть так:
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/type/gymnasien/').text, 'html.parser')
results = [i['href'] for i in d.find_all('a')][52:-9]
results = [link for link in results if link.startswith('http://')]
print(list(get_emails(results)))
, который выводит следующий вывод:
['schule@waldorfschulemarburg.de', 'e-gym@schulen-ee.de', 'martina.kock@louisenlund.de', 'gymnasium.sn@ecolea.de', 'admissions@dresden-is.de', 'info@sankt-matthias.de', 'info@marienhoehe.de', 'kubera@ams-viernheim.de', 'gymnasium.hro@ecolea.de']