Python – #7 – Pobieranie (zeskrobywanie) danych ze stron www cz. 2
Wprowadzenie.
W części drugiej wpisu o pobieraniu danych ze stron www przedstawiłem, w jaki sposób otrzymać konkretne dane bez „ozdobników”, które mogą być już bezpośrednio użyte przy dowolnych działaniach.
Zakres artykułu.
- Pobieranie (zeskrobywanie) danych ze stron www
Pobieranie (zeskrobywanie) danych ze stron www
Na chwilę obecną dane, które wyświetliliśmy w poprzedniej części, nie są gotowe do ich przetwarzania, ponieważ jak możemy zobaczyć, wartości opatrzone są tagami html. W związku z tym musimy tak napisać program, aby pozbyć się zbędnych elementów w kodzie.
Przyjrzyjmy się, jak aktualnie wygląda nasza odpowiedź w terminalu.
Jak możemy zobaczyć, poza tagiem table znajdują się takie tagi jak: tr, th, oraz td. Tag tr definiuje jeden rząd w tabeli. Tag th definiuje wartość pola, która nazywa poszczególne kolumny. Natomiast tag td również definiuje wartości pola, z tym że tag ten obejmuje konkretne dane.
Moduł BeautifulSoup dostarcza nam taką metodę jak select(), która znajduje określone przez nas tagi. W wyniku, który wcześniej otrzymaliśmy, zastosujemy teraz metodę select(), gdzie będziemy chcieli znaleźć jedynie tagi th. Kod reazlizujący to zadanie wygląda następująco.
Wyświetlmy teraz, co zawiera obiekt my_data1 przy pomocy następującego kodu.
Wynik, jaki powinniśmy otrzymać, wygląda następująco.
[<th>Data</th>, <th>Otwarcie</th>, <th>Max</th>, <th>Min</th>, <th>Zamknięcie</th>, <th>Wolumen</th>, <th>Obrót</th>]
Dane umieszczone są w liście, a co za tym idzie, możemy je iterować.
Uzyskany wynik prezentuje się teraz następująco.
Data
Otwarcie
Max
Min
Zamknięcie
Wolumen
Obrót
Intuicyjnie spodziewalibyśmy się otrzymać dane w tagach, jednakże metoda select() nie zwraca listy, a obiekt, w którym przy iterowaniu kolejnych elementów, tagi htmla są usuwane.
Identycznie postępujemy z danymi opatrzonymi tagiem td.
Niewielki fragment wyniku, jaki powinniśmy otrzymać, wygląda następująco.
23.04.2021
176.98
179.00
167.50
171.14
708 623
121 039 464
22.04.2021
175.70
176.70
172.30
…
W tym momencie mamy dostępne wszystkie dane jako kolejne elementy co niekoniecznie jest naszym ostatecznym celem. Z danych, które posiadamy, wyodrębnijmy datę oraz kurs na zamknięciu. W celu zrealizowania tego zadania musimy wykonać kilka dodatkowych kroków.
W pierwszej kolejności, gdy iterujemy obiekt my_data1, zliczmy liczbę kolumn.
Otrzymany wynik powinien wyglądać następująco.
7
W następnym kroku zmodyfikujmy pętlę, która iteruje po zmiennej my_data2, tak aby data oraz kurs na zamknięciu były umieszczane w naszych listach.
Otrzymany wynik wygląda następująco.
[’23.04.2021′, '22.04.2021′, '21.04.2021′, '20.04.2021′, '19.04.2021′, '16.04.2021′, '15.04.2021′, '14.04.2021′, '13.04.2021′, '12.04.2021′, '09.04.2021′, '08.04.2021′, '07.04.2021′, '06.04.2021′, '01.04.2021′, '31.03.2021′, '30.03.2021′, '29.03.2021′, '26.03.2021′, '25.03.2021′, '24.03.2021′, '23.03.2021′, '22.03.2021′, '19.03.2021′, '18.03.2021′, '17.03.2021′, '16.03.2021′, '15.03.2021′, '12.03.2021′, '11.03.2021′, '10.03.2021′, '09.03.2021′, '08.03.2021′, '05.03.2021′, '04.03.2021′, '03.03.2021′, '02.03.2021′, '01.03.2021′, '26.02.2021′, '25.02.2021′, '24.02.2021′, '23.02.2021′, '22.02.2021′, '19.02.2021′, '18.02.2021′, '17.02.2021′, '16.02.2021′, '15.02.2021′, '12.02.2021′, '11.02.2021′]
[’171.14′, '173.50′, '172.60′, '173.00′, '177.50′, '176.76′, '187.42′, '185.76′, '186.50′, '186.50′, '184.38′, '183.00′, '191.76′, '197.08′, '194.58′, '190.50′, '217.90′, '239.70′, '212.00′, '208.10′, '217.10′, '220.70′, '217.00′, '223.20′, '220.70′, '231.00′, '229.50′, '229.90′, '226.50′, '221.00′, '210.20′, '223.00′, '232.00′, '232.00′, '235.00′, '228.30′, '241.30′, '240.30′, '236.60′, '251.60′, '258.20′, '257.70′, '258.10′, '265.40′, '275.00′, '271.30′, '270.10′, '270.00′, '263.00′, '270.50′]
Tak przygotowane dane możemy teraz swobodnie wykorzystywać do różnych celów, jak na przykład wyświetlenie wartości na wykresie, o czym napiszę w następnym wpisie tej serii.
Na koniec zamieszczam jeszcze cały kod programu.