Python urllib2.open通过对等错误重置连接

时间:2011-09-11 10:02:52

标签: python connection screen-scraping reset

我正在尝试使用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")
对于这个问题上的所有网址都会发生这种情况 - 这是什么问题?

2 个答案:

答案 0 :(得分: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.

您不会从python或其他任何地方获取该URL。如果它在您的浏览器中有效,则必须有其他内容,例如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()

输出看起来不错,但您必须检查它是否符合您的要求:)

答案 1 :(得分:0)

我最近遇到了类似的错误。连接正在退出并被重置。我尝试过cookiejars,延迟延迟和不同的标题/用户,但没有任何效果。最后修复很简单。我从urllib2转到请求。旧的;

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

新的;

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

之后一切都很完美。