Сброс соединения Python urllib2.open из-за ошибки однорангового узла

Я пытаюсь очистить страницу с помощью python

Проблема в том, что я продолжаю сбрасывать соединение Errno54 по пиру.

Ошибка возникает, когда я запускаю этот код -

urllib2.urlopen("http://www.bkstr.com/webapp/wcs/stores/servlet/CourseMaterialsResultsView?catalogId=10001&categoryId=9604&storeId=10161&langId=-1&programId=562&termId=100020629&divisionDisplayName=Stanford&departmentDisplayName=ILAC&courseDisplayName=126&sectionDisplayName=01&demoKey=d&purpose=browse")

это происходит для всех URL-адресов на этой странице - в чем проблема?


person praks5432    schedule 11.09.2011    source источник
comment
Вы можете открыть ссылку в браузере? Если нет, то неправильно ожидать, что команда Python откроет его.   -  person amit    schedule 11.09.2011


Ответы (2)


$> telnet www.bkstr.com 80
Trying 64.37.224.85...
Connected to www.bkstr.com.
Escape character is '^]'.
GET /webapp/wcs/stores/servlet/CourseMaterialsResultsView?catalogId=10001&categoryId=9604&storeId=10161&langId=-1&programId=562&termId=100020629&divisionDisplayName=Stanford&departmentDisplayName=ILAC&courseDisplayName=126&sectionDisplayName=01&demoKey=d&purpose=browse HTTP/1.0

Connection closed by foreign host.

У вас не будет никакой радости при извлечении этого URL-адреса из python или откуда-либо еще. Если это работает в вашем браузере, то должно быть что-то еще, например, файлы cookie, аутентификация или что-то в этом роде. Или, возможно, сервер сломался или они изменили свою конфигурацию.

Попробуйте открыть его в браузере, в котором вы никогда раньше не заходили на этот сайт, чтобы проверить. Затем войдите в систему и попробуйте еще раз.

Редактировать: в конце концов, это были файлы cookie:

import cookielib, urllib2

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
#Need to set a cookie
opener.open("http://www.bkstr.com/")
#Now open the page we want
data = opener.open("http://www.bkstr.com/webapp/wcs/stores/servlet/CourseMaterialsResultsView?catalogId=10001&categoryId=9604&storeId=10161&langId=-1&programId=562&termId=100020629&divisionDisplayName=Stanford&departmentDisplayName=ILAC&courseDisplayName=126&sectionDisplayName=01&demoKey=d&purpose=browse").read()

Вывод выглядит нормально, но вам нужно проверить, делает ли он то, что вы хотите :)

person ed.    schedule 11.09.2011
comment
Кажется, не просто запросом GET. Что вы пытаетесь найти на сайте? (Я посмотрю, есть ли для вас другой способ). - person ed.; 11.09.2011
comment
почему-то не могу зайти на страницу через сафари - person praks5432; 11.09.2011
comment
ну, я пытаюсь получить название класса и учебники для каждого класса - поиск в книжном магазине Стэнфорда, затем перейдите к учебникам и материалам курса, я хочу найти информацию для всех классов, перечисленных в Стэнфорде (в одном из их выпадающих списков) - person praks5432; 11.09.2011
comment
извините - вышеизложенное было не очень понятно - с кодом, который я разместил, я пытаюсь получить имя класса и название учебника (с автором) на странице вставленного URL-адреса - person praks5432; 11.09.2011
comment
подождите- так в чем была проблема? - person praks5432; 11.09.2011
comment
Когда вы заходите на первую страницу (bkstr.com/), она устанавливает файл cookie (предположительно с информацией об отслеживании, но вы можете проверить, опросив файл cookie). Кажется, что он ломается (как в случае взрыва), если вы получаете доступ к последующим страницам без этого файла cookie. Итак, мой код обращается к первой странице и получает файл cookie, а затем обращается ко второй странице с установленным файлом cookie. - person ed.; 11.09.2011
comment
Если это сработает для вас, вы можете закрыть свой другой вопрос как дубликат. - person ed.; 11.09.2011

Я столкнулся с подобной ошибкой совсем недавно. Соединение обрывалось и перезагружалось. Я пробовал cookiejars, расширенные задержки и разные заголовки/юзерагенты, но ничего не сработало. В конце концов исправить было просто. Я перешел от urllib2 к запросам. Старый;

import urllib2
opener = urllib2.build_opener()
buf = opener.open(url).read()

Новый;

import requests
buf = requests.get(url).text

После этого все работало отлично.

person croc    schedule 03.11.2015