Python Web Scraping - Ekstrakcja danych

Analiza strony internetowej oznacza zrozumienie jej struktury. Teraz pojawia się pytanie, dlaczego jest to ważne dla skrobania sieci? W tym rozdziale wyjaśnijmy to szczegółowo.

Analiza strony internetowej

Analiza strony internetowej jest ważna, ponieważ bez analizy nie jesteśmy w stanie wiedzieć, w jakiej formie otrzymamy dane z tej strony (ustrukturyzowanej lub nieustrukturyzowanej) po ekstrakcji. Możemy przeprowadzić analizę strony internetowej na następujące sposoby -

Wyświetlanie źródła strony

Jest to sposób na zrozumienie struktury strony internetowej poprzez zbadanie jej kodu źródłowego. Aby to zaimplementować, musimy kliknąć stronę prawym przyciskiem myszy, a następnie wybrać plikView page sourceopcja. Następnie z tej strony otrzymamy dane, które nas interesują, w postaci HTML. Ale głównym problemem są białe znaki i formatowanie, które jest dla nas trudne do sformatowania.

Inspekcja źródła strony, klikając opcję Sprawdź element

To kolejny sposób analizy strony internetowej. Ale różnica polega na tym, że rozwiąże problem formatowania i białych znaków w kodzie źródłowym strony internetowej. Możesz to zaimplementować, klikając prawym przyciskiem myszy, a następnie wybierając plikInspect lub Inspect elementopcja z menu. Dostarcza informacji o konkretnym obszarze lub elemencie tej strony internetowej.

Różne sposoby wyodrębniania danych ze strony internetowej

Następujące metody są najczęściej używane do wyodrębniania danych ze strony internetowej -

Wyrażenie regularne

Są to wysoce wyspecjalizowane języki programowania osadzone w Pythonie. Możemy to wykorzystaćremoduł Pythona. Nazywa się to również RE lub wyrażeniami regularnymi lub wzorcami wyrażeń regularnych. Za pomocą wyrażeń regularnych możemy określić pewne reguły dla możliwego zestawu ciągów, które chcemy dopasować z danych.

Jeśli chcesz dowiedzieć się więcej o wyrażeniach regularnych, przejdź do łącza https://www.tutorialspoint.com/automata_theory/regular_expressions.htma jeśli chcesz dowiedzieć się więcej o module re lub wyrażeniach regularnych w Pythonie, możesz skorzystać z łącza https://www.tutorialspoint.com/python/python_reg_expressions.htm .

Przykład

W poniższym przykładzie zamierzamy pobrać dane o Indiach z http://example.webscraping.com po dopasowaniu zawartości <td> za pomocą wyrażenia regularnego.

import re
import urllib.request
response =
   urllib.request.urlopen('http://example.webscraping.com/places/default/view/India-102')
html = response.read()
text = html.decode()
re.findall('<td class="w2p_fw">(.*?)</td>',text)

Wynik

Odpowiednie wyjście będzie takie, jak pokazano tutaj -

[
   '<img src="/places/static/images/flags/in.png" />',
   '3,287,590 square kilometres',
   '1,173,108,018',
   'IN',
   'India',
   'New Delhi',
   '<a href="/places/default/continent/AS">AS</a>',
   '.in',
   'INR',
   'Rupee',
   '91',
   '######',
   '^(\\d{6})$',
   'enIN,hi,bn,te,mr,ta,ur,gu,kn,ml,or,pa,as,bh,sat,ks,ne,sd,kok,doi,mni,sit,sa,fr,lus,inc',
   '<div>
      <a href="/places/default/iso/CN">CN </a>
      <a href="/places/default/iso/NP">NP </a>
      <a href="/places/default/iso/MM">MM </a>
      <a href="/places/default/iso/BT">BT </a>
      <a href="/places/default/iso/PK">PK </a>
      <a href="/places/default/iso/BD">BD </a>
   </div>'
]

Zauważ, że na powyższym wyjściu możesz zobaczyć szczegółowe informacje o kraju w Indiach używając wyrażenia regularnego.

Piękna Zupa

