python-3.x - 我需要从该 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)
解决方案
您的 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
......
推荐阅读
- python - 用链式掩码替换 numpy 数组元素
- xml - Perl XPath:使用“and”返回两个节点
- python - PDF到Python中的文本在图像文件中返回空结果
- reactjs - 设置输入初始值并使用钩子更新 onChange。错误:渲染的钩子比上一次渲染时更多
- java - IntelliJ IDEA 或 Eclipse 中是否有像 MATLAB 中的工作区一样工作的函数窗口?
- r - 如何使用带有 R 星包的多边形从栅格中提取值?
- regex - 试图理解正则表达式片段 (/[-/\\^$*+?.()|[\]{}]/g, '\\$&')
- c# - 使用 Microsoft Graph 邀请消费者用户加入 B2C 租户
- linux - 仅在 Linux 上为 ASP.NET Core 3.1 csproj 添加 PackageReference:操作系统的 csproj 条件变量列表?
- ansible - 一种列出 playbook 使用的 Ansible 模块的方法