Уведомления

Группа в Telegram: @pythonsu

#1 Март 29, 2019 12:18:35

philips2009
Зарегистрирован: 2017-05-09
Сообщения: 45
Репутация: +  0  -
Профиль   Отправить e-mail  

Зависание работы скрипта

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

 try:
    load_info(url)
except:
    sleep(60)
    load_info(url)

Та же самая проблема. Подскажите можно ли создать счетчик времени при каждом считывании информации если само считывание превышает к примеру - 30 сек. или есть другие идеи на этот счет.
Спасибо заранее.

Офлайн

#2 Март 29, 2019 13:00:41

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Зависание работы скрипта

какой то поток сознания…
Вы определитесь, как должен структурно работать ваш алгоритм. И опишите его. С ваших слов не очень понятно



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Март 29, 2019 13:30:48

philips2009
Зарегистрирован: 2017-05-09
Сообщения: 45
Репутация: +  0  -
Профиль   Отправить e-mail  

Зависание работы скрипта

Алгоритм таков:

  1. 1. сбор ссылок категорий объявлений с главной страницы сайта в питоновский список
    2. сбор ссылок объявлений с каждой категории в питоновский список
    3. сбор информации (наименование объявления, описание, url, дата публикации) с каждой ссылки на объявление
    4. запись информации в БД MySQL

… забыл еще написать о том что, при нажатии CTRL + C, происходит исключение и сам sleep(60) и потом скрипт опять продолжает работу.

Отредактировано philips2009 (Март 29, 2019 13:31:52)

Офлайн

#4 Март 29, 2019 17:05:40

Yuri197
Зарегистрирован: 2019-03-24
Сообщения: 24
Репутация: +  0  -
Профиль  

Зависание работы скрипта

У вас прямо в блоке 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)
Чтобы понять, что происходит.

Офлайн

#5 Апрель 2, 2019 10:29:41

philips2009
Зарегистрирован: 2017-05-09
Сообщения: 45
Репутация: +  0  -
Профиль   Отправить e-mail  

Зависание работы скрипта

Вот ошибки которые выдает:

 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 (Апрель 2, 2019 10:34:11)

Офлайн

#6 Апрель 2, 2019 10:42:58

philips2009
Зарегистрирован: 2017-05-09
Сообщения: 45
Репутация: +  0  -
Профиль   Отправить e-mail  

Зависание работы скрипта

Еще заметил что в последнее время скорость интернета плавает, может из за этого и останавливается работа скрипта, то есть при очень низкой скорости останавливается и даже при увеличении скорости так и висит.

Офлайн

#7 Апрель 2, 2019 12:32:58

Yuri197
Зарегистрирован: 2019-03-24
Сообщения: 24
Репутация: +  0  -
Профиль  

Зависание работы скрипта

Судя вот по этому: “Временный сбой в разрешении имен” - вы либо имя адреса неправильно задаете, либо у вас с DNS какая-то проблема.

Если вы адреса именно в таком (“/ru/48624857”) виде задаете, то проблема с разрешением имен будет обязательно.

Отредактировано Yuri197 (Апрель 2, 2019 12:35:31)

Офлайн

#8 Апрель 2, 2019 17:00:47

philips2009
Зарегистрирован: 2017-05-09
Сообщения: 45
Репутация: +  0  -
Профиль   Отправить e-mail  

Зависание работы скрипта

Вот еще ошибки:

 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)

Офлайн

#9 Апрель 2, 2019 17:46:08

Yuri197
Зарегистрирован: 2019-03-24
Сообщения: 24
Репутация: +  0  -
Профиль  

Зависание работы скрипта

Соединение ваш скрипт не может наладить. В этом смысл ошибок.

Офлайн

#10 Апрель 2, 2019 18:24:41

philips2009
Зарегистрирован: 2017-05-09
Сообщения: 45
Репутация: +  0  -
Профиль   Отправить e-mail  

Зависание работы скрипта

Можно ли сделать так чтобы скрипт сделал некую паузу в работе при отсутствии соединения или проверил есть ли соединение к интернету и в случае присутствия продолжить работу. Или может какие-то другие идеи есть, а то я уже запутался.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version