Asp.net 为什么ASPX站点的ScraperWiki只返回相同页面的搜索结果?

Asp.net 为什么ASPX站点的ScraperWiki只返回相同页面的搜索结果?,asp.net,python,web-scraping,mechanize,scraperwiki,Asp.net,Python,Web Scraping,Mechanize,Scraperwiki,我正在尝试使用ScraperWiki的工具刮取一个ASP支持的站点 我想从BBSmates.com网站上获取特定区号的BBS列表。该网站一次显示20个BBS搜索结果,所以我将不得不做表单提交,以便从一个结果页面移动到下一个页面 这帮助我开始了。我原以为下面的代码会占据BBS列表的最后一页,显示314区号(第79页) 然而,我得到的回应是第一页 url = 'http://bbsmates.com/browsebbs.aspx?BBSName=&AreaCode=314' br = mec

我正在尝试使用ScraperWiki的工具刮取一个ASP支持的站点

我想从BBSmates.com网站上获取特定区号的BBS列表。该网站一次显示20个BBS搜索结果,所以我将不得不做表单提交,以便从一个结果页面移动到下一个页面

这帮助我开始了。我原以为下面的代码会占据BBS列表的最后一页,显示314区号(第79页)

然而,我得到的回应是第一页

url = 'http://bbsmates.com/browsebbs.aspx?BBSName=&AreaCode=314'
br = mechanize.Browser()
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
response = br.open(url)

html = response.read()

br.select_form(name='aspnetForm')
br.form.set_all_readonly(False)
br['__EVENTTARGET'] = 'ctl00$ContentPlaceHolder1$GridView1'
br['__EVENTARGUMENT'] = 'Page$79'
print br.form
response2 = br.submit()

html2 = response2.read()
print html2
我上面引用的博客文章提到,在他们的例子中,SubmitControl有一个问题,所以我尝试禁用此表单上的两个SubmitControl

br.find_control("ctl00$cmdLogin").disabled = True
禁用cmdLogin生成HTTP错误500

br.find_control("ctl00$ContentPlaceHolder1$Button1").disabled = True
禁用ContentPlaceholder 1$Button1没有任何区别。提交完成了,但返回的页面仍然是搜索结果的第1页

值得注意的是,该网站不使用“Page$Next”


有人能帮我弄清楚我需要做什么才能让ASPX表单提交工作吗?

您需要发布页面给出的值(EVENTVALIDATION、VIEWSTATE等)

这段代码可以工作(请注意,它使用的是awesome库,而不是Mechanize)

当您到达结果末尾(resultpage 21)时,您必须再次选择VIEWSTATE和EVENTVALIDATION值(并且每20页进行一次)

请注意,您发布的一些值为空,还有一些包含值。完整列表如下所示:

'ctl00$txtUsername':'','ctl00$txtPassword':'','ctl00$ContentPlaceHolder1$txtBBSName':'','ctl00$ContentPlaceHolder1$txtSysop':'','ctl00$ContentPlaceHolder1$txtSoftware':'','ctl00$ContentPlaceHolder1$txtCity':'','ctl00$ContentPlaceHolder1$txtState':'','ctl00$ContentPlaceHolder1$txtCountry':'','ctl00$ContentPlaceHolder1$txtZipCode':'','ctl00$ContentPlaceHolder1$txtAreaCode':'314','ctl00$ContentPlaceHolder1$txtPrefix':'','ctl00$ContentPlaceHolder1$txtDescription':'','ctl00$ContentPlaceHolder1$Activity':'rdoBoth','ctl00$ContentPlaceHolder1$drpRPP':'20'
下面是关于Scraperwiki邮件列表中一个类似问题的讨论:

您可能会喜欢betterI(我还不知道Ruby),但我会搞乱您的代码。
'ctl00$txtUsername':'','ctl00$txtPassword':'','ctl00$ContentPlaceHolder1$txtBBSName':'','ctl00$ContentPlaceHolder1$txtSysop':'','ctl00$ContentPlaceHolder1$txtSoftware':'','ctl00$ContentPlaceHolder1$txtCity':'','ctl00$ContentPlaceHolder1$txtState':'','ctl00$ContentPlaceHolder1$txtCountry':'','ctl00$ContentPlaceHolder1$txtZipCode':'','ctl00$ContentPlaceHolder1$txtAreaCode':'314','ctl00$ContentPlaceHolder1$txtPrefix':'','ctl00$ContentPlaceHolder1$txtDescription':'','ctl00$ContentPlaceHolder1$Activity':'rdoBoth','ctl00$ContentPlaceHolder1$drpRPP':'20'