我在Python中编写了一个用于抓取在服务器站点上使用ASP.NET的网站的应用程序。
这就是我一直在做的事情(只是从浏览器中复制了HTTP标题和正文,因为我看不到其他方法):
(它工作了!前段时间..但现在它以“连接超时”中止。)
def SBPageLoader(keyWord):
headers = {'Host': 'www.sberbank-ast.ru' ,
'Connection': 'keep-alive' ,
'Content-Length': '46203',
'Cache-Control': 'max-age=0' ,
'Origin': 'http://www.sberbank-ast.ru' ,
'User-Agent': 'Mozilla/5.0 (Linux i686)' ,
'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8' ,
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' ,
'Referer': 'http://www.sberbank-ast.ru/purchaseList.aspx' ,
'Accept-Encoding': 'gzip,deflate,sdch' ,
'Accept-Language': 'ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4' ,
'Accept-Charset': 'utf-8' ,
'Cookie': 'ASP.NET_SessionId=d4ki4j55hsq3km45b4qbrgjs; __utma=99173852.1461595200.1340564818.1341685237.1341758931.11; __utmb=99173852.4.9.1341758978151; __utmc=99173852; __utmz=99173852.1340564818.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)'
}
#....( here is lots of data with undefined meaning - what is it? )......
data = '_EVENTTARGET=&__EVENTARGUMENT=........&__VIEWSTATE=%2FwEPDwUJMzUwNDEzMjgxD2QWAmYPZBYCZg9kFgICAw9kFgQCAQ9kFgICAg8PFgIeB1Zpc2libGVoZGQCBQ9kFgICAQ9kFgYCAQ9kFgICAQ9kFgwCFQ8PZBYGHgdjb250ZW50BRRsZWFmOnB1YmxpY2RhdGVzdGFydB4JbWF4bGVuZ3RoBQIxMB4FY2xhc3MFCCBkYXRlUlVTZAIXDw9kFgYfAQUSbGVhZjpwdWJsaWNkYXRlpurchID400=887031'
data = data.replace("Toyota", keyWord) # haha - cattlecode
log("Strat loading http://www.sberbank-ast.ru/purchaseList.aspx ...")
req = urllib2.Request('http://www.sberbank-ast.ru/purchaseList.aspx', data, headers)
response = urllib2.urlopen(req)
page = response.read()
log(".. Loading is finished")
现在,即使我用旧的替换旧的身体和标题 - 同样的事情发生。
欢迎任何关于它有什么问题的想法。
答案 0 :(得分:1)
该网站的会话可能已过期。如果您查看cookie,您可以看到它正在传递会话标识符:
'Cookie':' ASP.NET_SessionId = d4ki4j55hsq3km45b4qbrgjs ; __utma = 99173852.1461595200.1340564818.1341685237.1341758931.11; __utmb = 99173852.4.9.1341758978151; __utmc = 99173852; __utmz = 99173852.1340564818.1.1.utmcsr =(直接)| utmccn =(直接)| utmcmd =(无)'
(顺便说一句,其他Cookie可以忽略,它们实际上是Google Analytics Cookie,只在JavaScript中用作客户端。)
大多数服务器的会话如果在一段时间内未使用则会过期。如果会话存储在服务器的内存中,那么如果重新启动服务器,它们将会丢失。
您可能需要返回浏览器中的网站并获取新的会话标识符,或将该部分构建到您的抓取工具中。
如果要将其构建到爬虫中,则需要查看存储从服务器返回的cookie。