1

薬物情報を問い合わせるためのフォームを送信するために書かれた機械化された Python スクリプトがあります。実行するとエラーメッセージは表示されませんが、応答を見ると、ブラウザのビューソースページに表示されるものではありません。提出後にURLを確認しました:

ここに私が得たものがあります:

http://www.accessdata.fda.gov/scripts/cder/drugsatfda/index.cfm

ここに私が取得するはずのアドレスがあります:

http://www.accessdata.fda.gov/scripts/cder/drugsatfda/index.cfm?fuseaction=Search.DrugDetails

2 番目の URL にクエリ テキストが含まれていませんが、これは Cookie が必要ということですか? もしそうなら、どのように?

これは私のコードスニペットです:

br = mechanize.Browser()
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
....
br.addheaders = [('User-agent', 'Mozilla/6.0 (X11; U; i686; en-US; rv:1.9.0.1) Gecko/2008071615 OS X 10.2 Firefox/3.0.1')]

fda_url2 = 'http://www.accessdata.fda.gov/scripts/cder/drugsatfda/index.cfm?fuseaction=Search.Addlsearch_drug_name'

print br.open(fda_url2).geturl()


for f in br.forms():
   print 'this is a form'
   print f

br.select_form('searchoptionB')
br.form['ApplNo'] = '018780'
html = br.submit(name = 'Search_Button')

print html.geturl()

印刷フォームの出力は次のとおりです。

<searchoptionB POST http://www.accessdata.fda.gov/scripts/cder/drugsatfda/index.cfm application/x-www-form-urlencoded
  <HiddenControl(fuseaction=Search.SearchAction) (readonly)>
  <HiddenControl(SearchType=AddlSearch) (readonly)>
  <HiddenControl(SearchOption=B) (readonly)>
  <TextControl(ApplNo=)>
  <SubmitControl(Search_Button=Submit) (readonly)>
  <SubmitControl(clearcriteria=Clear) (readonly)>>

長文すみません;p

4

1 に答える 1

0

UPDコメントについて。これが私のテストファイルです:

#!/usr/bin/env python
import mechanize
import cookielib

br = mechanize.Browser()
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
br.addheaders = [('User-agent', 'Mozilla/6.0 (X11; U; i686; en-US; rv:1.9.0.1) Gecko/2008071615 OS X 10.2 Firefox/3.0.1')]

fda_url2 = 'http://www.accessdata.fda.gov/scripts/cder/drugsatfda/index.cfm?fuseaction=Search.Addlsearch_drug_name'

print br.open(fda_url2).geturl()


for f in br.forms():
   print 'this is a form'
   print f

br.select_form('searchoptionB')
br.form['ApplNo'] = '018780'
html = br.submit()

print br.response().read()

そして、これは私がそれを実行したときに得られるものです:

$ ./test.py  | grep HUM
            <td valign="top" class="product_table" height="24"><a href="index.cfm?fuseaction=Search.Overview&DrugName=HUMULIN%20R">
 HUMULIN R
 INSULIN RECOMBINANT HUMAN
            <td valign="top" class="product_table" height="24"><a href="index.cfm?fuseaction=Search.Overview&DrugName=HUMULIN%20R%20PEN">
 HUMULIN R PEN
 INSULIN RECOMBINANT HUMAN

何らかの方法でスクリプトを変更したり、別のページをクエリしたりしていませんか?


このフォームをブラウザで送信しようとしましたか?

この URLに移動し、「オプション B」に「018780」を入力して「送信」をクリックすると、ブラウザは実際にhttp://www.accessdata.fda.gov/scripts/cder/drugsatfda/index.cfmにリダイレクトします。 、検索結果が含まれています。

これをコード スニペットの最後に追加してみてください。

print br.response().read()

これにより、ページの HTML が出力され、期待どおりに検索結果が含まれます。

2 番目の URL にクエリ テキストが含まれていませんが、これは Cookie が必要ということですか? もしそうなら、どのように?

このフォームは POST 経由で送信されます。この場合、すべてのパラメーターがリクエスト本文に埋め込まれます (RFC 2616)。

于 2013-01-27T13:46:10.357 に答える