logo

Implementacja Web Scrapingu w Pythonie za pomocą BeautifulSoup

Istnieją głównie dwa sposoby wyodrębniania danych ze strony internetowej:

  • Skorzystaj z API strony internetowej (jeśli istnieje). Na przykład Facebook ma interfejs API Facebook Graph, który umożliwia pobieranie danych opublikowanych na Facebooku.
  • Uzyskaj dostęp do kodu HTML strony internetowej i wyodrębnij z niego przydatne informacje/dane. Technika ta nazywa się skrobaniem sieci, zbieraniem danych z sieci lub ekstrakcją danych sieciowych.

W tym artykule omówiono kroki związane ze skrobaniem stron internetowych przy użyciu implementacji frameworka do skrobania sieci w języku Python o nazwie Beautiful Soup. Kroki związane ze skrobaniem sieci:

  1. Wyślij żądanie HTTP na adres URL strony internetowej, do której chcesz uzyskać dostęp. Serwer odpowiada na żądanie, zwracając zawartość HTML strony internetowej. Do tego zadania użyjemy biblioteki HTTP innej firmy do obsługi żądań Pythona.
  2. Po uzyskaniu dostępu do treści HTML pozostaje nam zadanie przeanalizowania danych. Ponieważ większość danych HTML jest zagnieżdżona, nie możemy wyodrębnić danych po prostu poprzez przetwarzanie ciągów znaków. Potrzebny jest parser, który może utworzyć strukturę zagnieżdżoną/drzewiastą danych HTML. Dostępnych jest wiele bibliotek analizatora składni HTML, ale najbardziej zaawansowaną jest html5lib.
  3. Teraz pozostaje nam tylko nawigować i przeszukiwać utworzone przez nas drzewo analizy, czyli przemierzanie drzewa. Do tego zadania użyjemy innej biblioteki Pythona innej firmy, Piękna zupa . Jest to biblioteka Pythona służąca do wyciągania danych z plików HTML i XML.

Krok 1: Instalowanie wymaganych bibliotek innych firm



  • Najłatwiejszym sposobem zainstalowania bibliotek zewnętrznych w Pythonie jest użycie pip. pypeć to system zarządzania pakietami używany do instalowania i zarządzania pakietami oprogramowania napisanymi w języku Python. Wszystko, co musisz zrobić, to:
pip install requests pip install html5lib pip install bs4>

Krok 2: Dostęp do treści HTML ze strony internetowej

Pyton


string.replaceall Java



import> requests> URL>=> 'https:>/>/>www.techcodeview.com>/>data>->structures>/>'> r>=> requests.get(URL)> print>(r.content)>

>

1 milion ile 0

>

Spróbujmy zrozumieć ten fragment kodu.

  • Przede wszystkim zaimportuj bibliotekę żądań.
  • Następnie określ adres URL strony internetowej, którą chcesz zeskrobać.
  • Wyślij żądanie HTTP na podany adres URL i zapisz odpowiedź z serwera w obiekcie odpowiedzi o nazwie r.
  • Teraz, gdy wydrukuj r.content, aby uzyskać surowa treść HTML strony internetowej. Jest typu „string”.

Uwaga: czasami może pojawić się błąd Nie zaakceptowano, więc spróbuj dodać klienta użytkownika przeglądarki, jak poniżej. Znajdź tutaj swojego agenta użytkownika na podstawie urządzenia i przeglądarki https://deviceatlas.com/blog/list-of-user-agent-strings

Python3




headers>=> {>'User-Agent'>:>'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246'>}> # Here the user agent is for Edge browser on windows 10. You can find your browser user agent from the above given link.> r>=> requests.get(url>=>URL, headers>=>headers)> print>(r.content)>

wybierz z wielu tabel sql
>

>

Krok 3: Analizowanie zawartości HTML

Pyton




#This will not run on online IDE> import> requests> from> bs4>import> BeautifulSoup> > URL>=> 'http:>/>/>www.values.com>/>inspirational>->quotes'> r>=> requests.get(URL)> > soup>=> BeautifulSoup(r.content,>'html5lib'>)># If this line causes an error, run 'pip install html5lib' or install html5lib> print>(soup.prettify())>

>

>

