将网页中的数据提取到CSV文件,只保存最后一行

时间:2018-05-12 20:24:21

标签: python-3.x pandas web-scraping beautifulsoup

我面临以下挑战:我希望获得有关公司的所有财务数据,并且我编写了一个代码来执行此操作,并且让我们说结果如下所示:

Unnamed: 0    I Q 2017   II Q 2017  \
0     Przychody netto ze sprzedaży (tys. zł)         137         134   
1   Zysk (strata) z działal. oper. (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           N           N

但是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)

1 个答案:

答案 0 :(得分:1)

你几乎得到了它。您每次都要覆盖您的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