Python3 Не удалось установить соединение socket.gaierror: имя или служба неизвестны - PullRequest
0 голосов
/ 11 ноября 2019

Я пытаюсь запустить харвестер электронной почты, когда я ввожу URL-адрес вручную без цикла, у меня нет ошибок подключения.

import re
import requests
import requests.exceptions
from urllib.parse import urlsplit
from collections import deque
from bs4 import BeautifulSoup


def email_harvest(starting_url):
    # starting url. replace google with your own url.
    #starting_url = 'http://www.miet.ac.in'
    print ('this is the starting urli '+starting_url)   
    #starting_url = website_url[i]
#   i += 1
    # a queue of urls to be crawled
    unprocessed_urls = deque([starting_url])

    # set of already crawled urls for email
    processed_urls = set()

    # a set of fetched emails
    emails = set()

    # process urls one by one from unprocessed_url queue until queue is empty
    while len(unprocessed_urls):

        # move next url from the queue to the set of processed urls
        url = unprocessed_urls.popleft()
        processed_urls.add(url)

        # extract base url to resolve relative links
        parts = urlsplit(url)
        base_url = "{0.scheme}://{0.netloc}".format(parts)
        path = url[:url.rfind('/')+1] if '/' in parts.path else url
        print (url)
        # get url's content
        #print("Crawling URL %s" % url)
        try:
            response = requests.get(url)
            print (response.status_code)
        except (requests.exceptions.MissingSchema, requests.exceptions.ConnectionError):
            # ignore pages with errors and continue with next url
            print ("error crawing " % url)
            continue

        # extract all email addresses and add them into the resulting set
        # You may edit the regular expression as per your requirement
        new_emails = set(re.findall(r"[a-z0-9\.\-+_]+@[a-z0-9\.\-+_]+\.[a-z]+", response.text, re.I))
        emails.update(new_emails)
        print(emails)
        # create a beutiful soup for the html document
        soup = BeautifulSoup(response.text, 'lxml')

        # Once this document is parsed and processed, now find and process all the anchors i.e. linked urls in this document
        for anchor in soup.find_all("a"):
            # extract link url from the anchor
            link = anchor.attrs["href"] if "href" in anchor.attrs else ''
            # resolve relative links (starting with /)
            if link.startswith('/'):
                link = base_url + link
            elif not link.startswith('http'):
                link = path + link
            # add the new url to the queue if it was not in unprocessed list nor in processed list yet
            if not link in unprocessed_urls and not link in processed_urls:
                unprocessed_urls.append(link)


website_url = tuple(open('text.txt','r'))
i = 0
while i < (len(website_url)+1):
    print (i)
    starting_url = 'http://'+ website_url[i]
    email_harvest(starting_url)
    i +=1

однако, когда я загружаю URL из файла, я получаю следующую ошибку «имя или сервисная ошибка»

Traceback (последний вызов был последним): Файл "/ usr /lib / python3 / dist-packages / urllib3 / connection.py ", строка 141, в _new_conn (self.host, self.port), self.timeout, ** extra_kw) файле" / usr / lib / python3 / dist-packages/urllib3/util/connection.py ", строка 60, в create_connection для res в socket.getaddrinfo (хост, порт, семейство, socket.SOCK_STREAM): файл" /usr/lib/python3.6/socket.py ", строка745, в getaddrinfo for res в _socket.getaddrinfo (хост, порт, семейство, тип, прото, флаги): socket.gaierror: [Errno -2] Имя или служба не известны

Во время обработки вышеупомянутого исключения, произошло другое исключение:

Трассировка (последний вызов был последним): файл "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", строка 601, в urlopen chunked = chunked) Файл "/usr/lib/python3/dist-packages/urllib3/connectionpool.py ", строка 357, в _make_request conn.request (method, url, ** httplib_request_kw) Файл "/usr/lib/python3.6/http/client.py", строка 1254, в запросе self._send_request (метод, URL, тело, заголовки, encode_chunked) Файл "/usr/lib/python3.6/http / client.py ", строка 1300, в _send_request self.endheaders (body, encode_chunked = encode_chunked) Файл" /usr/lib/python3.6/http/client.py ", строка 1249, в конечных заголовках self._send_output (message_body), encode_chunked = encode_chunked) Файл "/usr/lib/python3.6/http/client.py", строка 1036, в файле _send_output self.send (msg) "/usr/lib/python3.6/http/client.py", строка 974, в отправляемом файле self.connect ()" /usr/lib/python3/dist-packages/urllib3/connection.py ", строка 166, в соединительном файле conn = self._new_conn ()" / usr / lib/python3/dist-packages/urllib3/connection.py ", строка 150, в _new_conn self," Не удалось установить новое соединение:% s "% e) urllib3.exceptions.NewConnectionError:: Не удалось установить новое соединение: [Errno -2] Имя или служба неизвестна

Во время обработки вышеуказанного исключения произошло другое исключение:

Traceback (последний вызов был последним): файл "/usr/local/lib/python3.6/dist-packages/requests/adapters.py", строка 449, в файле send timeout = timeout File "/ usr /lib / python3 / dist-packages / urllib3 / connectionpool.py ", строка 639, в urlopen _stacktrace = sys.exc_info () [2]) Файл" / usr / lib / python3 / dist-packages / urllib3 / util / retry. py ", строка 398, в инкрементном повышении MaxRetryError (_pool, url, error или ResponseError (причина)) urllib3.exceptions.MaxRetryError: HTTPConnectionPool (host = 'www.miet.ac.in% 0a', port = 80): Maxповторные попытки превышены с помощью url: / (вызвано NewConnectionError (': не удалось установить новое соединение: [Errno -2] имя или служба неизвестна',))

Во время обработки вышеуказанного исключения произошло другое исключение:

Traceback (последний вызов был последним): файл "editog.py", строка 39, в email_harvest response = reports.get (url) файл "/usr/local/lib/python3.6/dist-пакеты / запросы / api.py ", строка 75, в запросе на получение возврата (файл 'get', url, params = params, ** kwargs)" / usr / local / lib / python3.6 / dist-packages / запросы / api.py ", строка 60, в запросе вернуть файл session.request (method = method, url = url, ** kwargs) Файл" /usr/local/lib/python3.6/dist-packages / reports / sessions.py ", строка 533, в запросе resp = файл self.send (prep, ** send_kwargs)" /usr/local/lib/python3.6/dist-packages/requests/sessions.py", строка 646, в файле send r = adaptor.send (запрос, ** kwargs)" /usr/local/lib/python3.6/dist-packages/requests/adapters.py ", строка 516, в файле send поднимите ConnectionError(e, request = request) request.exceptions.ConnectionError:HTTPConnectionPool (host = 'www.miet.ac.in% 0a', port = 80): Максимальное количество повторных попыток превышено с помощью URL: / (вызвано NewConnectionError (': не удалось установить новое соединение: [Errno -2] Имя или службане известно ',))

Примечание:

  1. Я не поддерживаю ни одного прокси, фильтрации нет.
  2. Интернет стабильный.

Ответы [ 2 ]

1 голос
/ 14 ноября 2019

host = ' www.miet.ac.in% 0a ', порт = 80

Проблема с вашей интерполяцией строки

0 голосов
/ 14 ноября 2019

Похоже, что соединение пытается соединиться с недопустимым URL.

HTTPConnectionPool (host = 'www.miet.ac.in% 0a', port = 80)

Этот URL («www.miet.ac.in% 0a») действителен? Я смог получить доступ к «www.miet.ac.in», но не «www.miet.ac.in% 0a»

Если он действителен, можете ли вы добавить то, что вы сделали без цикла?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...