Skrobanie w sieci za pomocą pięknej zupy

Skrobanie w sieci za pomocą pięknej zupy
Skrobanie internetowe to technika używana do wyboru i wyodrębnienia określonych treści ze stron internetowych. Na przykład, kiedy chcemy monitorować ceny i sposób, w jaki się zmieniają, możemy użyć skrobaka internetowego, aby wyodrębnić tylko informacje, które chcemy ze strony internetowej i zrzucić je do pliku Excel. W tym samouczku będziemy nauczyć się zeskrobać sieć za pomocą pięknej grupy.

Najpierw zainstaluj piękną grupę w następujący sposób:

PIP Zainstaluj BeautifulSoup4

Beautifulsoup jest stosowany do pliku HTML, dlatego musimy zacząć od uzyskania zawartości HTML strony internetowej. Zwykle odbywa się to za pomocą modułu żądań. W tym konkretnym przykładzie otrzymamy zawartość HTML strony internetowej i wyświetlimy ją. W tym celu najpierw ustawiamy adres URL; W takim przypadku wybrałem witrynę Common Sense Media (ponieważ ma listę filmów z ocenami, które możemy być zainteresowani skrobaniem). Następnie używamy metody get () do pobierania obiektu odpowiedzi i wyodrębnienia części HTML za pomocą atrybutu treści lub tekstu.

żądania importu
url = "https: // www.Commonsensemedia.org/recenzje ”
Body = żądania.Get (URL)
Body_text = Body.Treść # lub ciało.tekst
Drukuj (ciało.treść) # lub druk (ciało.tekst)

Teraz możemy zacząć używać pięknej grupy. Tworzymy obiekt BeautifulSoup, który przyjmuje dwa argumenty - plik HTML i rodzaj parsera. Dostępne są cztery parsery - HTML.Parser, LXML, LXML-XML i HTML5LIB.

z BS4 Import Beautifulsoup
Zupa = BeautifulSoup (Body_text, „Lxml”)

Należy również zainstalować parser. W tym przypadku wybrałem parser LXML, więc zainstaluję go.

PIP Instaluj LXML

Teraz możemy zrobić prawie wszystko, ale zbadamy różne możliwości, zanim zacznę skrobać w sieci.

(i) Metoda prettify () przepisze tekst w czytelnym i „ładnym” formacie.

zupa.upiększać()

(ii) Metoda tytułu odzyska tytuł.

zupa.tytuł

(iii) Metoda „P” wyodrębni wszystkie znaczniki P z kodu HTML.

zupa.P

(iv) Metoda „A” wyodrębni wszystkie znaczniki z kodu HTML.

zupa.A

(v) Metoda Find_All () znajdzie wszystkie elementy internetowe zawierające określony argument. W tym przypadku zdałem „A”, więc Find_All („A”) znajdzie wszystkie tagi „A”.

zupa.Find_All („a”)

(vi) Metoda znalezienia znajdzie wszystkie przekazane argumenty. W takim przypadku przekazujemy argument id = „Hasło.„Więc przeszuka kod HTML identyfikatora, a jeśli się pasuje, odzyskaj klauzulę.

zupa.Znajdź (id = "hasło")

Zazwyczaj chcielibyśmy zeskrobać stronę internetową do pracy, filmów, kursów itp., wraz z ich odpowiednimi informacjami (takimi jak ceny i oceny). W takim przypadku jesteśmy zainteresowani witryną, szczególnie skrobując ich listę filmów.

żądania importu
url = "https: // www.Commonsensemedia.org/recenzje ”
Body = żądania.Get (URL)
Body_text = Body.treść
z BS4 Import Beautifulsoup
Zupa = BeautifulSoup (Body_text, „Lxml”)

W tym konkretnym przypadku kod HTML każdej nazwy filmu (co my się skrobimy) jest w samym kontenerze. Po raz pierwszy zaczynamy od sprawdzenia danego elementu. W moim przypadku postanowiłem sprawdzić tytuł pierwszego filmu („Till Death”).

