Python 3 веб-соскоб, извлечение данных - PullRequest
0 голосов
/ 02 июня 2018

Я написал код, который позволяет получать все финансовые данные о компании с сайта www.bankier.pl, и это работает.К сожалению, есть одна проблема.У меня есть вся дата, но без названий компаний, поэтому результат выглядит следующим образом:

0,Przychody netto ze sprzedaży (tys. zł),2 907,5 797,2 733,7 750
1,Zysk (strata) z działal. oper. (tys. zł),370,2 555,-672,5 272
2,Zysk (strata) brutto (tys. zł),-857,1 476,-1 001,4 913
3,Zysk (strata) netto (tys. zł)*,-1 053,1 464,-830,3 977
4,Amortyzacja (tys. zł),486,453,408,368
5,EBITDA (tys. zł),856,3 008,-264,5 640
6,Aktywa (tys. zł),42 992,45 053,44 481,48 650
7,Kapitał własny (tys. zł)*,41 060,43 076,42 246,46 223
8,Liczba akcji (tys. szt.),"2 217,199","2 287,199","2 287,199","2 287,199"
9,Zysk na akcję (zł),-0475,0640,-0363,1739
10,Wartość księgowa na akcję (zł),18519,18834,18471,20209
11,Raport zbadany przez audytora,N,N,N,N
0,Przychody netto ze sprzedaży (tys. zł),9 615,13 231,9 883,16 670
1,Zysk (strata) z działal. oper. (tys. zł),1 029,3 341,994,3 361
2,Zysk (strata) brutto (tys. zł),1 010,3 320,1 022,3 655
3,Zysk (strata) netto (tys. zł)*,826,2 663,833,3 109
4,Amortyzacja (tys. zł),783,661,650,663
5,EBITDA (tys. zł),1 812,4 002,1 644,4 024
6,Aktywa (tys. zł),41 323,44 133,41 838,54 391
7,Kapitał własny (tys. zł)*,30 510,31 782,32 615,35 724
8,Liczba akcji (tys. szt.),"4 119,374","4 119,374","4 119,374","4 119,374"
9,Zysk na akcję (zł),0201,0647,0202,0755
10,Wartość księgowa na akcję (zł),7407,7715,7917,8672
11,Raport zbadany przez audytora,N,N,N,N

, но у меня более 4000 строк.Итак, вы видите, что нет имен.У меня есть список names_of_company, в котором есть все имена, которые мне нужны.Код берет имя из этого списка и загружает данные для этой компании и продолжает.Результат должен быть таким:

11BIT   0,Przychody netto ze sprzedaży (tys. zł),2 907,5 797,2 733,7 750
11BIT   1,Zysk (strata) z działal. oper. (tys. zł),370,2 555,-672,5 272
11BIT   2,Zysk (strata) brutto (tys. zł),-857,1 476,-1 001,4 913
11BIT   3,Zysk (strata) netto (tys. zł)*,-1 053,1 464,-830,3 977
11BIT   4,Amortyzacja (tys. zł),486,453,408,368
11BIT   5,EBITDA (tys. zł),856,3 008,-264,5 640
11BIT   6,Aktywa (tys. zł),42 992,45 053,44 481,48 650
11BIT   7,Kapitał własny (tys. zł)*,41 060,43 076,42 246,46 223
11BIT   8,Zysk na akcję (zł),-0475,0640,-0363,1739
11BIT   9,Wartość księgowa na akcję (zł),18519,18834,18471,20209
11BIT   10,Raport zbadany przez audytora,N,N,N,N
4FUNMEDIA   0,Przychody netto ze sprzedaży (tys. zł),9 615,13 231,9 883,16 670
4FUNMEDIA   1,Zysk (strata) z działal. oper. (tys. zł),1 029,3 341,994,3 361
4FUNMEDIA   2,Zysk (strata) brutto (tys. zł),1 010,3 320,1 022,3 655
4FUNMEDIA   3,Zysk (strata) netto (tys. zł)*,826,2 663,833,3 109
4FUNMEDIA   4,Amortyzacja (tys. zł),783,661,650,663
4FUNMEDIA   5,EBITDA (tys. zł),1 812,4 002,1 644,4 024
4FUNMEDIA   6,Aktywa (tys. zł),41 323,44 133,41 838,54 391
4FUNMEDIA   7,Kapitał własny (tys. zł)*,30 510,31 782,32 615,35 724
4FUNMEDIA   8,Zysk na akcję (zł),0201,0647,0202,0755
4FUNMEDIA   9,Wartość księgowa na akcję (zł),7407,7715,7917,8672
4FUNMEDIA   10,Raport zbadany przez audytora,N,N,N,N

Ниже вы можете найти мой код:

import requests
from bs4 import BeautifulSoup
import pandas as pd    

url = 'https://www.bankier.pl/gielda/notowania/akcje?index=WIG'
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/skonsolidowany/kwartalny/standardowy/1'
    links.append(new_string)

############################################################################

for i in links:
    url2 = i

    page2 = requests.get(url2)

    soup = BeautifulSoup(page2.content,'lxml')
# Find the second table on the page
    try:
        t2 = soup.find_all('table')[0]
        df2 = pd.read_html(str(t2))[0]

        with open('tesadst.csv', 'a') as f:
            df2.to_csv(f, header=False)
    except:
        pass

Спасибо за любую помощь :)

1 Ответ

0 голосов
/ 02 июня 2018

Вы можете переместить часть создания ссылки в другое место.Таким образом, вы будете знать, какое название компании генерирует DataFrame.Вы создаете новый столбец в DataFrame и присваиваете ему значение названия компании.

for name in names_of_company: 
    url2 = 'https://www.bankier.pl/gielda/notowania/akcje/{}/wyniki-finansowe/skonsolidowany/kwartalny/standardowy/1'.format(name)

Теперь - после создания df2 - вы можете просто создать новый столбец в df2 и присвоить ему значениеимени ...

df2['company_name'] = name

Это должно сделать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...