代码之家  ›  专栏  ›  技术社区  ›  Slater Victoroff

POST响应在200、500和404之间不可预测地变化

  •  0
  • Slater Victoroff  · 技术社区  · 13 年前

    试图对一个返回大量搜索结果的网站进行一些抓取。问题是,导航页面的唯一方法是通过附加到每个链接的href参数的__doPostBack方法。

    这是我当前的代码:

    class guruSpider(BaseSpider):
        name = "guru"
        allowed_domains = ["guru.com"]
    
        def start_requests(self):
            baseUrl = "http://www.guru.com/emp/search.aspx?keyword=#&&sort=Earnings&page="
            endUrl = "&sort=Earnings"
            target = 'ctl00$empcnt$ucResults$pagination'
            hiddenValue = ";;AjaxControlToolkit, Version=3.5.60919.0, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e:en-US:311bfa99-1d92-41d7-aace-73bb01d14bf6:475a4ef5:effe2a26:1d3ed089:5546a2b:497ef277:a43b07eb:d2e10b12:37e2e5c9:751cdd15:dfad98a5:3cf12cf1"
            requests = []
            for i in range(1, 5):
                url = baseUrl + str(i)
                argument = str(i+1)
                data = {'__EVENTTARGET': target, '__EVENTARGUMENT': argument,
                        '__ASYNCPOST': 'true', 'ctl00_scriptMgr_HiddenField':hiddenValue}
                currentPage = FormRequest(url, formdata=data)
                requests.append(currentPage)
            return requests
    

    这是一个如下的示例响应:

    Crawled (404) <POST http://www.guru.com/emp/search.aspx?keyword=#&&sort=Earnings&page=3> (referer: None)
    Crawled (200) <POST http://www.guru.com/emp/search.aspx?keyword=#&&sort=Earnings&page=4> (referer: None)
    

    不过,在200消息上,实际返回如下:

    <HtmlXPathSelector xpath=None data=u'<html><body><p>179|error|500|The page is'>
    

    关于如何解决这个问题有什么想法吗?我真的对此束手无策。

    1 回复  |  直到 13 年前
        1
  •  0
  •   Slater Victoroff    13 年前

    因此,事实证明,与任何带有scratchy的javascript交互通常都是一场失败的战斗。最终使用casperjs来实际执行这些请求,效果非常好。我听说硒也适用于这样的事情,但我还没有真正尝试过硒。

    我只是想更新一下。

    推荐文章