Po sprawdzeniu elementu zauważysz, że to, czego szukamy - tytuł filmu „Till Death” - jest zawarty w tagu „Div” z klasą „Content -Content -Wrapper.„Ten pierwszy znacznik„ Div ”będzie się powtarzać w całym kodzie HTML, ponieważ każdy tytuł filmu jest zawarty w takim znaczniku„ Div ”. I tak mówimy, że dla każdego div w Divach chcemy wybrać znacznik „Div” z inną klasą „Views Field Field Views-Pole-Field-Field-Reference-Review-Ent-Produ.„Po tym widzimy„ silny ”znacznik z klasą„ Contrent Field.„Więc znowu robimy to samo. I wreszcie, sam tytuł jest zagnieżdżony znacznikiem „A”, więc wybieramy tag „A”.

Divs = zupa.Find_All („div”, klasa _ = „Content-Content-Wrapper”)

Uwaga tutaj, że po klasie słów jest podkreślenie. Ten podkreśla odróżnia klasę kodu HTML od klas Pythona. Napisaliśmy więc kod, który wyodrębni tag „Div” z klasą „Wrapper Content Content."

Wtedy piszesz:

# divs = zupa.Find_All („div”, 'class': 'content-content-wrapper')
dla Div in Divs:
Divs2 = div.Find_All („div”, klasa _ = "Views-Field Views Field Field-Field-Reference-Reference-Review-Prod-PROD-TITLE")
dla Div w Divs2:
Strongs = div.Find_All („Strong”, klasa _ = „field-content”)
dla silnych w Strongs:
AA = silny.Find_All („A”)
dla A w AA:
Drukuj (a.tekst)

Pętle istnieją, aby wybrać każdy film. Wreszcie, kiedy chcemy wybrać tekst, mówimy.tekst. Ten ostatni wydrukuje każdy tytuł filmu i w taki sposób możemy zeskrobać, co chcemy.

Załóżmy teraz, że chcieliśmy zapisać te dane w pliku CSV; To też jest możliwe. Aby napisać do CSV, musisz najpierw zaimportować moduł CSV. Najpierw otwórzmy plik, w którym chcemy przechowywać informacje. Tutaj przekazamy trzy argumenty - nazwa pliku, tryb i czy chcemy nowej linii, czy nie. Tutaj dodajemy nową linię równą nic, aby uniemożliwić dodanie pliku CSV (lub nowych pustych linii) po każdym wpisie. Po drugie, przekazujemy plik do metody Writer (). Po trzecie, piszemy nowy rząd. W tym przypadku nazywam moje nowe „filmy”, ponieważ jest to nagłówek do tego, co ma śledzić.

Importuj CSV
file = otwórz ("film.csv ",„ w ”, newline =”)
file_write = csv.pisarz (plik)
file_write.Writerow ([„Movies”])

Po czwarte, zamiast po prostu drukować zmienną „A”, rozebramy ją z pustych przestrzeni, a następnie użyjemy metody Writerow (), aby zapisać ją do pliku CSV.

dla Div in Divs:
Divs2 = div.Find_All („div”, klasa _ = "Views-Field Views Field Field-Field-Reference-Reference-Review-Prod-PROD-TITLE")
dla Div w Divs2:
Strongs = div.Find_All („Strong”, klasa _ = „field-content”)
dla silnych w Strongs:
AA = silny.Find_All („A”)
dla A w AA:
file_write.pisarz ([a.tekst.rozebrać się()])

Cały kod wyglądałby mniej więcej tak:

żądania importu
url = "https: // www.Commonsensemedia.org/recenzje ”
Body = żądania.Get (URL)
Body_text = Body.treść
z BS4 Import Beautifulsoup
Zupa = BeautifulSoup (Body_text, „Lxml”)
Divs = zupa.Find_All („div”, klasa _ = „Content-Content-Wrapper”)
Importuj CSV
file = otwórz ("film.csv ",„ w ”, newline =”)
file_write = csv.pisarz (plik)
file_write.Writerow ([„Movies”])
dla Div in Divs:
Divs2 = div.Find_All („div”, klasa _ = "Views-Field Views Field Field-Field-Reference-Reference-Review-Prod-PROD-TITLE")
dla Div w Divs2:
Strongs = div.Find_All („Strong”, klasa _ = „field-content”)
dla silnych w Strongs:
AA = silny.Find_All („A”)
dla A w AA:
file_write.pisarz ([a.tekst.rozebrać się()])

To tylko prosty przykład. W rzeczywistości skrobanie stron internetowych jest tak potężne, że możesz zeskrobać i monitorować prawie dowolną stronę internetową.

Szczęśliwe kodowanie!