我的目的是使用Mechanize向网站提交搜索查询,并使用BeautifulSoup分析结果 . 这将用于同一网站,因此表格名称等可以硬编码 . 我的初始查询出现问题,如下所示:
import mechanize
import urllib2
#from bs4 import BeautifulSoup
def inspect_page(url):
br = mechanize.Browser(factory=mechanize.RobustFactory())
br.set_handle_robots(False)
br.addheaders = [('User-agent',
'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6')]
br.set_handle_redirect(mechanize.HTTPRedirectHandler)
try:
br.open(url)
except mechanize.HTTPError, e:
print "HTTP Error", e.code,
except urllib2.URLError as e:
print "URL Error", e.reason,
return
for form in br.forms():
print form
br.select_form(name="dataform")
br.form['pcode'] = 'WV14 8EW'
br.form['premise'] = '66'
response = br.submit()
print response.read()
#soup = BeautifulSoup(response.read())
inspect_page('http://www.fensa.co.uk/asp/certificate.asp')
这没有重定向到结果页面, print response.read()
显示了我提交查询的页面的HTML,所以我假设我的代码中出错了 . 但是,当我测试另一个站点( inspect_page('https://publicaccess.glasgow.gov.uk/online-applications/search.do?action=simple')
)并更改表单以匹配网站上的表单时:
`br.select_form(name="searchCriteriaForm")
br.form['searchCriteria.simpleSearchString'] = 'Queen Elizabeth Gardens'
response = br.submit()
print response.read()`
我按照我的预期被重定向 . 调用 br.submit()
时是否有任何可以阻止页面重定向的内容?我已经检查过该网站没有GZipped .
2 回答
一个限制是
mechanize
不了解JavaScript . 在脚本中提交站点上的搜索表单会触发JavaScript函数,该函数验证输入并在实际提交表单值之前更改<form>
的action
属性 .以下是表单的HTML部分:
这是在该HTML文档开头附近定义的
validate_required()
函数:只有在通过JavaScript验证表单输入时,才会在页面上更改表单操作,因此我现在将字段直接提交到该URL .
谢谢@BlackJack的提示