python beautifulsoup4解析google finance d

2024-06-01 08:44:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚开始用美容膏和刮擦,所以我想把脚弄湿。在

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

虽然我可以读取数据并打印(soup)输出的所有内容,但我似乎还不够深入。如何选择保存到表中的行?第一排怎么样?在

非常感谢你的帮助!在

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"})

Tags: importcomhttpurlrequestwwwgoogletable
1条回答
网友
1楼 · 发布于 2024-06-01 08:44:21

您需要第二个tr表行,然后:

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

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

^{pr2}$

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

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'}

等等

相关问题 更多 >