python beautifulsoup4解析谷歌财务数据

时间:2014-02-09 02:30:01

标签: python beautifulsoup

我不习惯使用beautifulsoup和刮擦一般,所以我试着让我的脚湿透可以这么说。

我想从这里获得道琼斯工业平均指数的第一行信息: http://www.google.com/finance/historical?q=INDEXDJX%3A.DJI&ei=ZN_2UqD9NOTt6wHYrAE

虽然我可以读取数据和打印(汤)输出所有内容,但我似乎无法下降得足够远。如何选择保存到表中的行?第一行怎么样?

非常感谢你的帮助!

import urllib.parse
import urllib.request
from bs4 import BeautifulSoup
import json
import sys
import os
import time
import csv
import errno

DJIA_URL = "http://www.google.com/finance/historical?q=INDEXDJX%3A.DJI&ei=ZN_2UqD9NOTt6wHYrAE"

def downloadData(queryString):
    with urllib.request.urlopen(queryString) as url:
        encoding = url.headers.get_content_charset()
        result = url.read().decode(encoding)
    return result

raw_html = downloadData(DJIA_URL)
soup = BeautifulSoup(raw_html)

#print(soup)

table = soup.findAll("table", {"class":"gf-table historical_price"})

1 个答案:

答案 0 :(得分:2)

您想要第二个tr表格行:

prices = soup.find('table', class_='historical_price')
rows = prices.find_all('tr')
print rows[1]

或者,要列出包含价格信息的所有行,请跳过包含任何th元素的行:

for row in rows:
    if row.th: continue

或使用第一个标题作为字典键的来源:

keys = [th.text.strip() for th in rows[0].find_all('th')]
for row in rows[1:]:
    data = {key: td.text.strip() for key, td in zip(keys, row.find_all('td'))}
    print data

产生:

{u'Volume': u'105,782,495', u'High': u'15,798.51', u'Low': u'15,625.53', u'Date': u'Feb 7, 2014', u'Close': u'15,794.08', u'Open': u'15,630.64'}
{u'Volume': u'106,979,691', u'High': u'15,632.09', u'Low': u'15,443.00', u'Date': u'Feb 6, 2014', u'Close': u'15,628.53', u'Open': u'15,443.83'}
{u'Volume': u'105,125,894', u'High': u'15,478.21', u'Low': u'15,340.69', u'Date': u'Feb 5, 2014', u'Close': u'15,440.23', u'Open': u'15,443.00'}
{u'Volume': u'124,106,548', u'High': u'15,481.85', u'Low': u'15,356.62', u'Date': u'Feb 4, 2014', u'Close': u'15,445.24', u'Open': u'15,372.93'}