【问题标题】:Python urllib2.open Connection reset by peer errorPython urllib2.open 连接由对等错误重置
【发布时间】:2011-11-14 16:53:47
【问题描述】:

我正在尝试使用 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 都会发生这种情况 - 有什么问题?

【问题讨论】:

  • 你能在浏览器上打开链接吗?如果不是,那么期望 Python 命令打开它是不正确的。

标签: python connection screen-scraping reset


【解决方案1】:
$> 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 或身份验证等。或者,可能是服务器坏了,或者他们改变了配置。

尝试在您以前从未访问过该网站的浏览器中打开它以进行检查。然后登录并重试。

编辑:毕竟是 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()

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

【讨论】:

  • 似乎不是简单的 GET 请求。你想在网站上找到什么? (我会看看有没有其他方法适合你)。
  • 由于某种原因,我无法通过 safari 访问该页面
  • 好吧,我正在尝试获取每个班级的班级名称和教科书-搜索斯坦福书店,然后转到教科书和课程资料,我想查找斯坦福大学下列出的所有班级的信息(在其中之一他们的下拉框)
  • 对不起-上面不是很清楚-使用我发布的代码,我试图在粘贴的 url 页面上获取课程名称和教科书名称(带有作者)
  • 等等——那是什么问题?
【解决方案2】:

我最近遇到了类似的错误。连接断开并被重置。我尝试了 cookiejars、延长延迟和不同的标头/用户代理,但没有任何效果。最后修复很简单。我从 urllib2 转到请求。旧的;

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

新的;

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

之后一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-22
    • 2017-06-09
    • 1970-01-01
    • 2016-12-15
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    相关资源
    最近更新 更多