尝试抓取返回大量搜索结果的网站。问题是导航页面的唯一方法是通过附加到每个链接的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'>
有关如何解决此问题的任何想法?我真的以此为耻。
答案 0 :(得分:0)
所以,事实证明,与scrapy的任何javascript交互通常是一场失败的战斗。结束使用casperjs来实际执行这些请求并且效果很好。我听说Selenium也适合这样的事情,但我还没有尝试过Selenium。
我想我会给你一个更新。