2013-03-11 3 views
0

Я пытаюсь очистить данные Google от Google Finance, в частности, для котировок акций. Я использую ответ, найденный здесь: How to create a stock quote fetching app in python, и его работа отлично, но только для google. Я новичок в регулярном выражении и заметил, что нужно изменить, но не уверен, как это сделать.Regex for stock quote

Приведенный ниже код работает для разбора данных для котировки google для получения текущей цены.

m = re.search('id="ref_694653_l".*?>(.*?)<', content) 

694653 специфичен для Google. Если я Zynga, ZnGa, он должен искать:

<span id="ref_481720736332929_l">3.57</span> 

Я хочу иметь регулярное выражение, которое ищет для

id="ref_SOME_NUMBER_l">SOME_PRICE" 

Любая помощь будет принята с благодарностью!

+6

Попробуйте [BeautifulSoup] (http://www.crummy.com/software/BeautifulSoup/) вместо этого. Гораздо проще использовать BeautifulSoup для извлечения информации из HTML, чем для создания сложного регулярного выражения, которое может или не может работать в каждом случае. – Ryan

ответ

2

Скремблирование HTML с другого сайта редко является лучшим решением. API были созданы по какой-то причине. Проверьте https://stackoverflow.com/a/10040996/254973, если вы хотите получать машиночитаемые финансовые данные.

Если вы настаиваете на очищении HTML, используйте библиотеку, например, @minitech. Вы никогда не должны пытаться анализировать HTML с помощью Regex. read more here

+1

[Прямая ссылка на лучший HTML-ответ регулярного выражения когда-либо] (http://stackoverflow.com/a/1732454/1204143) – nneonneo

0

Просто сделай это правильный путь:

import urllib2, re 

from bs4 import BeautifulSoup 

def get_quote(symbol): 
    url = 'http://finance.google.com/finance?q=' + symbol 
    soup = BeautifulSoup(urllib2.urlopen(url)) 

    return float(soup.find('span', id=re.compile(r'ref_\d+_l')).get_text()) 

Regex не совсем ответ, если вы можете разобрать HTML и сделать это так же легко.

0
match = re.search('<span (id="ref_\d*_l">\d*\.?\d*)</span>', content) 
print match.group(1)