Найти - Пользователи
Полная версия: Зависание работы скрипта
Начало » Python для новичков » Зависание работы скрипта
1 2
philips2009
Доброго времени суток дорогие форумчане.
Прошу помощи в решении задачи которой я столкнулся по ходу написания скрипта для парсинга информации с сайта объявлений с последующей записью в бд MySQL на локальном ПК. Сам скрипт работает нормально НО, есть случаи когда его работа прекращается, вернее останавливается ход работы (не совсем останавливается а как бы зависает). При полной остановки скрипта были такие ошибки: ssl.SSLError, ssl.SSLE0FError, ConnectionError, MaxRetryError. Написал обработчик исключений (try … except) чтобы в случае ошибки была некоторая пауза после чего скрипт работал дальше:
 try:
    load_info(url)
except:
    sleep(60)
    load_info(url)

Та же самая проблема. Подскажите можно ли создать счетчик времени при каждом считывании информации если само считывание превышает к примеру - 30 сек. или есть другие идеи на этот счет.
Спасибо заранее.
JOHN_16
какой то поток сознания…
Вы определитесь, как должен структурно работать ваш алгоритм. И опишите его. С ваших слов не очень понятно
philips2009
Алгоритм таков:
  1. 1. сбор ссылок категорий объявлений с главной страницы сайта в питоновский список
    2. сбор ссылок объявлений с каждой категории в питоновский список
    3. сбор информации (наименование объявления, описание, url, дата публикации) с каждой ссылки на объявление
    4. запись информации в БД MySQL

… забыл еще написать о том что, при нажатии CTRL + C, происходит исключение и сам sleep(60) и потом скрипт опять продолжает работу.
Yuri197
У вас прямо в блоке try ошибка:
try:
load_info(url)
except:
sleep(60)
load_info(url)
Вы пишите try для load_info(url) и добавляете в except load_info(url). Вы же само исключение не видите. Сделайте что-нибудь вроде:
try:
load_info(url)
except Exception as err:
print(err)
Чтобы понять, что происходит.
philips2009
Вот ошибки которые выдает:
 2019-04-01 10:32:18.626144
HTTPSConnectionPool(host='999.md', port=443): Max retries exceeded with url: /ru/category/phone-and-communication (Caused by NewConnectionError('<requests.packages.urllib3.connection.VerifiedHTTPSConnection object at 0xb44c186c>: Failed to establish a new connection: [Errno -3] Временный сбой в разрешении имен',))
##################################################
2019-04-01 10:34:49.065123
HTTPSConnectionPool(host='999.md', port=443): Max retries exceeded with url: /ru/category/computers-and-office-equipment (Caused by NewConnectionError('<requests.packages.urllib3.connection.VerifiedHTTPSConnection object at 0xb44f4a0c>: Failed to establish a new connection: [Errno -3] Временный сбой в разрешении имен',))
##################################################
2019-04-02 08:21:51.197700
HTTPSConnectionPool(host='999.md', port=443): Max retries exceeded with url: /ru/48624857 (Caused by NewConnectionError('<requests.packages.urllib3.connection.VerifiedHTTPSConnection object at 0xb161922c>: Failed to establish a new connection: [Errno -3] Временный сбой в разрешении имен',))
##################################################
2019-04-02 08:57:31.496661
('Connection aborted.', RemoteDisconnected('Remote end closed connection without response',))
##################################################

написал в скрипте чтобы ошибки выводились в текстовом файле:
дата, время
ошибка
######## - чтобы отделять шибки друг от друга
philips2009
Еще заметил что в последнее время скорость интернета плавает, может из за этого и останавливается работа скрипта, то есть при очень низкой скорости останавливается и даже при увеличении скорости так и висит.
Yuri197
Судя вот по этому: “Временный сбой в разрешении имен” - вы либо имя адреса неправильно задаете, либо у вас с DNS какая-то проблема.

Если вы адреса именно в таком (“/ru/48624857”) виде задаете, то проблема с разрешением имен будет обязательно.
philips2009
Вот еще ошибки:
 Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 346, in _make_request
    self._validate_conn(conn)
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 787, in _validate_conn
    conn.connect()
  File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 252, in connect
    ssl_version=resolved_ssl_version)
  File "/usr/lib/python3/dist-packages/urllib3/util/ssl_.py", line 305, in ssl_wrap_socket
    return context.wrap_socket(sock, server_hostname=server_hostname)
  File "/usr/lib/python3.5/ssl.py", line 377, in wrap_socket
    _context=self)
  File "/usr/lib/python3.5/ssl.py", line 752, in __init__
    self.do_handshake()
  File "/usr/lib/python3.5/ssl.py", line 988, in do_handshake
    self._sslobj.do_handshake()
  File "/usr/lib/python3.5/ssl.py", line 633, in do_handshake
    self._sslobj.do_handshake()
socket.timeout: _ssl.c:629: The handshake operation timed out
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/requests/adapters.py", line 376, in send
    timeout=timeout
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 610, in urlopen
    _stacktrace=sys.exc_info()[2])
  File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 247, in increment
    raise six.reraise(type(error), error, _stacktrace)
  File "/usr/lib/python3/dist-packages/six.py", line 686, in reraise
    raise value
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 560, in urlopen
    body=body, headers=headers)
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 349, in _make_request
    self._raise_timeout(err=e, url=url, timeout_value=conn.timeout)
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 309, in _raise_timeout
    raise ReadTimeoutError(self, url, "Read timed out. (read timeout=%s)" % timeout_value)
requests.packages.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='999.md', port=443): Read timed out. (read timeout=20)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "999_parser.py", line 430, in <module>
    main()
  File "999_parser.py", line 300, in main
    cat_url_html = get_html(cat_url)
  File "999_parser.py", line 11, in get_html
    r = requests.get(url, timeout=20)
  File "/usr/lib/python3/dist-packages/requests/api.py", line 67, in get
    return request('get', url, params=params, **kwargs)
  File "/usr/lib/python3/dist-packages/requests/api.py", line 53, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 480, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 588, in send
    r = adapter.send(request, **kwargs)
  File "/usr/lib/python3/dist-packages/requests/adapters.py", line 449, in send
    raise ReadTimeout(e, request=request)
requests.exceptions.ReadTimeout: HTTPSConnectionPool(host='999.md', port=443): Read timed out. (read timeout=20)
Yuri197
Соединение ваш скрипт не может наладить. В этом смысл ошибок.
philips2009
Можно ли сделать так чтобы скрипт сделал некую паузу в работе при отсутствии соединения или проверил есть ли соединение к интернету и в случае присутствия продолжить работу. Или может какие-то другие идеи есть, а то я уже запутался.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB