2017-05-31 11 views
0

のフォーム名を取得、私はビングのフォーム名を取得し、検索を実行しようとしている:は、Pythonの2.7.35とMechanizeのを使用しビング

import mechanize 

AGENT = mechanize.Browser() 
BING = "http://www.bing.com" 

def bing_search(query): 
    AGENT.open(BING) 
    for form in AGENT.forms(): 
     print form 
    AGENT.select_form(name="q") 
    AGENT.form["q"] = query 
    data = AGENT.submit() 

これの出力は次のようになります。

C:\Users\z-perkins-thomas\Documents\bin\python\some-type-of-scanner>python querymine.py 
<GET http://www.bing.com/search application/x-www-form-urlencoded 
    <TextControl(q=)> 
    <SubmitControl(go=) (readonly)> 
    <HiddenControl(qs=ds) (readonly)> 
    <HiddenControl(form=QBLH) (readonly)>> 
Traceback (most recent call last): 
    File "querymine.py", line 4, in <module> 
    bing_search("test") 
    File "C:\Users\z-perkins-thomas\Documents\bin\python\some-type-of-scanner\bin\harvest\search_engines\__init__.py", line 
55, in bing_search 
    AGENT.select_form(name="q") 
    File "C:\Python27\lib\site-packages\mechanize\_mechanize.py", line 524, in select_form 
    raise FormNotFoundError("no form matching "+description) 
mechanize._mechanize.FormNotFoundError: no form matching name 'q' 

C:\Users\z-perkins-thomas\Documents\bin\python\some-type-of-scanner> 

フォーム名が一覧表示されていますが、リストされたフォーム名のいずれかを試しても問題が解決しない場合は、ここで何が間違っていますか?

+0

あなたはこのようにそれを使用する必要がありますそこに名前 "q"のフォームがありません...その名前の入力フィールドがありますので、その名前を選択することができます。 – errata

+0

@errata BING定数は、http:// www.bing.comに向かって指しています – user8049647

+0

確かに。しかし、あなたの最初の行は、あなたが 'GET http:// www.bing.com/search'を要求してしまうことを示しています。とにかく、「bing.com」上でさえ、名前「q」を持つ書式はありません。 – errata

答えて

0

bing.comに存在しない名前qのフォームを選択しようとしているようです。ただし、その名前の入力フィールドがあります。あなたは(http://www.bing.com/search)をロードしようとしているページのソースコードをチェックアウトする場合があることを自分が表示されます

def bing_search(query): 
    AGENT.open('http://www.bing.com/') 
    AGENT.select_form(nr=0) 
    AGENT.form['q'] = query 
    data = AGENT.submit() 
+0

'nr = 0'がどこから来ているのか分かりませんが、これは動作します – user8049647

+0

' nr = 0'はページの最初のフォームを選択します。代わりに 'id'で選択できます(' form.attrs ['id'] === 'some_form_id'')。 – errata

関連する問題