0

我正在尝试从以下站点获取信息:http : //www.ebi.ac.uk/intact/,然后搜索 Q9SUE8。使用 urllib 我得到页面的 html:

import urllib2
import urllib
url = 'http://www.ebi.ac.uk/intact/'
values = {'queryTxt':'Q9SUE8'}

data = urllib.urlencode(values)
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
the_page = response.read()
print the_page

从浏览器搜索 Q9SUE8 时,结果如下表:

#    Molecule 'A'    Links 'A'    Molecule 'B'    Links 'B'    some more columns
--------------------------------------------------------------------------------
1    T13J8.10        Q9SUE8       GRF7            Q96300
                     EBI-4459886

我想提取值 Q96300。我可以在 html 中找到列标题:

<tr>
  <td>
    <input id="mainPanels:columnSelection:3" type="checkbox" name="mainPanels:columnSelection" checked="checked" value="moleculeB.links" />
    <label for="mainPanels:columnSelection:3">&#160;Links 'B'</label>
  </td>
</tr>   

我对 html 不熟悉,但我猜 Q96300 来自 value="moleculeB.links"。我怎样才能得到那个值?

4

1 回答 1

0

我不确定您是否需要担心 javascript。很可能是会话/隐藏输入问题。

但以下代码有效:

import mechanize
import re

b = mechanize.Browser()

# Visit search page
url = 'http://www.ebi.ac.uk/intact'
resp = b.open(url)
page = resp.read()

# Fill out and submit form
b.select_form(name="intactForm")
b["queryTxt"] = 'Q9SUE8'
resp = b.submit()
page = resp.read()

# Parse Page
matches = re.findall('<td role="gridcell" class="cellTextCompound"><div class="ui-dt-c"><a href=".*?" target="_blank">(.*?)</a>', page)

linksB = matches[0]
print linksB

输出:

Q96300

请注意,它需要mechanize模块(可在 Fedora 存储库中以python-mechanize.

于 2012-11-08T21:16:57.810 回答