我试图在scraperwiki(http://scraperwiki.com/scrapers/food_standards_agency/)上使用Mechanize/Python来刮取英国食品评级机构的数据seach results页面(例如http://ratings.food.gov.uk/QuickSearch.aspx?q=po30),但在尝试跟踪具有以下格式的“下一页”链接时遇到了一个问题:
<input type="submit" name="ctl00$ContentPlaceHolder1$uxResults$uxNext" value="Next >" id="ctl00_ContentPlaceHolder1_uxResults_uxNext" title="Next >" />
表单处理程序如下所示:
<form method="post" action="QuickSearch.aspx?q=po30" onsubmit="javascript:return WebForm_OnSubmit();" onkeypress="javascript:return WebForm_FireDefaultButton(event, 'ctl00_ContentPlaceHolder1_buttonSearch')" id="aspnetForm">
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__LASTFOCUS" id="__LASTFOCUS" value="" />
当我手动单击“下一个链接”时,HTTP跟踪会将EVENTTARGET显示为空?我在其他刮板上找到的所有小床都显示了对EVENTTARGET的操作,作为处理下一页的方式。
事实上,我不确定我想刮的那一页到底是如何载入下一页的?无论我向scraper抛出什么,它都只能加载第一个结果页面。(即使能够更改每页的结果数也很有用,但我也看不到如何做到这一点!)
那么-有什么办法可以为N>;0抓取第1+N个结果页吗?
Mechanize不处理javascript,但对于这种特殊情况,它是不需要的。
首先我们用mechanize打开结果页
然后我们选择aspnet表单:
表单有5个提交按钮-我们要提交一个按钮,将我们带到下一个结果页:
表单中的其他提交按钮包括:
在mechanize中,我们可以获得如下表单信息:
Mechanize不处理JavaScript。
但是,有很多方法可以处理这个问题,包括QtWebKit、python-spidermonkey、HtmlUnit(使用Jython)或SeleniumRC。
以下是硒的使用方法:
另请参见这些相关的SO问题:
相关问题 更多 >
编程相关推荐