2017-04-26 1 views
1

Ich möchte Daten aus dieser Tabelle extrahieren, die die Währungskurse zeigt.Abrufen von Daten aus dieser Tabelle html python

Besuchen https://www.iceplc.com/travel-money/exchange-rates

ich diesen Ansatz versucht haben, aber es ist nicht

Arbeits
 table_id = driver.find_element(By.ID, 
    'data_configuration_feeds_ct_fields_body0') 
     rows = table_id.find_elements(By.TAG_NAME, "tr") # get all of the 
     rows in the table 
     for row in rows: 

     col = row.find_elements(By.TAG_NAME, "td")[1] #note: index start from 
     0, 1 is col 2 
     print(col.text) #prints text from the element 

Dies ist der html

</td> 

        <td valign="top" class="OuterProdCell test"> 

           <table class="ProductCell"> 
            <tr> 
            <td class="rateCountryFlag"> 
             <ul id="prodImages"> 
              <li> 
               <a href="/travel-money/buy-chilean-peso" title="Buy Chilean Peso" class="flags chilean-peso" ></a> 
              </li> 
             </ul> 
            </td> 

            <td class="ratesName"> 
            <a href="/travel-money/buy-chilean-peso" title="Buy Chilean Peso"> 
            Chilean Peso</a> 
            </td> 

            <td class="ratesClass"> 
            <a class="orderText" href="/travel-money/buy-chilean-peso" title="Buy Chilean Peso">774.8540</a> 
            </td> 
            <td class="orderNow">           
             <ul id="prodImages"> 
              <li> 
               <a class="reserveNow" href="/travel-money/buy-chilean-peso" title="Buy Chilean Peso">Order<br/>now</a> 
              </li> 
              <li> 
               <a href="/travel-money/buy-chilean-peso" title="Buy Chilean Peso" class="flags arrowGreen" ></a> 
              </li> 
             </ul> 
            </td> 
            </tr> 
           </table> 

Ich habe auch die Python Selen Ansatz jedoch versucht, kann ich die Wechselkurs von jedem, aber nicht der Name

   driver.get("https://www.iceplc.com/travel-money/exchange- 
      rates") 
      rates = driver.find_elements_by_class_name("ratesClass") 

      for rate in rates: 
      print(rate.text) 
+0

welcher Name? Was ist die erwartete Ausgabe? –

+0

Ausgänge Euro 1.146 – xys234

+0

Sein bedeutete die gesamte Tabelle in diesem Format in einer Zeile zur Ausgabe hinunter – xys234

Antwort

1

Wenn Sie nur versuchen, die Wechselkurse zu erhalten, dann sollten Sie besser api verwenden, siehe this question. Web-Scraping macht Sie anfällig für Änderungen auf der Zielwebseite, die Ihren Code beschädigen.

Wenn Scraping jedoch Ihr Ziel ist, müssen Sie nur Ihren Selen-Ansatz wiederverwenden, aber nach der Klasse "ratesName" suchen.

Zum Beispiel:

driver.get("https://www.iceplc.com/travel-money/exchange-rates") 
rates.append((driver.find_elements_by_class_name("ratesName"), driver.find_elements_by_class_name("ratesClass"))) 

for rate in rates: 
print("Name: %s, Rate: %s" % (rate[0], rate[1])) 
1

Durch die Struktur der Seite Analyse klar ist, dass Sie Zeile für Zeile zu analysieren haben, und Sie müssen die Spalte Komponente wählen Sie interessiert sind.

Für jede Zeile Extrahieren der zwei Elemente, die Sie interessiert sind, durch die find_element_by_tag_name und find_element_by_class_name

(Dokumentation hier http://selenium-python.readthedocs.io/locating-elements.html)

driver.get("https://www.iceplc.com/travel-money/exchange-rates") 
rates=driver.find_elements_by_tag_name('tr') 
for i in rates: 
     print i.find_element_by_class_name('ratesName').text, i.find_element_by_class_name('ratesClass').text 

Ausgang ist mit:

US - Dollar 1.2536 
Croatia - Kuna 8.3997 
Canada - Dollar 1.7006 
Australia - Dollar 1.6647 
Euro - 1.1469 
... 
Verwandte Themen