python-3.x - 将数据从网页提取到 CSV 文件,仅保存最后一行
问题描述
我面临以下挑战:我想获取有关公司的所有财务数据,我编写了一个代码来完成它,假设结果如下所示:
未命名:0 IQ 2017 II Q 2017 \ 0 Przychody netto ze sprzedaży (tys. zł) 137 134 1 Zysk(地层)z działal。操作。(tys.zł) -423 -358 2 Zysk (strata) brutto (tys. zł) -501 -280 3 Zysk (strata) netto (tys. zł)* -399 -263 4 Amortyzacja (tys. zł) 134 110 5 EBITDA (tys. zł) -289 -248 6 Aktywa (tys. zł) 27 845 26 530 7 Kapitał własny (tys. zł)* 22 852 22 589 8 Liczba akcji (tys. szt.) 13 921,975 13 921,975 9 Zysk na akcję (zł) -0029 -0019 10 Wartość księgowa na akcję (zł) 1641 1623 11 Raport zbadany przez audytora NN
但要多 464 倍。
不幸的是,当我想将所有 464 个结果保存在一个 CSV 文件中时,我只能保存最后一个结果。不是所有 464 个结果,只有一个……你能帮我保存所有吗?下面是我的代码。
import requests
from bs4 import BeautifulSoup
import pandas as pd
url = 'https://www.bankier.pl/gielda/notowania/akcje'
page = requests.get(url)
soup = BeautifulSoup(page.content,'lxml')
# Find the second table on the page
t = soup.find_all('table')[0]
#Read the table into a Pandas DataFrame
df = pd.read_html(str(t))[0]
#get
names_of_company = df["Walor AD"].values
links_to_financial_date = []
#all linkt with the names of companies
links = []
for i in range(len(names_of_company)):
new_string = 'https://www.bankier.pl/gielda/notowania/akcje/' + names_of_company[i] + '/wyniki-finansowe'
links.append(new_string)
############################################################################
for i in links:
url2 = f'https://www.bankier.pl/gielda/notowania/akcje/{names_of_company[0]}/wyniki-finansowe'
page2 = requests.get(url2)
soup = BeautifulSoup(page2.content,'lxml')
# Find the second table on the page
t2 = soup.find_all('table')[0]
df2 = pd.read_html(str(t2))[0]
df2.to_csv('output.csv', index=False, header=None)
解决方案
你几乎明白了。您只是每次都覆盖您的 CSV。代替
df2.to_csv('output.csv', index=False, header=None)
和
with open('output.csv', 'a') as f:
df2.to_csv(f, header=False)
为了附加到 CSV 而不是覆盖它。
另外,您的示例不起作用,因为:
for i in links:
url2 = f'https://www.bankier.pl/gielda/notowania/akcje/{names_of_company[0]}/wyniki-finansowe'
应该:
for i in links:
url2 = i
当网站没有数据时,跳过并继续下一个:
try:
t2 = soup.find_all('table')[0]
df2 = pd.read_html(str(t2))[0]
with open('output.csv', 'a') as f:
df2.to_csv(f, header=False)
except:
pass
推荐阅读
- pandas - bin 大小生成的索引错误,
- python - cursor.rowfactory (cx_oracle) 如何以字典格式返回每一行?
- python-3.x - 我迷失在数学运算中
- php - 如何从php中的字符串中删除特定字符和特殊字符
- javascript - 如何在asp.net mvc视图上调用打字稿方法
- javascript - 当我有多个标签时,在 Riot.js 的数组中删除对象
- android - FirebaseRecyclerAdapter 的问题,在删除数据时在空对象引用上
- sql - Oracle 查询到 PostgreSQL 的转换
- vps - 在 vps 上找不到 phpmyadmin 404
- tensorflow - tensorflow-gpu 错误:由于 EnvironmentError 无法安装软件包:[Errno 2] 没有这样的文件或目录: