2013-05-05 46 views
-1

我目前的工作,從一個股票網站與Python

http://markets.usatoday.com/custom/usatoday-com/html-mktscreener.asp

我需要提取的所有列符號提取信息的Python程序中提取。在此計劃之前,我必須創建一個bash腳本,每分鐘下載頁面1小時以獲得60頁。我已經完成了。但我不明白如何提取信息,所以我可以將這些信息注入MySQL數據庫。

import libxml2 
import sys 
import os 
import commands 
import re 
import sys 

import MySQLdb 

from xml.dom.minidom import parse, parseString 

# for converting dict to xml 
from cStringIO import StringIO 
from xml.parsers import expat 

def get_elms_for_atr_val(tag,atr,val): 
    lst=[] 
    elms = dom.getElementsByTagName(tag) 
    # ............ 

    return lst 

# get all text recursively to the bottom 
def get_text(e): 
    lst=[] 
    # ............ 
    return lst 
def extract_values(dm): 
    lst = [] 
    l = get_elms_for_atr_val('table','class','most_actives') 
    # ............ 
    # get_text(e) 
    # ............ 
    return lst 

我是python的新手,這是最好的。有60個HTML頁面下載,我需要做的只是從1頁提取信息,我相信或者至少如果我可以從1頁開始,我可以找出其他人的循環,並提取該信息以便使用在MYsql中

任何幫助讓我開始感謝!

回答

0

使用一個強大的HTML解析器,而不是xml模塊,因爲後者將拒絕惡意文件,如URL你指出的似乎是。這裏有一個快速的解決方案:

from lxml.html import parse 
import sys 

def process(htmlpage): 
    tree = parse(htmlpage).getroot() 

    # Helper function 
    xpath_to_column = lambda expr: [el.text for el in tree.xpath(expr)] 

    symbol = xpath_to_column('//*[@id="idcquoteholder"]/table/tr/td[1]/a') 
    price = xpath_to_column('//*[@id="idcquoteholder"]/table/tr/td[3]') 
    volume = xpath_to_column('//*[@id="idcquoteholder"]/table/tr/td[6]') 

    return zip(symbol, price, volume) 


def main(): 
    for filename in sys.argv[1:]: 
     with open(filename, 'r') as page: 
      print process(page) 


if __name__ == '__main__': 
    main() 

你將不得不在這個例子中詳細一點,因爲一些元素(如「符號」)在spana節點被進一步遏制,但精神是:使用XPath查詢並提取列內容。根據需要添加列。

提示:使用Chrome Inspector或Firebug獲取正確的XPath。

編輯:通過命令行這個腳本上的所有文件名。如果需要分別處理每個文件,請在main()中刪除for循環。

+0

事情是不是用我使用bash腳本,我不得不創建一個下載頁面,並調用Python代碼下載網頁的網站。這些頁面被標記爲這樣UsaToday-2013-05-16-00.html - UsaToday-2013-05-16-59.html – user2340513 2013-05-05 21:56:51