首页 > 解决方案 > 我需要从该 url 从表中提取数据并将它们放入表中并导出到 csv

问题描述

我不确定自己做错了什么以及为什么会出现索引错误。目标是从 cnn money 中提取股票数据,使其保持其所在的顺序和类别。我还使用 pandas 将其导出到 csv 中,但由于有 3 个不同的表,我可以一次获取一个表来加载到一个csv。我如何让所有 3 显示?

import csv
    import requests
    import bs4 as bs
    labels=[]
    data=[]
    url = 'http://money.cnn.com/data/hotstocks/index.html'
    response = requests.get(url)
    html = response.content

    soup = BeautifulSoup(html,'lxml')
    table=soup.find('div',id='wsod_hotStocks')
    rows=table.find_all('tr')
    for row in rows:
        labels.append(str(row.find_all('td')[0].text)) 
        data.append(str(row.find_all('td')[1].text))
import pandas as pd

    df = pd.read_html("https://money.cnn.com/data/hotstocks/")

    df[0].to_csv("data.csv",index= False)

标签: python-3.xpandascsv

解决方案


您的 error( IndexError: list index out of range) 即将到来,因为在某些迭代中,您的列表为空,而在您的情况下,它是第一次迭代。

我找到了一种将抓取的数据保存在 csv 中的简单方法:

代码

import pandas as pd
df=[]


url = r'https://money.cnn.com/data/hotstocks/'
tables = pd.read_html(url,header =0, flavor = 'bs4') 

#if you want to store only one table
#df= pd.DataFrame(tables[count]) 


#if you want to store all table
count=0
while count<len(tables):
    df2= tables[count]
    df.append(df2)
    print(df)
    count+=1
df = pd.concat(df)
#to store all data of dataFrame
df.to_csv('data.csv',index=False)

输出

在此处输入图像描述

#Save only one column to csv
df.to_csv('data.csv', mode='w', columns=['Company'], index=False)

输出

Company
GE General Electric Co
F Ford Motor Co
CCL Carnival Corp
MRO Marathon Oil Corp
TWTR Twitter Inc
DAL Delta Air Lines Inc
LUV Southwest Airlines Co
NCLH Norwegian Cruise Line Holdings Ltd
BAC Bank of America Corp
HAL Halliburton Co
......

推荐阅读