Я пытаюсь извлечь сообщения электронной почты с веб-страниц, вот мой адрес электронной почты граббер функция:InvalidSchema: Нет подключения адаптеров не были найдены python3.5.2
def emlgrb(x):
email_set = set()
for url in x:
try:
response = requests.get(url)
soup = bs.BeautifulSoup(response.text, "lxml")
emails = set(re.findall(r"[a-z0-9\.\-+_][email protected][a-z0-9\.\-+_]+\.[a-z]+", soup.text, re.I))
email_set.update(emails)
except (requests.exceptions.MissingSchema, requests.exceptions.ConnectionError):
continue
return email_set
Эта функция должна быть подана через другую функцию, которая создает список url. Функция фидера:
def handle_local_links(url, link):
if link.startswith("/"):
return "".join([url, link])
return link
def get_links(url):
try:
response = requests.get(url, timeout=5)
soup = bs.BeautifulSoup(response.text, "lxml")
body = soup.body
links = [link.get("href") for link in body.find_all("a")]
links = [handle_local_links(url, link) for link in links]
links = [str(link.encode("ascii")) for link in links]
return links
Он сохраняется за многими исключениями, которые, если подняты, возвращают пустой список (не важно). Однако возвращать значение из get_links() выглядит следующим образом:
["b'https://pythonprogramming.net/parsememcparseface//'"]
, конечно, есть много ссылок в списке (не могу разместить его - репутацию). Функция emlgrb() не в состоянии обработать список (InvalidSchema: не было обнаружено ни одного подключения адаптеров) Однако, если я вручную удалить б и лишние кавычки - так что список выглядит следующим образом:
['https://pythonprogramming.net/parsememcparseface//']
emlgrb() работает. Любое предложение, где проблема или проблема создания «функции очистки» для получения второго списка с первого раза, приветствуется.
Благодаря
Как выглядит вывод, если вы уроните .encode ('ascii')? –
На самом деле, хорошо работает - спасибо. – scagbackbone
Я думаю, что в str() вы также можете указать кодировку? Если вам это нужно;) –