2016-01-10 4 views
0

Итак, я работал над простым сценарием, который вытаскивает символы фона из .txt-файла в основной каталог проектов, и я просто не могу представить, чтобы он возвращал данные о ценах. Он работает, если я вручную ввожу их в строковый массив, но когда дело доходит до вытаскивания из файла, я просто не хочу возвращать цены.Сценарий выскабливания на Python не вытягивает данные о ценах?

import urllib 
import re 

symbolfile = open("symbols.txt") 
symbolslist = symbolfile.read() 
newsymbolslist = symbolslist.split("\n") 

i = 0 

while i<len(newsymbollist): 
    url = "http://finance.yahoo.com/q?uhb=uh3_finance_vert_gs_ctrl1&fr=&type=2button&s=" +symbolslist[i] +"" 
    htmlfile = urllib.urlopen(url) 
    htmltext = htmlfile.read() 
    regex = '<span id="yfs_184_' +newsymbolslist[i] +'">(.+?)</span>' 
    pattern = re.compile(regex) 
    price = re.findall(pattern,htmltext) 
    print "The price of", newsymbolslist[i] ," is ", price 
    i+=1 

Я действительно могу использовать некоторую помощь, потому что он не дает никаких ошибок в оболочке, почему.

Заранее благодарим за любую помощь!

+0

Что здесь вопрос? Каков ваш текущий результат? – mid

+0

Не могли бы вы предоставить несколько строк вашего _txt_, а также результат, который вы получите, и то, что вы хотите получить? – AdmPicard

+0

Связанные: http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags –

ответ

0

Внедрение модификации, предоставленной @Linus Gustav Larsson Thiel в комментариях, а другое относительно regex, ваш код возвращает правильные результаты. Пожалуйста, обратите внимание на lowercase() в регулярном выражении, так как источник включает строчные символы:

i = 0 

while i < len(newsymbolslist): 
    url = "http://finance.yahoo.com/q?uhb=uh3_finance_vert_gs_ctrl1&fr=&type=2button&s=" +newsymbolslist[i] 
    htmlfile = urllib.urlopen(url) 
    htmltext = htmlfile.read() 
    regex = '<span id="yfs_l84_' +newsymbolslist[i].lower() +'">(.+?)</span>' 
    pattern = re.compile(regex) 
    price = pattern.findall(htmltext) 
    print "The price of", newsymbolslist[i] ," is ", price 
    i+=1 

С статическим списком для целей тестирования ['AAPL','GOOGL','MSFT'] я получаю следующий результат:

The price of AAPL is ['98.53'] 
The price of GOOGL is ['733.07'] 
The price of MSFT is ['52.30'] 

Если вы хотите , вы также можете упростить свой код:

baseurl = "http://finance.yahoo.com/q?uhb=uh3_finance_vert_gs_ctrl1&fr=&type=2button&s=" 

for symbol in newsymbolslist: 
    url = baseurl + symbol 
    source = urllib.urlopen(url).read() 
    regex = re.compile('<span id="yfs_l84_' + symbol.lower() + '">(.+?)</span>') 
    price = regex.findall(source)[0] 
    print "The price of", symbol, "is", price 

for ... in ... исключает необходимость в переменной счетчика, и поскольку findall() возвращает список совпадений (в то время как вы ожидаете этого), вы можете присоединить [0], чтобы отобразить содержащую строку, а не список с одним элементом.

Это вернет следующее:

The price of AAPL is 98.53 
The price of GOOGL is 733.07 
The price of MSFT is 52.30 

 Смежные вопросы

  • Нет связанных вопросов^_^