Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 26, 2012 22:33:08

esal
От:
Зарегистрирован: 2010-10-20
Сообщения: 42
Репутация: +  0  -
Профиль   Отправить e-mail  

парсер курса валют на сайт!

Привет всем!

Скажите, а кто то делал парсер для валют?
Есть необходимость парсить данные с сайта банковской тематики и вставлять с него данные по курсу валют к себе на сайт.

У кого нибудь имеется опыт парсинга схожих данных и исерте текущего курса к себе на сайт?



Офлайн

#3 Фев. 27, 2012 19:14:41

esal
От:
Зарегистрирован: 2010-10-20
Сообщения: 42
Репутация: +  0  -
Профиль   Отправить e-mail  

парсер курса валют на сайт!

Это все что можете предложить? Это абстракция какая-то прям как на картинах Дали. Давайте по существу.
Если был опыт написания кода для данной предметной области, то подскажите советом - парсер/граббер или мб информер какой то?

Информеры в принципе не подходят, тк их стилизовать практически нереально. А требуется именно дизайн оставить изначальным, только чтобы циферки обновлялись.



Офлайн

#4 Фев. 27, 2012 19:31:56

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

парсер курса валют на сайт!

Ради бога…

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import urllib
import datetime

from xml.sax import parseString
from xml.sax.handler import ContentHandler

from couchdb import Server

RATE_URL = 'http://www.cbr.ru/scripts/XML_daily.asp'
server = Server("http://localhost:5984")

rate = server["rate"]
valute = server["valute"]


class CurrHandler(ContentHandler):

date = None
name = None
valute = {}

def startElement(self, name, attrs):
if name == 'Valute':
self.valute = {}
elif name == 'ValCurs':
d,m,y = map(int,attrs['Date'].split('.'))
self.date = datetime.date(y,m,d)
else:
self.name = name

def endElement(self, name):
if name == 'Valute':
self.feed_valute(self.valute)
self.valute = {}

def characters(self, content):
if self.name and content:
self.valute[str(self.name.lower())] = content
self.name = None

def feed_valute(self, _valute):
f = lambda x: float(x.replace(',','.'))
id = _valute['charcode']
v = rate.get(id, {'_id':id})
v["date"] = self.date.toordinal(),
v["nominal"] = f(_valute['nominal'])
v["value"] = f(_valute['value'])
rate.save(v)

if not id in valute:
valute.save({
'_id': id,
'name': _valute['name'],
'active': False,
})


if not 'RUB' in rate:
rate.save({
'_id': "RUB",
'date': 0,
'nominal': 1,
'value': 1,
})

f = urllib.urlopen(RATE_URL)
raw_data = f.read()

handler = CurrHandler()
parseString(raw_data, handler)



Офлайн

#5 Фев. 27, 2012 20:09:48

esal
От:
Зарегистрирован: 2010-10-20
Сообщения: 42
Репутация: +  0  -
Профиль   Отправить e-mail  

парсер курса валют на сайт!

zheromo
Ради бога…

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import urllib
import datetime

from xml.sax import parseString
from xml.sax.handler import ContentHandler

from couchdb import Server

RATE_URL = 'http://www.cbr.ru/scripts/XML_daily.asp'
server = Server("http://localhost:5984")

rate = server["rate"]
valute = server["valute"]


class CurrHandler(ContentHandler):

date = None
name = None
valute = {}

def startElement(self, name, attrs):
if name == 'Valute':
self.valute = {}
elif name == 'ValCurs':
d,m,y = map(int,attrs['Date'].split('.'))
self.date = datetime.date(y,m,d)
else:
self.name = name

def endElement(self, name):
if name == 'Valute':
self.feed_valute(self.valute)
self.valute = {}

def characters(self, content):
if self.name and content:
self.valute[str(self.name.lower())] = content
self.name = None

def feed_valute(self, _valute):
f = lambda x: float(x.replace(',','.'))
id = _valute['charcode']
v = rate.get(id, {'_id':id})
v["date"] = self.date.toordinal(),
v["nominal"] = f(_valute['nominal'])
v["value"] = f(_valute['value'])
rate.save(v)

if not id in valute:
valute.save({
'_id': id,
'name': _valute['name'],
'active': False,
})


if not 'RUB' in rate:
rate.save({
'_id': "RUB",
'date': 0,
'nominal': 1,
'value': 1,
})

f = urllib.urlopen(RATE_URL)
raw_data = f.read()

handler = CurrHandler()
parseString(raw_data, handler)
Круто! А можно пару комментов по поводу подключаемых библиотек и тому каким образом это будет сохраняться и выводиться на сайте?
Я так понимаю - здесь используется БД.

Можете подсказать советом или линком на хауту - сохранение и вывод спарсенной инфы у себя на сайте.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version