在asp.net站点中处理会话cookie或302的Scrapy

时间:2014-06-17 13:50:57

标签: python python-2.7 web-scraping scrapy

我正在尝试抓取用asp.net编写的Web应用程序。

我正在尝试执行搜索并抓取搜索结果页面。可以说搜索页面是http://search.site.com/search/search.aspx

现在我的抓取工具非常简单

class SitesearchSpider(Spider):
    name = 'sitecrawl'
    allowed_domains = ['search.site.org']
    start_urls = [
        "http://search.site.org/Search/Search.aspx"
    ]

def parse(self, response):
        self.log("Calling Parse Method", level=log.INFO)
        response = response.replace(body=response.body.replace("disabled",""))
        return [FormRequest(
            url="http://search.site.org/Search/Search.aspx",
            formdata={'ctl00$phContent$ucUnifiedSearch$txtIndvl': '2441386'},            
            callback=self.after_search)]

    def after_search(self, response):
        self.log("In after search", level=log.INFO)
        if "To begin your search" in response.body:
            self.log("unable to get result")            
        else:
            self.log(response.body)

但是无论同一页面(search.aspx)只返回到after_search回调而不是预期的searchresults.aspx并带有结果

这就是浏览器中似乎发生的事情

  1. 在其中一个字段中输入搜索字词
  2. 点击搜索按钮
  3. 在表单提交到同一页面(search.aspx)后,我看到它返回302重定向到搜索结果页面
  4. 然后显示搜索结果页面
  5. 我看到这里使用的是asp.net会话cookie,因为一旦进行搜索,我可以将搜索结果页面的URL视为 http://search.site.com/search/searchresults.aspx?key=searchkey&anothersearchparam=12并打开任何标签并直接加载结果
  6. 如果我打开一个新会话并粘贴该网址,那么我将被重定向到搜索页面
  7. 现在我浏览了文档,我不确定是否必须处理302或aspnet会话cookie。任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:2)

  1. 你不必处理302,scrapy就是itselr。
  2. 您可以调试cookie,在设置
  3. 上设置DEBUG_COOKIE = 1
  4. 当你从浏览器中搜索时,你是否检查过post或get方法发送的其他参数,你必须将它们全部传递给表格数据。
  5. 我建议您使用fron _response,例如:

    return [FormRequest.from_response(
            response,
            formdata={'ctl00$phContent$ucUnifiedSearch$txtIndvl': '2441386'},