Zdrap stronę internetową za pomocą tego pięknego samouczka Pythona zupy

Zdrap stronę internetową za pomocą tego pięknego samouczka Pythona zupy

Beautiful Soup to biblioteka Pythona o otwartym kodzie źródłowym. Wykorzystuje parsery nawigacyjne do zeskrobywania zawartości plików XML i HTML. Potrzebujesz danych do kilku celów analitycznych. Jednakże, jeśli jesteś nowy w Pythonie i web scrapingu, biblioteka Beautiful Soup Pythona jest warta wypróbowania w projekcie web scrapingu.





Dzięki otwartej bibliotece Beautiful Soup Pythona możesz uzyskiwać dane przez scraping dowolnej części lub elementu strony internetowej z maksymalną kontrolą nad procesem. W tym artykule przyjrzymy się, jak wykorzystać Beautiful Soup do zeskrobania strony internetowej.





Jak zainstalować piękną zupę i zacząć z nią korzystać?

Zanim przejdziemy dalej, w tym samouczku Beautiful Soup użyjemy Pythona 3 i pięknazupa4 , najnowsza wersja Pięknej Zupy. Upewnij się, że stworzyć wirtualne środowisko Pythona aby odizolować twój projekt i jego pakiety od tych na twoim lokalnym komputerze.





najlepsze miejsce do sprzedaży części komputerowych

Aby rozpocząć, musisz zainstalować bibliotekę Beautiful Soup w swoim środowisku wirtualnym. Piękna zupa jest dostępna jako pakiet PyPi dla wszystkich systemów operacyjnych, więc możesz ją zainstalować za pomocą pip zainstaluj piękną zupę4 polecenie za pośrednictwem terminala.

Jeśli jednak korzystasz z Debian lub Linux, powyższe polecenie nadal działa, ale możesz zainstalować je za pomocą menedżera pakietów, uruchamiając apt-get zainstaluj python3-bs4 .



Piękna zupa nie pobiera bezpośrednio adresów URL. Działa tylko z gotowymi plikami HTML lub XML. Oznacza to, że nie możesz bezpośrednio przekazać do niego adresu URL. Aby rozwiązać ten problem, musisz uzyskać adres URL docelowej strony internetowej z biblioteką żądań Pythona przed przesłaniem go do Beautiful Soup.

Aby udostępnić tę bibliotekę dla swojego skrobaka, uruchom prośby o instalację pip polecenie za pośrednictwem terminala.





Aby użyć biblioteki parsera XML, uruchom pip zainstaluj lxml aby go zainstalować.

Sprawdź stronę internetową, którą chcesz zeskrobać

Przed zeskrobaniem jakiejkolwiek strony internetowej, której nie znasz, najlepszą praktyką jest sprawdzenie jej elementów. Możesz to zrobić, przełączając przeglądarkę w tryb programisty. To całkiem proste użyj Chrome DevTools jeśli używasz przeglądarki Google Chrome.





Jednak konieczne jest sprawdzenie strony internetowej, aby dowiedzieć się więcej o jej tagach HTML, atrybutach, klasach i identyfikatorach. W ten sposób ujawniają się podstawowe elementy strony internetowej i jej typy zawartości.

Pomaga również opracować najlepsze strategie, których możesz użyć, aby uzyskać dokładne dane ze strony internetowej i jak je uzyskać.

Jak zeskrobać dane strony internetowej za pomocą pięknej zupy?

Teraz, gdy masz już wszystko gotowe, otwórz preferowany edytor kodu i utwórz nowy plik Pythona, nadając mu wybraną nazwę. Możesz jednak również korzystać z internetowych IDE, takich jak Jupyter Notebook jeśli nie znasz obsługi Pythona za pomocą wiersza poleceń.

Następnie zaimportuj niezbędne biblioteki:

from bs4 import BeautifulSoup
import requests

Najpierw zobaczmy, jak działa biblioteka żądań:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com')
print(website)

Po uruchomieniu powyższego kodu zwraca on status 200, co oznacza, że ​​Twoje żądanie zakończyło się powodzeniem. W przeciwnym razie otrzymasz status 400 lub inne statusy błędów, które wskazują na nieudane żądanie GET.

