ciemne logo proxyscrape

Web Scraping dla początkujących: Podstawy i frameworki w Pythonie

Python, Scraping, Mar-01-20215 minut czytania

Web scraping to sztuka wyodrębniania danych ze strony internetowej w zautomatyzowanej i dobrze zorganizowanej formie. Mogą istnieć różne formaty skrobania danych, takie jak Excel, CSV i wiele innych. Niektóre praktyczne zastosowania web scrapingu to badania rynku, monitorowanie cen, analiza cen, badania rynku i generowanie leadów. Web scraping jest instrumentalną techniką pozwalającą na jak najlepsze wykorzystanie publicznie dostępnych danych i podejmowanie mądrzejszych decyzji. Dlatego każdy powinien znać przynajmniej podstawy web scrapingu, aby móc z niego korzystać.

W tym artykule omówimy podstawy skrobania stron internetowych, bawiąc się frameworkiem Pythona o nazwie Beautiful Soup. Naszym środowiskiem programistycznym będzie Google Colab.

Kroki związane z Web Scrapingiem przy użyciu Pythona

  1. Przede wszystkim musimy zidentyfikować stronę internetową, którą chcemy zeskrobać i wysłać żądanie HTTP pod ten adres URL. W odpowiedzi serwer zwróci zawartość HTML strony internetowej. Do tego zadania użyjemy biblioteki HTTP innej firmy do obsługi żądań Pythona.
  2. Gdy już uda nam się uzyskać dostęp do treści HTML, głównym zadaniem jest przeanalizowanie danych. Nie możemy przetwarzać danych po prostu poprzez przetwarzanie ciągów znaków, ponieważ większość danych HTML jest zagnieżdżona. W tym miejscu pojawia się parser, który tworzy zagnieżdżoną strukturę drzewa danych HTML. Jedną z najbardziej zaawansowanych bibliotek parsera HTML jest html5lib.
  3. Następnym krokiem jest przeszukiwanie drzewa, które obejmuje nawigację i przeszukiwanie drzewa parsowania. W tym celu będziemy używać Beautiful Soup (biblioteki Pythona innej firmy). Ta biblioteka Pythona służy do wyciągania danych z plików HTML i XML.

Teraz zobaczyliśmy, jak działa proces skrobania stron internetowych. Zacznijmy od kodowania,

Krok 1: Instalacja bibliotek firm trzecich

W większości przypadków Colab jest dostarczany z już zainstalowanymi pakietami innych firm. Ale nadal, jeśli instrukcje importu nie działają, możesz rozwiązać ten problem, instalując kilka pakietów za pomocą następujących poleceń, 

pip install requests
pip install html5lib
pip install bs4
Krok 2: Uzyskanie dostępu do zawartości HTML ze strony internetowej
importuj żądania 
URL = "http://www.values.com/inspirational-quotes"
r = requests.get(URL) 
print(r.content)

Wyświetli on dane wyjściowe formularza,

Spróbujmy zrozumieć ten fragment kodu,

  1. W pierwszym wierszu kodu importujemy bibliotekę requests.
  2. Następnie określamy adres URL strony internetowej, którą chcemy zeskrobać.
  3. W trzecim wierszu kodu wysyłamy żądanie HTTP do określonego adresu URL i zapisujemy odpowiedź serwera w obiekcie o nazwie r.
  4. Na koniec print(r.content) zwraca nieprzetworzoną zawartość HTML strony internetowej.
Krok 3: Analizowanie zawartości HTML
import requests 
from bs4 import BeautifulSoup 
  
URL = "http://www.values.com/inspirational-quotes"
r = requests.get(URL) 
  
soup = BeautifulSoup(r.content, 'html5lib') # Jeśli ta linia powoduje błąd, uruchom 'pip install html5lib' lub zainstaluj html5lib 
print(soup.prettify())
Wyjście:

Daje to bardzo długi wynik; niektóre zrzuty ekranu są załączone poniżej.

Jedną z największych zalet Beautiful Soup jest to, że jest on oparty na bibliotekach parsujących HTML, takich jak html5lib, html.parse, lxml itp., co pozwala na jednoczesne tworzenie obiektu Beautiful Soap i określanie biblioteki parsera. 

W powyższym kodzie utworzyliśmy obiekt Beautiful Soup, przekazując dwa argumenty:

r.content: Surowa zawartość HTML.
html5lib: Określa parser HTML, którego chcemy użyć.

Na koniec wypisywana jest funkcja soup.prettify(), która nadaje drzewu parsowania wizualną reprezentację z surowej zawartości HTML.

Krok 4: Przeszukiwanie i nawigacja po drzewie parsowania

