我不习惯使用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"})
答案 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'}
等