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 に答える