Teraz nadszedł czas, aby wyodrębnić niektóre przydatne dane z treści HTML. Obiekty soup zawierają dane w formie zagnieżdżonej struktury, które mogą być dalej wyodrębniane programowo. W naszym przypadku skrobiemy stronę internetową składającą się z kilku cytatów. Stworzymy więc program, który rozwiąże te cytaty. Kod znajduje się poniżej,

#Python program to scrape website  
#and save quotes from website 
import requests 
from bs4 import BeautifulSoup 
import csv 
   
URL = "http://www.values.com/inspirational-quotes"
r = requests.get(URL) 
   
soup = BeautifulSoup(r.content, 'html5lib') 
   
quotes=[]  # a list to store quotes 
   
table = soup.find('div', attrs = {'id':'all_quotes'})  
   
for row in table.findAll('div', attrs = {'class':'col-6 col-lg-3 text-center margin-30px-bottom sm-margin-30px-top'}): 
    quote = {} 
    quote['theme'] = row.h5.text 
    quote['url'] = row.a['href'] 
    quote['img'] = row.img['src'] 
    quote['lines'] = row.img['alt'].split(" #")[0] 
    quote['author'] = row.img['alt'].split(" #")[1] 
    quotes.append(quote) 
   
filename = 'inspirational_quotes.csv'
with open(filename, 'w', newline='') as f: 
    w = csv.DictWriter(f,['theme','url','img','lines','author']) 
    w.writeheader() 
    for quote in quotes:
        w.writerow(quote)

Przed przejściem dalej zaleca się przejrzenie zawartości HTML strony internetowej, którą wydrukowaliśmy za pomocą metody soup.prettify() i spróbowanie znalezienia wzorca nawigacji do cytatów.

Teraz wyjaśnię, jak to zrobić w powyższym kodzie, 

Jeśli przejdziemy przez cytaty, okaże się, że wszystkie cytaty znajdują się wewnątrz kontenera div, którego identyfikator to "all_quotes". Znajdziemy więc ten element div (określany w kodzie jako tabela) za pomocą metody find():

table = soup.find('div', attrs = {'id':'all_quotes'})

Pierwszym argumentem tej funkcji jest znacznik HTML, który należy wyszukać. Drugim argumentem jest element typu słownikowego określający dodatkowe atrybuty związane z tym znacznikiem. metoda find() zwraca pierwszy pasujący element. Można wypróbować table.prettify(), aby lepiej zrozumieć działanie tego fragmentu kodu.

Jeśli skupimy się na elemencie table, kontener div zawiera każdy cytat, którego klasą jest quote. Przejdziemy więc pętlą przez każdy kontener div, którego klasą jest quote.

Tutaj bardzo przydatna jest metoda findAll(), która jest podobna do metody find() pod względem argumentów, ale główną różnicą jest to, że zwraca listę wszystkich pasujących elementów. 

Iterujemy po każdym cytacie używając zmiennej o nazwie row.

Przeanalizujmy przykładową zawartość wiersza HTML dla lepszego zrozumienia:

Rozważmy teraz następujący fragment kodu:

for row in table.findAll('div', attrs = {'class':'col-6 col-lg-3 text-center margin-30px-bottom sm-margin-30px-top'}): 
    quote = {} 
    quote['theme'] = row.h5.text 
    quote['url'] = row.a['href'] 
    quote['img'] = row.img['src'] 
    quote['lines'] = row.img['alt'].split(" #")[0] 
    quote['author'] = row.img['alt'].split(" #")[1] 
    quotes.append(quote) 
   
filename = 'inspirational_quotes.csv'
with open(filename, 'w', newline='') as f: 
    w = csv.DictWriter(f,['theme','url','img','lines','author']) 
    w.writeheader() 
    for quote in quotes:
        w.writerow(quote)
Tutaj tworzymy słownik, aby zapisać wszystkie informacje o cytacie. Notacja kropkowa służy do uzyskiwania dostępu do zagnieżdżonej struktury. Aby uzyskać dostęp do tekstu wewnątrz elementu HTML, używamy .text:

Co więcej, możemy również dodawać, usuwać, modyfikować i uzyskiwać dostęp do atrybutów tagu. Zrobiliśmy to, traktując tag jako słownik:

quote['url'] = row.a['href']
Następnie dołączyliśmy wszystkie cytaty do listy o nazwie quotes

Na koniec wygenerujemy plik CSV, który posłuży do zapisania naszych danych.

filename = 'inspirational_quotes.csv'

Nazwaliśmy nasz plik inspirational_qoutes.csv i zapisaliśmy w nim wszystkie cytaty, aby móc z nich korzystać także w przyszłości. Oto jak wygląda nasz plik inspirational_quotes.csv,

