我正在尝试从以下网站获取信息: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"> Links 'B'</label>
</td>
</tr>
我不熟悉html,但我猜Q96300来自value =“molecularB.links”。我怎样才能获得这个价值?
答案 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
)。