我正在尝试使用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§ionDisplayName=01&demoKey=d&purpose=browse")
这个页面上的所有url都会发生这种情况-这是什么问题?
$> 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§ionDisplayName=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§ionDisplayName=01&demoKey=d&purpose=browse").read()
输出看起来不错,但您必须检查它是否符合您的要求:)
我最近遇到了一个类似的错误。连接正在断开并被重置。我尝试了cookie - jars、延长的延迟和不同的报头/用户代理,但都不起作用。最后,解决办法很简单。我从urllib2到请求。旧的;
import urllib2
opener = urllib2.build_opener()
buf = opener.open(url).read()
新;
import requests
buf = requests.get(url).text
之后一切都很顺利。