Python urllib2.open Сброс соединения из-за ошибки узла - PullRequest
3 голосов
/ 11 сентября 2011

Я пытаюсь почистить страницу, используя python

Проблема в том, что я получаю сообщение об ошибке Errno54 Connection by peer.

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

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 на этой странице - в чем проблема?

Ответы [ 2 ]

2 голосов
/ 11 сентября 2011
$> 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 или где-либо еще. Если это работает в вашем браузере, то должно быть что-то еще, например, куки или аутентификация или что-то подобное. Или, возможно, сервер неисправен или они изменили свою конфигурацию.

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

Редактировать: В конце концов, это были куки:

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()

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

0 голосов
/ 03 ноября 2015

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

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

Новый;

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

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

...