如何从html表中获取价值?

时间:2012-11-08 19:59:31

标签: python web-scraping

我正在尝试从以下网站获取信息: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 =“molecularB.links”。我怎样才能获得这个价值?

1 个答案:

答案 0 :(得分: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)。