Ошибка очистки Python MissingSchema: Неверный URL - PullRequest
0 голосов
/ 08 октября 2018

Кто-нибудь знает, почему появляется эта ошибка?

MissingSchema: Invalid URL '/type/gymnasien/': No schema supplied. Perhaps you meant http:///type/gymnasien/?

Это мой код:

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]
print(list(get_emails(results)))

1 Ответ

0 голосов
/ 08 октября 2018

Итак, насколько я понимаю из вашего кода, вы хотите почистить ссылки на несколько школ, а затем использовать функцию 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']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...