与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()
你将不得不在这个例子中详细一点,因为一些元素(如“符号”)在span
或a
节点被进一步遏制,但精神是:使用XPath查询并提取列内容。根据需要添加列。
提示:使用Chrome Inspector或Firebug获取正确的XPath。
编辑:通过命令行这个脚本上的所有文件名。如果需要分别处理每个文件,请在main()
中删除for
循环。
事情是不是用我使用bash脚本,我不得不创建一个下载页面,并调用Python代码下载网页的网站。这些页面被标记为这样UsaToday-2013-05-16-00.html - UsaToday-2013-05-16-59.html – user2340513 2013-05-05 21:56:51