Naprawdę miłą rzeczą w bibliotece BeautifulSoup jest to, że jest zbudowana na bazie bibliotek do analizowania HTML, takich jak html5lib, lxml, html.parser itp. Zatem obiekt BeautifulSoup i określona biblioteka parsera mogą być tworzone w tym samym czasie. W powyższym przykładzie

soup = BeautifulSoup(r.content, 'html5lib')>

Tworzymy obiekt BeautifulSoup przekazując dwa argumenty:

    r.content : Jest to surowa treść HTML. html5lib : Określenie parsera HTML, którego chcemy użyć.

Teraz zupa.upiększ() jest drukowany, daje wizualną reprezentację drzewa analizy utworzonego na podstawie surowej zawartości HTML. Krok 4: Wyszukiwanie i nawigacja po drzewie analizy Teraz chcielibyśmy wyodrębnić przydatne dane z zawartości HTML. Obiekt zupy zawiera wszystkie dane w zagnieżdżonej strukturze, które można programowo wyodrębnić. W naszym przykładzie skrobamy stronę zawierającą kilka cytatów. Chcielibyśmy więc stworzyć program, który zapisałby te cytaty (i wszystkie istotne informacje na ich temat).

zmień nazwę katalogu w systemie Linux

Pyton




#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)>

>

>

Zanim przejdziesz dalej, zalecamy przejrzenie zawartości HTML strony internetowej, którą wydrukowaliśmy metodą zupa.prettify() i spróbowanie znaleźć wzór lub sposób na nawigację do cytatów.

  • Zauważono, że wszystkie cudzysłowy znajdują się w kontenerze div, którego identyfikator to „all_quotes”. Zatem znajdujemy element div (określany w powyższym kodzie jako tabela) za pomocą znajdować() metoda :
table = soup.find('div', attrs = {'id':'all_quotes'})>
  • Pierwszy argument to tag HTML, który chcesz przeszukać, a drugi argument to element typu słownikowego, który określa dodatkowe atrybuty powiązane z tym tagiem. znajdować() Metoda zwraca pierwszy pasujący element. Możesz spróbować wydrukować tabela.prettify() aby zrozumieć, co robi ten fragment kodu.
  • Teraz w elemencie tabeli można zauważyć, że każdy cudzysłów znajduje się w kontenerze div, którego klasą jest cudzysłów. Zatem iterujemy po każdym kontenerze div, którego klasą jest cudzysłów. Tutaj używamy metody findAll(), która jest podobna do metody find pod względem argumentów, ale zwraca listę wszystkich pasujących elementów. Każdy cytat jest teraz iterowany przy użyciu zmiennej o nazwie wiersz. Oto przykładowa treść HTML wiersza dla lepszego zrozumienia: Rozważmy teraz ten fragment kodu:
for row in table.find_all_next('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)>
  • Tworzymy słownik, w którym zapisywane są wszystkie informacje o wycenie. Dostęp do zagnieżdżonej struktury można uzyskać za pomocą notacji kropkowej. Aby uzyskać dostęp do tekstu wewnątrz elementu HTML, używamy .tekst:
quote['theme'] = row.h5.text>
  • Możemy dodawać, usuwać, modyfikować i uzyskiwać dostęp do atrybutów tagu. Odbywa się to poprzez traktowanie znacznika jako słownika:
quote['url'] = row.a['href']>
  • Na koniec wszystkie cytaty są dołączane do listy o nazwie cytaty.
  • Na koniec chcielibyśmy zapisać wszystkie nasze dane w jakimś pliku CSV.
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 plik CSV o nazwie inspirujące_cytaty.csv i zapisujemy wszystkie zawarte w nim cytaty do dalszego wykorzystania.

To był prosty przykład tworzenia skrobaka sieciowego w Pythonie. Stąd możesz spróbować usunąć dowolną inną wybraną witrynę. W przypadku jakichkolwiek pytań, zamieść je poniżej w sekcji komentarzy.

enkapsulacja Java

Notatka : Web Scraping jest w wielu przypadkach uważany za nielegalny. Może to również spowodować trwałe zablokowanie Twojego adresu IP przez witrynę internetową. Ten blog jest tworzony przez Nihil Kumar .