Skrobanie internetowe za pomocą modułu złomu Pythona

Skrobanie internetowe za pomocą modułu złomu Pythona
Umiejętność skrobania internetowego stała się dziś złota, więc dowiedzmy się, w jaki sposób możemy uzyskać potrzebne dane ze stron internetowych. W tym artykule rozmawialiśmy o bibliotece Python z złomem, co może zrobić i jak z niej korzystać. Zacznijmy.

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 instaluj

Możesz sprawdzić, czy instalacja zakończyła się powodzeniem, importując złom w interaktywnej powładzie Pythona.

$ Python
Python 3.5.2 (domyślnie, 14 września 2017, 22:51:06)
[GCC 5.4.0 20160609] na Linux

Wpisz „Pomoc”, „Copyright”, „Kredyty” lub „Licencja”, aby uzyskać więcej informacji.

>>> Importuj złom

Teraz, 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 WebScraper

To 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 importowy
Samplespider klasy (złom.Pająk):
name = "próbka"
start_urls = [
"http: // przykład.WebScraping.com/miejsca/domyślny/indeks/0 ”,
"http: // przykład.WebScraping.com/miejsca/domyślne/indeks/1 ",
"http: // przykład.WebScraping.com/miejsca/domyślne/indeks/2 "
]
def Parse (ja, odpowiedź):
page_number = odpowiedź.URL.split ('/') [-1]
plik_name = "strona .html ".format (page_number)
z otwartym (plik_nazwa, „wb”) jako plik:
plik.Napisz (odpowiedź.ciało)

Z najwyższego poziomu katalogu projektu uruchom następujące polecenie:

Próbka pełzania złomu

Przypomnij 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 importowy

Najpierw importujemy bibliotekę do naszej przestrzeni nazw.

Samplespider klasy (złom.Pająk):
name = "próbka"

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 = [
"http: // przykład.WebScraping.com/miejsca/domyślny/indeks/0 ”,
"http: // przykład.WebScraping.com/miejsca/domyślne/indeks/1 ",
"http: // przykład.WebScraping.com/miejsca/domyślne/indeks/2 "
]

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]
plik_name = "strona .html ".format (page_number)

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:
plik.Napisz (odpowiedź.ciało)

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:

Zachwyt importowy
z BS4 Import Beautifulsoup
Samplespider klasy (złom.Pająk):
name = "próbka"
start_urls = [
"http: // przykład.WebScraping.com/miejsca/domyślny/indeks/0 ”,
"http: // przykład.WebScraping.com/miejsca/domyślne/indeks/1 ",
"http: // przykład.WebScraping.com/miejsca/domyślne/indeks/2 "
]
def Parse (ja, odpowiedź):
page_number = odpowiedź.URL.split ('/') [-1]
plik_name = "strona .tekst".format (page_number)
z otwartym (plik_nazwa, „w”) jako plik:
html_content = beautifulSoup (odpowiedź.ciało, „lxml”)
div_tags = html_content.Znajdź („div”, „id”: „wyniki”)
country_tags = div_tags.Find_All („div”)
country_name_position = zip (Range (len (country_tags)), country_tags)
dla pozycji, nazwa_obrazu w Country_name_position:
plik.Write („Numer kraju : \ n”.format (pozycja + 1, nazwa country_name.tekst))

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]
plik_name = "strona .tekst".format (page_number)
z otwartym (plik_nazwa, „w”) jako plik:

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)
dla pozycji, nazwa_obrazu w Country_name_position:
plik.Write („Numer kraju : \ n”.format (pozycja + 1, nazwa country_name.tekst))

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: Afganistan
Kraj numer 2: Wyspy Aland
Kraj numer 3: Albania

Wniosek

Scrapy 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.