在服务器端使用ASP.NET从站点请求页面

时间:2012-10-23 18:11:35

标签: python http parsing

我在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")

现在,即使我用旧的替换旧的身体和标题 - 同样的事情发生。

欢迎任何关于它有什么问题的想法。

1 个答案:

答案 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。