首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mechanize._mechanize.FormNotFoundError:没有与名称'q‘匹配的表单

mechanize._mechanize.FormNotFoundError:没有与名称'q‘匹配的表单
EN

Stack Overflow用户
提问于 2013-04-16 00:23:02
回答 1查看 7.5K关注 0票数 1

有没有人能帮我把这个表单选择正确?

试图抓取谷歌,我得到了错误: mechanize._mechanize.FormNotFoundError:没有形式匹配名称'q‘

不同寻常,因为我已经看到了其他几个使用它的教程,以及: p.s.我不打算用请求来猛烈抨击谷歌,只是希望使用一个自动选择器来不时地从寻找学术引用pdf的工作中解脱出来。

代码语言:javascript
复制
<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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-16 01:08:40

您正在尝试选择一个名为q的表单,但该表单不存在。该表单似乎被命名为f。(然而,我无法在我的浏览器中验证-即使禁用了Javascript,我也只能看到一个不同的名称。)

一个简单的Google搜索可以像这样完成:

代码语言:javascript
复制
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

这应该会给你一个想法。

选择器更新:如何找到正确的表单‘

要打印可用表单的名称,可以执行以下操作:

代码语言:javascript
复制
for form in br.forms():
    print form.name

当您使用交互式控制台时,这将非常方便。

您不一定要使用表单的名称,但您可以给出其他提示来选择正确的表单。例如,在某些页面上,表单根本没有名称。然后,您仍然可以根据表单编号进行选择,例如页面上第二个表单的br.select_form(nr=1)。详情请参考help(br.select_form)。此外,list(br.forms())将为您提供可进一步检查的所有表单的列表。

另一种选择是在您常用的浏览器中手动检查页面。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16020117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档