Форум сайта python.su
0
Доброго времени суток дорогие форумчане.
Прошу помощи в решении задачи которой я столкнулся по ходу написания скрипта для парсинга информации с сайта объявлений с последующей записью в бд MySQL на локальном ПК. Сам скрипт работает нормально НО, есть случаи когда его работа прекращается, вернее останавливается ход работы (не совсем останавливается а как бы зависает). При полной остановки скрипта были такие ошибки: ssl.SSLError, ssl.SSLE0FError, ConnectionError, MaxRetryError. Написал обработчик исключений (try … except) чтобы в случае ошибки была некоторая пауза после чего скрипт работал дальше:
try: load_info(url) except: sleep(60) load_info(url)
Офлайн
221
какой то поток сознания…
Вы определитесь, как должен структурно работать ваш алгоритм. И опишите его. С ваших слов не очень понятно
Офлайн
0
Алгоритм таков:
Отредактировано philips2009 (Март 29, 2019 13:31:52)
Офлайн
У вас прямо в блоке try ошибка:
try:
load_info(url)
except:
sleep(60)
load_info(url)
try:
load_info(url)
except Exception as err:
print(err)
Офлайн
0
Вот ошибки которые выдает:
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)
Офлайн
0
Еще заметил что в последнее время скорость интернета плавает, может из за этого и останавливается работа скрипта, то есть при очень низкой скорости останавливается и даже при увеличении скорости так и висит.
Офлайн
Судя вот по этому: “Временный сбой в разрешении имен” - вы либо имя адреса неправильно задаете, либо у вас с DNS какая-то проблема.
Если вы адреса именно в таком (“/ru/48624857”) виде задаете, то проблема с разрешением имен будет обязательно.
Отредактировано Yuri197 (Апрель 2, 2019 12:35:31)
Офлайн
0
Вот еще ошибки:
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)
Офлайн
Соединение ваш скрипт не может наладить. В этом смысл ошибок.
Офлайн
0
Можно ли сделать так чтобы скрипт сделал некую паузу в работе при отсутствии соединения или проверил есть ли соединение к интернету и в случае присутствия продолжить работу. Или может какие-то другие идеи есть, а то я уже запутался.
Офлайн