2017-04-26 4 views
0
import requests 
from bs4 import BeautifulSoup 

url = 'http://www.x-rates.com/table/?from=USD&amount=1' 

page = requests.get(url) 

soup = BeautifulSoup(page.content, "lxml") 

print soup.prettify() 
 <td> 
     Chinese Yuan Renminbi 
     </td> 
     <td class="rtRates"> 
     <a href="/graph/?from=USD&amp;to=CNY"> 
      6.887711 
     </a> 
     </td> 
     <td class="rtRates"> 
     <a href="/graph/?from=CNY&amp;to=USD"> 
      0.145186 
     </a> 
     </td> 
     </tr> 

Darf ich fragen, dass, wie kann ich den Inhalt zwischen Tag 'a' zu extrahieren? Sag ich möchte 6.887711 in der 6. Reihe des Ergebnisses bekommen?Wie extrahiere ich eine Zahl zwischen zwei Tags in Python?

Antwort

0

können Sie soup.find_all() verwenden, um durch alle von ihnen iterieren:

for tag in soup.find_all("a"): 
    print(tag.text.strip()) 

Welche Ausgang würde:

6.887711 
0.145186 
... 
+0

Vielen Dank! Aber wenn ich nur 6.887711 extrahieren möchte, was soll ich tun? –

+0

Wo siehst du '6.887711' in der 6. Reihe? Wenn ich auf die Seite gehe, ist es die 10. Reihe. – Vallentin

0

Wenn Sie nur den ersten Tag erhalten möchten, können Sie die Verwendung des href machen Unterschied und Verwendung Regex, um das entsprechende Tag zu entsprechen; So endet die href zum ersten Tag mit CNY, mit re Modul mit regex CNY$ das href Attribut übereinstimmen:

import re 
soup.find("a", {"href": re.compile("CNY$")}).text 
# '6.888069' 
+0

Vielen Dank !!! Ich habs –

0

In einer Situation wie dieser Sie könnten mit der lxml Bibliothek betrachten, weil es xpath zur Verfügung stellt.

>>> from lxml import etree 
>>> import requests 
>>> url = 'http://www.x-rates.com/table/?from=USD&amount=1' 
>>> HTML = requests.get(url).text 
>>> parser = etree.HTMLParser() 
>>> tree = etree.fromstring(HTML, parser=parser) 
>>> currency = tree.xpath('.//table[2]/tbody/tr[3]/td[1]') 
>>> currency[0].text 
'Bahraini Dinar' 
>>> USDrate = tree.xpath('.//table[2]/tbody/tr[3]/td[3]/a') 
>>> USDrate[0].text 
'2.652179' 

In diesem Fall habe ich die zweite Tabelle gefunden wird, dann die dritte Reihe der Tabelle, und dann werden die ersten und dritten Zellen dieser Zeile.

Verwandte Themen