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 中获取此页面的内容?

编辑:我也尝试过使用它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