Pamiętaj, aby zawsze zastąpić adres URL witryny w nawiasie docelowym adresem URL.

Po uzyskaniu witryny z dostwać żądanie, następnie przekazujesz go do Beautiful Soup, który może teraz odczytać zawartość jako pliki HTML lub XML za pomocą wbudowanego parsera XML lub HTML, w zależności od wybranego formatu.

Spójrz na następny fragment kodu, aby zobaczyć, jak to zrobić za pomocą parsera HTML:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup)

Powyższy kod zwraca cały DOM strony internetowej wraz z jej zawartością.

Możesz również uzyskać bardziej wyrównaną wersję DOM, używając upiększać metoda. Możesz to wypróbować, aby zobaczyć jego wyniki:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup.prettify())

Możesz także uzyskać czystą zawartość strony internetowej bez ładowania jej elementu za pomocą .tekst metoda:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup.text)

Jak zeskrobać zawartość strony internetowej według nazwy tagu?

Możesz także zeskrobać zawartość w konkretnym tagu za pomocą Pięknej zupy. Aby to zrobić, musisz podać nazwę tagu docelowego w swoim żądaniu zgarniacza Piękna zupa.

Na przykład zobaczmy, jak możesz uzyskać zawartość w h2 tagi strony internetowej.

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup.h2)

W powyższym fragmencie kodu zupa.h2 zwraca pierwszy h2 element strony internetowej i ignoruje resztę. Aby załadować wszystkie h2 elementy, możesz użyć Znajdź wszystko wbudowana funkcja i dla pętla Pythona:

jak zsynchronizować kontroler Xbox 1?
from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
h2tags = soup.find_all('h2')
for soups in h2tags:
print(soups)

Ten blok kodu zwraca wszystko h2 elementy i ich zawartość. Możesz jednak pobrać zawartość bez ładowania tagu, używając .strunowy metoda:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
h2tags = soup.find_all('h2')
for soups in h2tags:
print(soups.string)

Możesz użyć tej metody dla dowolnego tagu HTML. Wszystko, co musisz zrobić, to wymienić h2 tag z tym, który lubisz.

Możesz jednak zeskrobać więcej tagów, przekazując listę tagów do Znajdź wszystko metoda. Na przykład poniższy blok kodu zeskrobuje zawartość do , h2 , oraz tytuł tagi:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
tags = soup.find_all(['a', 'h2', 'title'])
for soups in tags:
print(soups.string)

Jak zeskrobać stronę internetową za pomocą identyfikatora i nazwy klasy

Po sprawdzeniu strony internetowej za pomocą DevTools, możesz dowiedzieć się więcej o atrybutach id i class, które przechowują każdy element w jego DOM. Gdy masz tę informację, możesz zeskrobać tę stronę za pomocą tej metody. Jest to przydatne, gdy zawartość komponentu docelowego wychodzi z bazy danych.

Możesz użyć odnaleźć metoda dla zgarniaczy identyfikatora i klasy. w przeciwieństwie do Znajdź wszystko metoda zwracająca iterowalny obiekt, the odnaleźć metoda działa na pojedynczym, nieiterowalnym celu, którym jest NS w tym przypadku. Więc nie musisz używać dla pętla z nim.

Spójrzmy na przykład, jak możesz zeskrobać zawartość poniższej strony za pomocą identyfikatora:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
id = soup.find(id = 'enter the target id here')
print(id.text)

Aby to zrobić dla nazwy klasy, zastąp znak NS z klasa . Jednak pisanie klasa bezpośrednio powoduje zamieszanie w składni, ponieważ Python postrzega ją jako słowo kluczowe. Aby ominąć ten błąd, musisz napisać podkreślenie przed klasą w ten sposób: klasa_ .

W istocie linia zawierająca identyfikator staje się:

my_classes = soup.find(class_ = 'enter the target class name here')
print(my_classes.text)

Możesz jednak również zeskrobać stronę internetową, wywołując określoną nazwę tagu z odpowiadającym jej identyfikatorem lub klasą:

data = soup.find_all('div', class_ = 'enter the target class name here')
print(data)

Jak zrobić skrobak wielokrotnego użytku z piękną zupą?

