7

I try to parse html page and fetch values for currencies and write to csv. I have following code:

#!/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

The problem is, that I do not know, how to retrieve only values for currency. I tried some regexp like '^[0-9]{3}' - start with 3 digits but it doesn't work.

Martijn Pieters
1.1m326 gold badges4.2k silver badges3.4k bronze badges
asked Mar 6, 2013 at 14:50
2
  • Any reason you are using BeautifulSoup 3 instead of 4? Not that it matters much for your problem, but bs4 offers much better functionality in places. Commented Mar 6, 2013 at 14:52
  • Are you trying to get just the values of "official exchange rates" column? Commented Mar 6, 2013 at 15:02

1 Answer 1

9

You'd be much better off picking out specific cells in the table. The td cells with the cell_c class contain data you are interested in, and the last one is always the currency exchange rate:

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

With the data in separate variables, you can now turn the text to decimal numbers, store them in a database, whatever.

answered Mar 6, 2013 at 14:59
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.