Dlaczego złom?
Scrapy to solidna biblioteka skrobania internetowego, która zapewnia możliwość pobierania stron internetowych, obrazów i wszelkich danych, o których możesz pomyśleć z błyskawicą. Szybkość ma ogromne znaczenie w obliczeniach, a złom działa na ten temat, odwiedzając strony internetowe asynchroniczne i wykonując dużo pracy w tle, dzięki czemu całe zadanie wyglądało na łatwe.
Należy powiedzieć, że Python ma inne biblioteki, które można wykorzystać do zeskrobania danych ze stron internetowych, ale żaden nie jest porównywalny ze złomem, jeśli chodzi o wydajność.
Instalacja
Rzućmy okiem, w jaki sposób można zainstalować tę potężną bibliotekę na twoim komputerze.
Podobnie jak w przypadku większości bibliotek Pythona, możesz zainstalować skrypcję za pomocą modułu PIP:
PIP instal instalujMożesz sprawdzić, czy instalacja zakończyła się powodzeniem, importując złom w interaktywnej powładzie Pythona.
$ PythonWpisz „Pomoc”, „Copyright”, „Kredyty” lub „Licencja”, aby uzyskać więcej informacji.
>>> Importuj złomTeraz, gdy skończyliśmy z instalacją, przejdźmy do gęstości rzeczy.
Tworzenie projektu skrobania internetowego
Podczas instalacji do ścieżki dodano słowo kluczowe Screy, abyśmy mogli użyć słowa kluczowego bezpośrednio z wiersza poleceń. Korzystalibyśmy z tego, podczas korzystania z biblioteki.
Z wybranego katalogu Uruchom następujące polecenie:
Scrapy StartProject WebScraperTo stworzyłoby katalog o nazwie WebScraper W obecnym katalogu i złamaniu.plik CFG. w WebScraper katalog miałby __w tym__.PY, przedmioty.PY, Middlewares.PY, rurociągi.PY, ustawienia.py pliki i katalog o nazwie pająki.
Nasze pliki pająka i.mi. skrypt, który robi nam WebScraping, byłby przechowywany w pająki informator.
Pisanie naszego pająka
Zanim zaczniemy napisać nasz pająka, oczekuje się, że już wiemy, jaką witrynę chcemy zeskrobać. Do celów tego artykułu skrobujemy przykładową stronę internetową WebScraping: http: // Przykład.WebScraping.com.
Ta strona ma po prostu nazwy krajów i ich flagi, z różnymi stronami i będziemy złomować trzy strony. Trzy strony, nad którymi byśmy pracowali, to:
http: // przykład.WebScraping.com/miejsca/domyślne/indeks/0
http: // przykład.WebScraping.com/miejsca/domyślny/indeks/1
http: // przykład.WebScraping.com/miejsca/domyślny/indeks/2
Wracając do naszego pająka, utworzymy próbkę.PY w katalogu pająków. Z terminalu proste dotknij próbki_spider.py Polecenie pomogłoby utworzyć nowy plik.
Po utworzeniu pliku wypełniamy go następującymi wierszami kodu:
Zachwyt importowyZ najwyższego poziomu katalogu projektu uruchom następujące polecenie:
Próbka pełzania złomuPrzypomnij sobie, że daliśmy naszemu Samplespider klasa A nazwa atrybut próbka.
Po uruchomieniu tego polecenia zauważysz, że trzy pliki o nazwie Page0.HTML, Page1.HTML, strona 2.HTML są zapisywane w katalogu.
Rzućmy okiem na to, co dzieje się z kodem:
Zachwyt importowyNajpierw importujemy bibliotekę do naszej przestrzeni nazw.
Samplespider klasy (złom.Pająk):Następnie tworzymy klasę Spider, którą nazywamy Samplespider. Nasz pająk dziedziczy złamanie.Pająk. Wszystkie nasze pająki muszą odziedziczyć po złamaniu.Pająk. Po utworzeniu klasy dajemy naszemu pająkowi nazwa atrybut, to nazwa atrybut służy do przywołania pająka z terminalu. Jeśli pamiętasz, prowadziliśmy Próbka pełzania złomu polecenie uruchomienia naszego kodu.
start_urls = [Mamy również listę adresów URL do odwiedzenia pająka. Lista musi zostać wezwana start_urls. Jeśli chcesz nadać listy inną nazwę, musielibyśmy zdefiniować start_requests funkcja, która daje nam więcej możliwości. Aby dowiedzieć się więcej, możesz sprawdzić dokumentację złomową.
Niezależnie od tego, nie zapomnij dołączyć http: // lub https: //.
def Parse (ja, odpowiedź):Następnie zadeklarujemy funkcję analizy i nadać jej parametr odpowiedzi. Po uruchomieniu kodu funkcja Parse jest wywoływana i wysyłany jest obiekt odpowiedzi, w którym zawiera wszystkie informacje na temat odwiedzonej strony internetowej.
page_number = odpowiedź.URL.split ('/') [-1]To, co zrobiliśmy z tym kodem, to podział ciągu zawierający adres i zapisanie numeru strony samego w numer strony zmienny. Następnie tworzymy Nazwa pliku zmienne wkładanie numer strony w ciągu, który byłby nazwą plików, które tworzylibyśmy.
z otwartym (plik_nazwa, „wb”) jako plik:Teraz utworzyliśmy plik i zapisujemy zawartość strony internetowej w pliku za pomocą ciało atrybut odpowiedź obiekt.
Możemy zrobić coś więcej niż tylko zapisywanie strony internetowej. Biblioteka Beautifulsoup może być użyta do przeanalizowania ciało.odpowiedź. Możesz sprawdzić ten samouczek Beautiulsup, jeśli nie znasz biblioteki.
Z strony do złomowania, oto fragment HTML zawierający potrzebne dane:
Afganistan | Wyspy Alandzkie |
Zauważysz, że wszystkie potrzebne dane są zamknięte w tagach DIV, więc zamierzamy przepisać kod, aby przeanalizować HTML.
Oto nasz nowy scenariusz:
Kod jest prawie taki sam jak początkowe, jednak dodałem piękną grupę do naszej przestrzeni nazw i zmieniłem logikę w funkcji Parse.
Rzućmy okiem na logikę.
def Parse (ja, odpowiedź):Tutaj zdefiniowaliśmy funkcję Parse i biorąc pod uwagę parametr odpowiedzi.
page_number = odpowiedź.URL.split ('/') [-1]Robi to to samo, co omówione w kodzie inntialnym, jedyną różnicą jest to, że pracujemy z plikiem tekstowym zamiast pliku HTML. Zapisywalibyśmy zeskrobane dane w pliku tekstowym, a nie cała zawartość sieci w HTML.
html_content = beautifulSoup (odpowiedź.ciało, „lxml”)To, co zrobiliśmy w tym wierszu kodu, to wysłanie odpowiedź.ciało jako argument w bibliotece pięknej grupy i przypisał wyniki do html_content zmienny.
div_tags = html_content.Znajdź („div”, „id”: „wyniki”)Biorąc treść HTML, analizujemy ją tutaj, szukając div tag, który również ma i ID atrybut z wyniki Ponieważ jest to wartość, możemy zapisać go w div_tags zmienny.
country_tags = div_tags.Find_All („div”)Pamiętaj, że kraje istniały w div Tagi również, teraz po prostu otrzymujemy wszystkie div tagi i zapisywanie ich jako listy w country_tags zmienny.
country_name_position = zip (Range (len (country_tags)), country_tags)Tutaj iterujemy pozycję krajów wśród wszystkich tagów krajowych, a następnie zapisujemy treść w pliku tekstowym.
Więc w pliku tekstowym miałbyś coś takiego:
Kraj numer 1: AfganistanScrapy jest niewątpliwie jedną z najpotężniejszych bibliotek, jest bardzo szybka i zasadniczo pobiera stronę internetową. Daje ci wtedy swobodę wszystkiego, co chcesz z treścią internetową.
Powinniśmy zauważyć, że złom może zrobić znacznie więcej niż sprawdziliśmy tutaj. Możesz przeanalizować dane za pomocą selektorów CSS lub XPath. Możesz odczytać dokumentację, jeśli chcesz zrobić coś bardziej złożonego.