谁能帮助我正确选择此表格?
尝试抓取谷歌,我得到错误:mechanize._mechanize.FormNotFoundError:没有与名称“ q”匹配的形式
不寻常,因为我看过其他一些使用它的教程,并且:ps我不打算向Google SLAM发送请求,只是希望使用自动选择器来不时查找学术引文pdf。
<f GET http://www.google.com.tw/search application/x-www-form-urlencoded <HiddenControl(ie=Big5) (readonly)> <HiddenControl(hl=zh-TW) (readonly)> <HiddenControl(source=hp) (readonly)> <TextControl(q=)> <SubmitControl(btnG=Google ?j?M) (readonly)> <SubmitControl(btnI=?n???) (readonly)> <HiddenControl(gbv=1) (readonly)>> >>> quit() import os, subprocess import re import mechanize from bs4 import BeautifulSoup #prepare mechanize br = mechanize.Browser() br.set_handle_robots(False) br.set_handle_equiv(False) br.addheaders = [('User-agent', 'Mozilla/5.0')] br.open('http://www.google.com/') br.select_form('q') citation = ' www.stackoverflow.com '.strip() #citation = GOOGLE_BASE + Citation print citation br.open('http://www.google.com/') br.select_form('q') br.form['q'] = citation br.submit() data = br.read() soup = BeautifulSoup(data) print soup
您正在尝试选择一个名为的表单q,该表单不存在。似乎该表单已被命名f。(但是,我无法在浏览器中验证- 即使禁用了Javascript,我也只能看到一个不同的名称。)
q
f
一个简单的Google搜索可以像这样完成:
import os, subprocess import re import mechanize from bs4 import BeautifulSoup #prepare mechanize br = mechanize.Browser() br.set_handle_robots(False) br.set_handle_equiv(False) br.addheaders = [('User-agent', 'Mozilla/5.0')] br.open('http://www.google.com/') # do the query br.select_form(name='f') # Note: select the form named 'f' here br.form['q'] = 'here goes your query' # query data = br.submit() # parse and output soup = BeautifulSoup(data.read()) print soup
这应该给你的想法。
更新:如何找到正确的形式“选择器”
要打印可用表格的名称,您可以执行以下操作:
for form in br.forms(): print form.name
使用交互式控制台时,这非常方便。
您不一定要使用表格的名称,但是您可能会给出其他提示以选择正确的表格。例如,在某些页面上,表单根本没有名称。然后,您仍然可以根据表格的编号进行选择,例如br.select_form(nr=1)页面上的第二个表格。请查看help(br.select_form)详细信息。此外,list(br.forms())还会为您提供所有表格的列表,您可以进一步检查这些表格。
br.select_form(nr=1)
help(br.select_form)
list(br.forms())
另一种选择是在通常的浏览器中手动检查页面。