Piękna zupa vs. Scrapy vs. Selen: którego narzędzia do skrobania stron internetowych powinieneś użyć?
Chcesz nauczyć się web scrapingu w Pythonie, ale nie wiesz, czy użyć Beautiful Soup, Selenium czy Scrapy w swoim następnym projekcie? Chociaż wszystkie te biblioteki i frameworki Pythona są same w sobie potężne, nie zaspokajają wszystkich potrzeb związanych ze skrobaniem sieci, dlatego ważne jest, aby wiedzieć, którego narzędzia należy użyć do konkretnego zadania.
Rzućmy okiem na różnice między Beautiful Soup, Scrapy i Selenium, abyś mógł podjąć mądrą decyzję przed rozpoczęciem kolejnego projektu web scrapingu w Pythonie.
1. Łatwość użytkowania
Jeśli jesteś początkującym, twoim pierwszym wymaganiem byłaby biblioteka, która jest łatwa do nauczenia się i używania. Beautiful Soup oferuje wszystkie podstawowe narzędzia potrzebne do skrobania sieci i jest szczególnie przydatna dla osób, które mają minimalne doświadczenie z Pythonem, ale chcą rozpocząć przygodę z web scrapingiem.
Jedynym zastrzeżeniem jest to, że ze względu na swoją prostotę Beautiful Soup nie jest tak potężny w porównaniu do Scrapy lub Selenium. Programiści z doświadczeniem programistycznym mogą z łatwością opanować zarówno Scrapy, jak i Selenium, ale dla początkujących zbudowanie pierwszego projektu może zająć dużo czasu, jeśli wybiorą te frameworki zamiast Beautiful Soup.
Aby zeskrobać zawartość tagu tytułu w witrynie example.com za pomocą Beautiful Soup, użyjesz następującego kodu:
url = "https://example.com/"
res = requests.get(url).text
soup = BeautifulSoup(res, 'html.parser')
title = soup.find("title").text
print(title)
Aby osiągnąć podobne wyniki przy użyciu Selenium, napisałbyś:
url = "https://example.com"
driver = webdriver.Chrome("path/to/chromedriver")
driver.get(url)
title = driver.find_element(By.TAG_NAME, "title").get_attribute('text')
print(title)
Struktura plików projektu Scrapy składa się z wielu plików, co zwiększa jego złożoność. Poniższy kod pobiera tytuł z example.com:
import scrapy
class TitleSpider(scrapy.Spider):
name = 'title'
start_urls = ['https://example.com']
def parse(self, response):
yield {
'name': response.css('title'),
}
Jeśli chcesz wyodrębnić dane z usługi oferującej oficjalny interfejs API, rozsądną decyzją może być skorzystanie z interfejsu API zamiast tworzenia narzędzia do skrobania stron internetowych.
2. Szybkość skrobania i równoległość
Spośród tych trzech Scrapy jest wyraźnym zwycięzcą, jeśli chodzi o szybkość. Dzieje się tak, ponieważ domyślnie obsługuje równoległość. Za pomocą Scrapy możesz wysyłać wiele żądań HTTP jednocześnie, a gdy skrypt pobierze kod HTML dla pierwszego zestawu żądań, jest gotowy do wysłania kolejnej partii.
Dzięki Beautiful Soup możesz używać biblioteki wątków do wysyłania równoczesnych żądań HTTP, ale nie jest to wygodne i musisz nauczyć się wielowątkowości, aby to zrobić. W Selenium niemożliwe jest osiągnięcie równoległości bez uruchamiania wielu instancji przeglądarki.
Jeśli miałbyś uszeregować te trzy narzędzia do skrobania sieci pod względem szybkości, Scrapy jest najszybszy, a następnie Beautiful Soup i Selenium.
3. Wykorzystanie pamięci
Selenium to API do automatyzacji przeglądarek, które znalazło swoje zastosowanie w dziedzinie web scrapingu. Kiedy używasz Selenium do zeskrobywania strony internetowej, tworzy ona bezgłową instancję przeglądarki, która działa w tle. To sprawia, że Selenium jest narzędziem wymagającym dużych zasobów w porównaniu z Beautiful Soup i Scrapy.
Ponieważ te ostatnie działają całkowicie w wierszu poleceń, zużywają mniej zasobów systemowych i oferują lepszą wydajność niż Selenium.
4. Wymagania dotyczące zależności
Beautiful Soup to zbiór narzędzi do analizowania, które pomagają wyodrębnić dane z plików HTML i XML. Jest dostarczany z niczym innym. Musisz użyć bibliotek takich jak requesty lub urllib do wysyłania żądań HTTP, wbudowanych parserów do analizowania HTML/XML oraz dodatkowych bibliotek do implementacji serwerów proxy lub obsługi baz danych.
Scrapy, z drugiej strony, pochodzi z całym shebang. Otrzymujesz narzędzia do wysyłania żądań, analizowania pobranego kodu, wykonywania operacji na wyodrębnionych danych i przechowywania zeskrobanych informacji. Możesz dodać inne funkcjonalności do Scrapy za pomocą rozszerzeń i oprogramowania pośredniczącego, ale to przyjdzie później.
Dzięki Selenium pobierasz sterownik sieciowy dla przeglądarki, którą chcesz zautomatyzować. Aby zaimplementować inne funkcje, takie jak przechowywanie danych i obsługa proxy, potrzebujesz modułów innych firm.
5. Jakość dokumentacji
Ogólnie rzecz biorąc, każda dokumentacja projektu jest dobrze ustrukturyzowana i opisuje każdą metodę za pomocą przykładów. Ale skuteczność dokumentacji projektu w dużym stopniu zależy również od czytelnika.
Dokumentacja Beautiful Soup jest znacznie lepsza dla początkujących, którzy zaczynają od web scrapingu. Selenium i Scrapy mają bez wątpienia szczegółową dokumentację, ale techniczny żargon może zaskoczyć wielu nowicjuszy.
Jeśli masz doświadczenie z pojęciami i terminologiami programistycznymi, przeczytanie dowolnej z trzech dokumentacji będzie bardzo proste.
6. Obsługa rozszerzeń i oprogramowania pośredniego
Scrapy to najbardziej rozszerzalny framework Pythona do skrobania stron internetowych, kropka. Obsługuje oprogramowanie pośrednie, rozszerzenia, serwery proxy i wiele innych oraz pomaga opracować robota indeksującego dla projektów na dużą skalę.
Możesz napisać niezawodne i wydajne roboty indeksujące, implementując oprogramowanie pośrednie w Scrapy, które są w zasadzie hakami, które dodają niestandardową funkcjonalność do domyślnego mechanizmu frameworka. Na przykład HttpErrorMiddleware zajmuje się błędami HTTP, więc pająki nie muszą sobie z nimi radzić podczas przetwarzania żądań.
Oprogramowanie pośredniczące i rozszerzenia są dostępne wyłącznie w Scrapy, ale podobne wyniki można osiągnąć za pomocą Beautiful Soup i Selenium, używając dodatkowych bibliotek Pythona.
7. Renderowanie JavaScript
Selenium ma jeden przypadek użycia, w którym przewyższa inne biblioteki do skrobania stron internetowych, a mianowicie skrobanie stron internetowych obsługujących JavaScript. Chociaż możesz zeskrobać elementy JavaScript za pomocą oprogramowania pośredniego Scrapy, przepływ pracy Selenium jest najłatwiejszy i najwygodniejszy ze wszystkich.
Używasz przeglądarki do ładowania strony internetowej, wchodzisz z nią w interakcję za pomocą kliknięć i naciśnięć przycisków, a kiedy masz już zawartość, którą musisz zeskrobać na ekranie, wyodrębnij ją za pomocą selektorów CSS i XPath Selenium.
Beautiful Soup może wybierać elementy HTML za pomocą selektorów XPath lub CSS. Nie oferuje jednak funkcji zeskrobywania elementów renderowanych w JavaScript na stronie internetowej.
Łatwe przeglądanie stron internetowych dzięki Pythonowi
Internet jest pełen surowych danych. Web scraping pomaga przekształcić te dane w znaczące informacje, które można dobrze wykorzystać. Selenium jest najprawdopodobniej najbezpieczniejszym rozwiązaniem, jeśli chcesz zeskrobać stronę internetową za pomocą JavaScript lub musisz uruchomić niektóre elementy na ekranie przed wyodrębnieniem danych.
Scrapy to pełnoprawna platforma do skrobania stron internetowych dla wszystkich Twoich potrzeb, niezależnie od tego, czy chcesz napisać małego robota, czy skrobaka na dużą skalę, który wielokrotnie przeszukuje Internet w poszukiwaniu zaktualizowanych danych.
Możesz użyć Pięknej Zupy, jeśli jesteś początkującym lub potrzebujesz szybko rozwinąć skrobak. Bez względu na to, z jakiego frameworka lub biblioteki korzystasz, łatwo jest rozpocząć naukę web scrapingu w Pythonie.
Dodaj komentarz