Załóżmy, że chcemy zebrać wszystkie hiperłącza ze strony internetowej, a następnie możemy użyć parsera o nazwie BeautifulSoup, który można znaleźć bardziej szczegółowo pod adresem https://www.crummy.com/software/BeautifulSoup/bs4/doc/.Krótko mówiąc, BeautifulSoup to biblioteka Pythona do pobierania danych z plików HTML i XML. Może być używany z żądaniami, ponieważ potrzebuje danych wejściowych (dokumentu lub adresu URL), aby utworzyć obiekt zupy, ponieważ nie może samodzielnie pobrać strony internetowej. Możesz użyć następującego skryptu Python, aby zebrać tytuł strony internetowej i hiperłącza.

Instalowanie pięknej zupy

Używając pip polecenie, możemy zainstalować beautifulsoup w naszym wirtualnym środowisku lub w globalnej instalacji.

(base) D:\ProgramData>pip install bs4
Collecting bs4
   Downloading
https://files.pythonhosted.org/packages/10/ed/7e8b97591f6f456174139ec089c769f89
a94a1a4025fe967691de971f314/bs4-0.0.1.tar.gz
Requirement already satisfied: beautifulsoup4 in d:\programdata\lib\sitepackages
(from bs4) (4.6.0)
Building wheels for collected packages: bs4
   Running setup.py bdist_wheel for bs4 ... done
   Stored in directory:
C:\Users\gaurav\AppData\Local\pip\Cache\wheels\a0\b0\b2\4f80b9456b87abedbc0bf2d
52235414c3467d8889be38dd472
Successfully built bs4
Installing collected packages: bs4
Successfully installed bs4-0.0.1

Przykład

Zauważ, że w tym przykładzie rozszerzamy powyższy przykład zaimplementowany z modułem żądań python. Używamyr.text do tworzenia obiektu zupy, który będzie dalej używany do pobierania szczegółów, takich jak tytuł strony internetowej.

Najpierw musimy zaimportować niezbędne moduły Pythona -

import requests
from bs4 import BeautifulSoup

W poniższym wierszu kodu używamy żądań do wykonania żądań HTTP GET dla adresu URL: https://authoraditiagarwal.com/ wykonując żądanie GET.

r = requests.get('https://authoraditiagarwal.com/')

Teraz musimy utworzyć obiekt Soup w następujący sposób -

soup = BeautifulSoup(r.text, 'lxml')
print (soup.title)
print (soup.title.text)

Wynik

Odpowiednie wyjście będzie takie, jak pokazano tutaj -

<title>Learn and Grow with Aditi Agarwal</title>
Learn and Grow with Aditi Agarwal

Lxml

Inną biblioteką Pythona, którą omówimy do skrobania stron internetowych, jest lxml. Jest to wysokowydajna biblioteka analizująca HTML i XML. Jest stosunkowo szybki i prosty. Więcej o tym przeczytasz nahttps://lxml.de/.

Instalowanie lxml

Za pomocą polecenia pip możemy zainstalować lxml w naszym wirtualnym środowisku lub w globalnej instalacji.

(base) D:\ProgramData>pip install lxml
Collecting lxml
   Downloading
https://files.pythonhosted.org/packages/b9/55/bcc78c70e8ba30f51b5495eb0e
3e949aa06e4a2de55b3de53dc9fa9653fa/lxml-4.2.5-cp36-cp36m-win_amd64.whl
(3.
6MB)
   100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 3.6MB 64kB/s
Installing collected packages: lxml
Successfully installed lxml-4.2.5

Przykład: wyodrębnianie danych przy użyciu lxml i żądań

W poniższym przykładzie pobieramy określony element strony internetowej z authoraditiagarwal.com używając lxml i żądań -

Najpierw musimy zaimportować żądania i html z biblioteki lxml w następujący sposób -

import requests
from lxml import html

Teraz musimy podać adres URL strony internetowej do złomowania

url = 'https://authoraditiagarwal.com/leadershipmanagement/'

Teraz musimy podać ścieżkę (Xpath) do konkretnego elementu tej strony internetowej -

path = '//*[@id="panel-836-0-0-1"]/div/div/p[1]'
response = requests.get(url)
byte_string = response.content
source_code = html.fromstring(byte_string)
tree = source_code.xpath(path)
print(tree[0].text_content())

Wynik

Odpowiednie wyjście będzie takie, jak pokazano tutaj -

The Sprint Burndown or the Iteration Burndown chart is a powerful tool to communicate
daily progress to the stakeholders. It tracks the completion of work for a given sprint
or an iteration. The horizontal axis represents the days within a Sprint. The vertical 
axis represents the hours remaining to complete the committed work.