0

したがって、アドレスに直接アクセスすると、リダイレクトされ、必要なページが読み込まれますが、以下のコードを使用してそれを実行しようとすると、エラー コード 500 が返されます。

import urllib, urllib2

import sys

if len(sys.argv) > 1:
    molecule = sys.argv[1]
else:
    print "Error: no molecule requested"
    sys.exit()

# Created handler
redirectionHandler = urllib2.HTTPRedirectHandler() 

# 2 apply the handler to an opener
opener = urllib2.build_opener(redirectionHandler)

# 3. Install the openers
urllib2.install_opener(opener)


request = urllib2.Request("http://cccbdb.nist.gov/getform.asp", data=urllib.urlencode({'formula':molecule, "submit1": "Submit"}))
response = urllib2.urlopen(request)

のようなことをするだけでプログラムを使用するpython program.py ch4と、エラーがスローされます。ただし、リンクにアクセスするだけで問題ありません。

たとえばhttp://cccbdb.nist.gov/getform.asp?formula=ch4

私がやりたいことは、このページのフォームに記入してから、結果ページをロードすることです。そのページにはこれがあります:

<FORM action="getform.asp" method=POST id=form1 >
<INPUT type="text" id=text1 name=formula
VALUE='CH4'
></P>
<INPUT type="submit" value="Submit" id=submit1 name=submit1>
</FORM>

投稿データをそのページに直接送信すると、まさに必要なものが得られます。urllib2 を使用して実行すると、エラー 500 が発生します。リダイレクトを設定せずに単純に実行しようとしました。また、エラーをキャッチして、コンテンツを取得している間も無視しようとしました (別の回答に従って)。

$ wget http://cccbdb.nist.gov/getform.asp?formula=ch4どちらも機能しません。

このページのコンテンツを Python で取得するにはどうすればよいですか?

EDIT:私も試してみましたmechanizeが、同じエラーが発生しました。

import mechanize
import cookielib
from BeautifulSoup import BeautifulSoup
import html2text

import sys


if len(sys.argv) > 1:
    molecule = sys.argv[1]
else:
    print "Error: no molecule requested"
    sys.exit()


# Browser
br = mechanize.Browser()

# Cookie Jar
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)

# Browser options
br.set_handle_equiv(True)
#br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)

# Follows refresh 0 but not hangs on refresh > 0
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)

# User-Agent (this is cheating, ok?)
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]

# The site we will navigate into, handling it's session
br.open('http://cccbdb.nist.gov/geom1.asp')

# Select the first (index zero) form
br.select_form(nr=0)

br.form["formula"] = molecule

br.submit()
4

0 に答える 0