与Python

问题描述:

我目前的工作,从一个股票网站与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中

任何帮助让我开始感谢!

使用一个强大的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