2013-03-06 4 views
7

Provo ad analizzare la pagina html e recuperare i valori per le valute e scrivere in csv. Ho seguente codice:Come analizzare la tabella html con python e beautifulsoup e scrivere in csv

#!/usr/bin/env python 

import urllib2 
from BeautifulSoup import BeautifulSoup 

contenturl = "http://www.bank.gov.ua/control/en/curmetal/detail/currency?period=daily" 
soup = BeautifulSoup(urllib2.urlopen(contenturl).read()) 

table = soup.find('div', attrs={'class': 'content'}) 

rows = table.findAll('tr') 
for tr in rows: 
    cols = tr.findAll('td') 
    for td in cols: 
     text = td.find(text=True) + ';' 
     print text, 
    print 

Il problema è che io non so, come recuperare solo i valori per la valuta. Ho provato alcune espressioni regolari come '^ [0-9] {3}' - inizia con 3 cifre ma non funziona.

+0

Qualsiasi motivo si sta utilizzando BeautifulSoup 3 anziché 4? Non che sia importante per il tuo problema, ma bs4 offre funzionalità molto migliori nei luoghi. –

+0

Stai cercando di ottenere solo i valori della colonna "tassi di cambio ufficiali"? – jurgenreza

risposta

9

Sarebbe molto meglio scegliere celle specifiche nella tabella. Le td cellule con la classe cell_c contengono i dati che vi interessano, e l'ultimo è sempre il tasso di cambio:

rows = table.findAll('tr') 
for tr in rows: 
    cols = tr.findAll('td') 
    if 'cell_c' in cols[0]['class']: 
     # currency row 
     digital_code, letter_code, units, name, rate = [c.text for c in cols] 
     print digital_code, letter_code, units, name, rate 

con i dati in variabili separate, è ora possibile trasformare il testo in numeri decimali, negozio li in un database, qualunque cosa.