Ошибка тайм-аута python urllib.request на ресурсе, к которому мой браузер может получить доступ - PullRequest
0 голосов
/ 11 ноября 2018

Перестал работать скрипт, который я использую для отслеживания изменений биржевых сводок с сайта nasdaq.com.

URL-адрес по-прежнему может быть доступен для моих браузеров, но при попытке доступа к нему с помощью Python 3 urllib.request выдается ошибка TimeoutError: [WinError 10060].

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

import urllib.request
import traceback

req_headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36'
    }

urls=['http://msn.com',
      'https://google.com',
      'https://www.nasdaq.com/markets/stocks/symbol-change-history.aspx?sortby=EFFECTIVE&page=1',
      'https://yahoo.com']
for url in urls:
    try:
        req = urllib.request.Request(
            url,
            data=None,
            headers=req_headers
        )
        print('trying %s'%url)
        pagetext=urllib.request.urlopen(req).read()
        print ('Success',len(pagetext))
    except:
        traceback.print_exc()

Выводы следующие:

trying http://msn.com
Success 446035
trying https://google.com
Sucess 234077
trying https://www.nasdaq.com/markets/stocks/symbol-change-history.aspx?sortby=EFFECTIVE&page=1
Traceback (most recent call last):
  ...
TimeoutError: [WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond
trying https://yahoo.com
Success 642758

Что здесь не так?

...