W powyższym wyniku pokazaliśmy tylko trzy wiersze, ale w rzeczywistości jest ich 33. Oznacza to, że wyodrębniliśmy znaczną ilość danych ze strony internetowej, wykonując tylko prostą próbę. 

Uwaga: W niektórych przypadkach skrobanie stron internetowych jest uważane za nielegalne, co może spowodować trwałe zablokowanie adresu IP przez stronę internetową. Należy więc zachować ostrożność i skrobać tylko te witryny i strony internetowe, które na to pozwalają. 

Dlaczego warto korzystać z Web Scrapingu?

Niektóre z rzeczywistych scenariuszy, w których skrobanie stron internetowych może być niezwykle przydatne, to,

Generowanie leadów
Jednym z kluczowych działań sprzedażowych dla większości firm jest generowanie leadów. Według raportu Hubspot, generowanie ruchu i leadów było priorytetem numer jeden dla 61% inbound marketerów. Skrobanie stron internetowych może odegrać w tym rolę, umożliwiając marketerom dostęp do uporządkowanych list potencjalnych klientów w całym Internecie.
Badania rynku 

Przeprowadzanie właściwych badań rynkowych jest najważniejszym elementem każdego prowadzonego biznesu, a zatem wymaga bardzo dokładnych informacji. Analiza rynku jest napędzana przez dużą ilość, wysoką jakość i bardzo wnikliwe skrobanie stron internetowych, które mogą mieć różne rozmiary i kształty. Dane te mogą być bardzo przydatnym narzędziem do przeprowadzania analizy biznesowej. Badania rynku koncentrują się głównie na następujących aspektach biznesowych:

  • Może być wykorzystywany do analizy trendów rynkowych.
  • Może nam to pomóc w przewidywaniu cen rynkowych.
  • Pozwala to na optymalizację punktów wejścia zgodnie z potrzebami klienta.
  • Może to być bardzo pomocne w monitorowaniu konkurencji.
Tworzenie ofert

Skrobanie stron internetowych może być bardzo przydatną i owocną techniką tworzenia ofert zgodnie z typami działalności, na przykład nieruchomościami i sklepami eCommerce. Narzędzie do skrobania stron internetowych może pomóc firmie przeglądać tysiące ofert produktów konkurencji w ich sklepie i zbierać wszystkie niezbędne informacje, takie jak ceny, szczegóły produktu, warianty i recenzje. Można to zrobić w ciągu zaledwie kilku godzin, co może dodatkowo pomóc w tworzeniu własnych ofert, koncentrując się w ten sposób bardziej na wymaganiach klientów.

Porównaj informacje

Web scraping pomaga różnym firmom gromadzić i porównywać informacje oraz dostarczać te dane w znaczący sposób. Rozważmy strony porównujące ceny, które wyodrębniają recenzje, funkcje i wszystkie istotne szczegóły z różnych innych stron internetowych. Szczegóły te mogą być kompilowane i dostosowywane w celu łatwego dostępu. W ten sposób można wygenerować listę od różnych sprzedawców detalicznych, gdy kupujący wyszukuje określony produkt. W związku z tym skrobanie stron internetowych znacznie ułatwi konsumentowi proces podejmowania decyzji, pokazując różne analizy produktów zgodnie z zapotrzebowaniem konsumentów.

Informacje zbiorcze

Web scraping może pomóc w agregowaniu informacji i wyświetlaniu ich w zorganizowanej formie dla użytkownika. Rozważmy przypadek agregatorów wiadomości. Web scraping będzie wykorzystywany w następujący sposób,

  1. Korzystając ze skrobania stron internetowych, można zebrać najbardziej dokładne i odpowiednie artykuły.
  2. Może to pomóc w zbieraniu linków do przydatnych filmów i artykułów.
  3. Tworzenie osi czasu zgodnie z wiadomościami.
  4. Wychwytywanie trendów według czytelników wiadomości.

W tym artykule przeprowadziliśmy dogłębną analizę tego, jak działa skrobanie stron internetowych, biorąc pod uwagę praktyczny przypadek użycia. Wykonaliśmy również bardzo proste ćwiczenie polegające na stworzeniu prostego skrobaka internetowego w Pythonie. Teraz możesz skrobać dowolne inne strony internetowe. Ponadto widzieliśmy również kilka rzeczywistych scenariuszy, w których skrobanie stron internetowych może odgrywać znaczącą rolę. Mamy nadzieję, że artykuł się podobał i wszystko było jasne, interesujące i zrozumiałe.  

Jeśli szukasz niesamowitych usług proxy dla swoich projektów skrobania stron internetowych, nie zapomnij spojrzeć na ProxyScrapeproxy dla użytkowników indywidualnych i proxy premium.