2016-04-16 11 views
1

Ich bin ein relativ neues in Python. Ich brauche einen Rat für ein Bioinformatik-Projekt. Es geht darum, bestimmte Enzym-IDs in andere umzuwandeln.Extrahieren bestimmter Informationen aus abgerufenen HTML-Code mit Python

Was ich schon tat und was funktioniert, ist der HTML-Code für eine Liste von IDs aus der Datenbank Rhea holen:

53 url2 = "http://www.rhea-db.org/reaction?id=16952" 
54 f_xml2 = open("xml_tempfile2.txt", "w") 
55 
56 fetch2 = pycurl.Curl() 
57 fetch2.setopt(fetch2.URL, url2) 
58 fetch2.setopt(fetch.WRITEDATA, f_xml2) 
59 fetch2.perform() 
60 fetch2.close 

So ist der HTML-Code in eine temporäre txt-Datei gespeichert wird (ich weiß, vielleicht nicht die eleganteste Art Sachen zu machen, aber es funktioniert für mich;).

Nun, was ich bin interessiert in dem folgenden Teil aus dem HTML ist:

 <p> 
      <h3>Same participants, different directions</h3> 
      <div> 
       <a href="./reaction?id=16949"><span>RHEA:16949</span></a> 
       <span class="icon-question">myo-inositol + NAD(+) &lt;?&gt; scyllo-inosose + H(+) + NADH</span> 
      </div><div> 
       <a href="./reaction?id=16950"><span>RHEA:16950</span></a> 
       <span class="icon-arrow-right">myo-inositol + NAD(+) =&gt; scyllo-inosose + H(+) + NADH</span> 
      </div><div> 
       <a href="./reaction?id=16951"><span>RHEA:16951</span></a> 
       <span class="icon-arrow-left-1">scyllo-inosose + H(+) + NADH =&gt; myo-inositol + NAD(+)</span> 
      </div> 
     </p> 

ich durch den Code gehen will, bis die Klasse „icon-arrow-right“ erreicht ist (dieser Ausdruck ist insofern einzigartig das HTML). Dann möchte ich die Information von "RHEA: XXXXXX" aus der obigen Zeile extrahieren. Also in diesem Beispiel möchte ich mit 16950 enden.

Gibt es eine einfache Möglichkeit, dies zu tun? Ich habe bereits mit HTMLparser experimentiert, konnte aber nicht so arbeiten, dass es nach einer bestimmten Klasse sucht und gibt mir dann die ID aus der Zeile oben.

Vielen Dank im Voraus!

Antwort

1

Sie können einen HTML-Parser wie BeautifulSoup, dies zu tun:

>>> from bs4 import BeautifulSoup 
>>> html = """ <p> 
...    <h3>Same participants, different directions</h3> 
...    <div> 
...     <a href="./reaction?id=16949"><span>RHEA:16949</span></a> 
...     <span class="icon-question">myo-inositol + NAD(+) &lt;?&gt; scyllo-inosose + H(+) + NADH</span> 
...    </div><div> 
...     <a href="./reaction?id=16950"><span>RHEA:16950</span></a> 
...     <span class="icon-arrow-right">myo-inositol + NAD(+) =&gt; scyllo-inosose + H(+) + NADH</span> 
...    </div><div> 
...     <a href="./reaction?id=16951"><span>RHEA:16951</span></a> 
...     <span class="icon-arrow-left-1">scyllo-inosose + H(+) + NADH =&gt; myo-inositol + NAD(+)</span> 
...    </div> 
...   </p>""" 
>>> soup = BeautifulSoup(html, 'html.parser') 
>>> soup.find('span', class_='icon-arrow-right').find_previous_sibling().get_text() 
'RHEA:16950' 
+0

Vielen Dank! Funktioniert perfekt! – fumarat

+0

@ user310015 Also ich denke, find_previous_sinbling() in diesem Zusammenhang funktioniert, weil die RHEA: ID ist auch in ? – fumarat

Verwandte Themen