gpt4 book ai didi

asp.net - 使用 Python Mechanize 对 aspx 进行屏幕截图 - Javascript 表单提交

转载 作者:太空狗 更新时间:2023-10-29 22:20:12 25 4
gpt4 key购买 nike

我正在尝试在 scraperwiki ( http://ratings.food.gov.uk/QuickSearch.aspx?q=po30 ) 上使用 Mechanize/Python 抓取英国食品评级机构数据 aspx 搜索结果页面(例如 http://scraperwiki.com/scrapers/food_standards_agency/ ),但想出了一个尝试跟随具有以下形式的“下一页”链接时出现问题:

<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 为空?我在其他爬虫上找到的所有 cribs 都显示了对 __EVENTTARGET 的操纵作为处理下一页的方式。

确实,我不确定要抓取的页面如何加载下一页?无论我向刮板扔什么,它都只能加载第一个结果页面。 (即使能够更改每页的结果数也会很有用,但我也不知道该怎么做!)

那么 - 关于如何为 N>0 抓取第 1+N 个结果页面有什么想法吗?

最佳答案

Mechanize 不处理 javascript,但对于这种特殊情况不需要它。

首先我们用mechanize打开结果页面

url = 'http://ratings.food.gov.uk/QuickSearch.aspx?q=po30'
br = mechanize.Browser()
br.set_handle_robots(False)
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')]
br.open(url)
response = br.response().read()

然后我们选择aspnet形式:

br.select_form(nr=0) #Select the first (and only) form - it has no name so we reference by number

表单有 5 个提交按钮 - 我们想要提交将我们带到下一个结果页面的按钮:

response = br.submit(name='ctl00$ContentPlaceHolder1$uxResults$uxNext').read()  #"Press" the next submit button

表单中的其他提交按钮是:

ctl00$uxLanguageSwitch # Switch language to Welsh
ctl00$ContentPlaceHolder1$uxResults$Button1 # Search submit button
ctl00$ContentPlaceHolder1$uxResults$uxFirst # First result page
ctl00$ContentPlaceHolder1$uxResults$uxPrevious # Previous result page
ctl00$ContentPlaceHolder1$uxResults$uxLast # Last result page

在 mechanize 中我们可以像这样获取表单信息:

for form in br.forms():
print form

关于asp.net - 使用 Python Mechanize 对 aspx 进行屏幕截图 - Javascript 表单提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6116023/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com