Запрос URL-адреса Python на сайты Google медленный

Я пытаюсь сделать запросы urllib к http://google.com в Python 3 (я переписал его в 2.7, используя urllib2 тоже такая же проблема) Ниже приведен мой код:

import urllib.request
from urllib.request import urlopen
import http.cookiejar

cj = http.cookiejar.CookieJar()
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))
opener.addheaders = [('User-agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36')]

def makeRequest():
    search = 'http://google.com'

    print('About to search...')
    response = opener.open(search).read()
    print('Done')

makeRequest()

Когда я запускаю этот код, он выполняется примерно за 14 секунд:

real    0m14.386s
user    0m0.087s
sys     0m0.027s

Это похоже на любой сайт Google (Gmail, Google Play и т. д.). Когда я изменяю переменную поиска на другой сайт, такой как Stackoverflow или Twitter, он выполняется менее чем за полсекунды:

real    0m0.277s
user    0m0.085s
sys     0m0.017s

Кто-нибудь знает, что может быть причиной медленного ответа от Google?


person user139260    schedule 28.01.2015    source источник
comment
Я запустил твой код. Это заняло 0,451 секунды.   -  person mchant    schedule 28.01.2015
comment
@mchant: время может зависеть и от скорости вашего интернета. Так что это может быть diff от его.   -  person Gunjan    schedule 28.01.2015
comment
@Gunjan Я использую Ethernet и получаю 112 Мбит / с / 98 Мбит / с согласно testmy.net, поэтому я не думаю, что моя скорость интернета является проблемой. Google также мгновенно загружается в браузере, поэтому я подумал, что это может быть проблема с Python.   -  person user139260    schedule 28.01.2015
comment
@ user139260: я имел в виду разницу во времени между mchant и временем выполнения вашего кода.   -  person Gunjan    schedule 29.01.2015
comment
Это действительно странно. У меня похожая проблема. cURL и др. действительно быстро загружают рассматриваемый URL-адрес. Python (3) urllib.request занимает вечность.   -  person harm    schedule 02.11.2015
comment
Я сталкиваюсь с этой же проблемой. Я написал бот irc на Python, который извлекает информацию об URL-адресах, и он работает быстро для всего, кроме сайтов Google.   -  person Dolores    schedule 15.03.2016


Ответы (1)


Во-первых, вы можете использовать ping или traceroute для перехода на google.com и другие сайты, чтобы сравнить время задержки и выяснить, не связана ли проблема с DNS.

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

Я думаю, что это может быть проблема с DNS, но я не могу в этом убедиться.

person lqhcpsgbl    schedule 28.01.2015
comment
Как ни странно, я получаю ответы 8 мс от google.com, но при пинге twitter.com - более 60. Трассировки к Gmail завершаются за ‹0,2 секунды, но мой код по-прежнему занимает 12 секунд в python. Я не пробовал wireshark, но я запущу его позже, когда у меня будет больше времени. Изменить: я также пытался изменить свой DNS на DNS Google, но проблема все еще сохраняется. - person user139260; 28.01.2015