2013-03-06 43 views
7

Tôi cố gắng phân tích cú pháp trang html và tìm nạp giá trị cho tiền tệ và ghi vào csv. Tôi đã mã sau:Cách phân tích cú pháp bảng html với python và beautifulsoup và ghi vào 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 

Vấn đề là, mà tôi không biết, làm thế nào để lấy chỉ có giá trị cho tiền tệ. Tôi đã thử một số regexp như '^ [0-9] {3}' - bắt đầu bằng 3 chữ số nhưng nó không hoạt động.

+0

Lý do bạn sử dụng BeautifulSoup 3 thay vì 4? Không phải là nó quan trọng đối với vấn đề của bạn, nhưng bs4 cung cấp chức năng tốt hơn nhiều ở những nơi. –

+0

Bạn đang cố gắng để có được chỉ là giá trị của "tỷ giá hối đoái chính thức" cột? – jurgenreza

Trả lời

9

Bạn sẽ tốt hơn khi chọn ra các ô cụ thể trong bảng. Các td tế bào với lớp cell_c chứa dữ liệu mà bạn quan tâm, và người cuối cùng luôn là tỷ giá hối đoái:

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 

Với các dữ liệu trong các biến riêng biệt, bây giờ bạn có thể biến các văn bản để thập phân số, lưu trữ chúng trong cơ sở dữ liệu, bất cứ điều gì.

Các vấn đề liên quan