Możesz utworzyć klasę i umieścić cały poprzedni kod razem w funkcji w tej klasie, aby utworzyć skrobak wielokrotnego użytku, który pobiera zawartość niektórych tagów i ich identyfikatory. Możemy to zrobić, tworząc funkcję, która przyjmuje pięć argumentów: adres URL, dwie nazwy znaczników i odpowiadające im identyfikatory lub klasy.

Załóżmy, że chcesz zeskrobać cenę koszul z witryny e-commerce. Poniższa przykładowa klasa skrobaka wyodrębnia tagi ceny i koszuli z odpowiadającymi im identyfikatorami lub klasami, a następnie zwraca je jako ramkę danych Pandy z nazwami kolumn „Cena” i Nazwa_koszulki.

Upewnij się, że pip zainstaluj pandy przez terminal, jeśli jeszcze tego nie zrobiłeś.

import pandas as pd
class scrapeit:
try:
def scrape(website=None, tag1=None, id1=None, tag2=None, id2=None):
if not (website and tag1 and id1 and tag2 and id2)==None:
try:
page = requests.get(website)
soup = BeautifulSoup(page.content, 'html.parser')
infotag1 = soup.find_all(tag1, id1)
infotag2 = soup.find_all(tag2, id2)
priced = [prices.text for prices in infotag1]
shirt = [shirts.text for shirts in infotag2]
data = {
'Price':priced,
'Shirt_name':shirt}
info = pd.DataFrame(data, columns=['Price', 'Shirt_name'])
print(info)
except:
print('Not successful')
else:
print('Oops! Please enter a website, two tags and thier corresponding ids')
except:
print('Not successful!')

Skrobaczka, którą właśnie stworzyłeś, jest modułem wielokrotnego użytku i możesz go zaimportować i użyć w innym pliku Pythona. Aby zadzwonić do zeskrobać funkcja ze swojej klasy, której używasz scrapeit.scrape('Adres URL witryny', 'price_tag', 'price_id', 'shirt_tag', 'shirt_id') . Jeśli nie podasz adresu URL i innych parametrów, w przeciwnym razie sugerowane jest, aby to zrobić.

Aby użyć tego scapera w innym pliku Pythona, możesz go zaimportować w ten sposób:

from scraper_module import scrapeit
scrapeit.scrape('URL', 'price_tag', 'price_id', 'shirt_tag', 'shirt_id')

Notatka: skrobak_moduł to nazwa pliku Pythona zawierającego klasę scrapera.

Możesz również sprawdzić Piękna dokumentacja zupy jeśli chcesz głębiej zagłębić się w to, jak najlepiej go wykorzystać.

Piękna zupa to cenne narzędzie do skrobania sieci

Beautiful Soup to potężny program do zgarniania ekranu w Pythonie, który daje Ci kontrolę nad tym, w jaki sposób Twoje dane przechodzą podczas skrobania. Jest to cenne narzędzie biznesowe, ponieważ umożliwia dostęp do danych internetowych konkurencji, takich jak ceny, trendy rynkowe i inne.

jak naprawić połączenie Wi-Fi w systemie Windows 10

Chociaż w tym artykule stworzyliśmy narzędzie do skrobania tagów, nadal możesz bawić się tą potężną biblioteką Pythona, aby tworzyć bardziej przydatne narzędzia do skrobania.

Udział Udział Ćwierkać E-mail Najlepsze narzędzia do skrobania sieci w Internecie

Potrzebujesz zbierać dane ze stron internetowych w celach analitycznych? Te narzędzia do zgarniania sieci ułatwiają to.

Czytaj dalej
Powiązane tematy
  • Programowanie
  • Pyton
O autorze Idisou Omisola(94 opublikowane artykuły)

Idowu pasjonuje się każdą inteligentną technologią i produktywnością. W wolnych chwilach bawi się kodowaniem, a gdy się nudzi, przechodzi na szachownicę, ale od czasu do czasu uwielbia też oderwać się od rutyny. Jego pasja do pokazywania ludziom drogi do nowoczesnych technologii motywuje go do pisania więcej.

Więcej od Idowu Omisola

Zapisz się do naszego newslettera

Dołącz do naszego newslettera, aby otrzymywać porady techniczne, recenzje, bezpłatne e-booki i ekskluzywne oferty!

Kliknij tutaj, aby zasubskrybować