Web scraping to jedna z najciekawszych rzeczy w świecie kodowania.
Co to jest skrobanie sieci?
Dlaczego w ogóle istnieje?
Poznajmy odpowiedzi.
Spis treści:
Co to jest skrobanie sieci?
Web scraping to zautomatyzowane zadanie wydobywania danych ze stron internetowych.
Istnieje wiele zastosowań web scrapingu. Wyodrębnianie cen produktów i porównywanie ich z różnymi platformami e-Commerce. Otrzymywanie dziennej wyceny z sieci. Budowanie własnej wyszukiwarki, takiej jak Google, Yahoo itp., Lista jest długa.
Dzięki web scrapingowi możesz zrobić więcej, niż myślisz. Gdy dowiesz się, jak wyodrębnić dane ze stron internetowych, możesz zrobić z nimi, co chcesz.
Program, który pobiera dane ze stron internetowych, nazywa się web scraper. Nauczysz się pisać web scrapery w JavaScript.
Skrobanie sieci składa się głównie z dwóch części.
- Pobieranie danych za pomocą bibliotek żądań i przeglądarki bezgłowej.
- Analizowanie danych w celu wydobycia z nich dokładnych informacji, których potrzebujemy.
Bez zbędnych ceregieli zaczynajmy.
Konfiguracja projektu
Zakładam, że masz zainstalowany Node, jeśli nie, sprawdź przewodnik instalacji NodeJS.
Zamierzamy użyć pakietów node-fetch i cheerio do web scrapingu w JavaScript. Skonfigurujmy projekt z npm do pracy z pakietem innej firmy.
Zobaczmy szybko, jak dokończyć konfigurację.
- Utwórz katalog o nazwie web_scraping i przejdź do niego.
- Uruchom polecenie npm init, aby zainicjować projekt.
- Odpowiedz na wszystkie pytania w oparciu o swoje preferencje.
- Teraz zainstaluj pakiety za pomocą polecenia
npm install node-fetch cheerio
Zobaczmy przebłyski zainstalowanych pakietów.
pobieranie węzłów
Pakiet node-fetch przenosi plik window.fetch do środowiska node js. Pomaga w wysyłaniu żądań HTTP i uzyskiwaniu nieprzetworzonych danych.
cheerio
Paczka cheerio służy do analizowania i wydobywania niezbędnych informacji z surowych danych.
Dwa pakiety node-fetch i cheerio wystarczą do przeglądania stron internetowych w JavaScript. Nie zobaczymy każdej metody, którą zapewniają pakiety. Zobaczymy przepływ web scrapingu i najbardziej przydatne metody w tym przepływie.
Dzięki temu nauczysz się web scrapingu. No to bierzmy się do roboty.
Skrobanie listy mistrzostw świata w krykiecie
W tej sekcji zajmiemy się rzeczywistym skrobaniem sieci.
Co wydobywamy?
Myślę, że po tytule sekcji łatwo się domyślisz. Tak, cokolwiek myślisz, jest poprawne. Wyodrębnijmy dotychczasowych zwycięzców i wicemistrzów świata w krykiecie.
- Utwórz plik o nazwie extract_cricket_world_cups_list.js w projekcie.
- Będziemy korzystać z Wikipedii Puchar Świata w Krykiecie stronę, aby uzyskać żądane informacje.
- Najpierw pobierz surowe dane za pomocą pakietu node-fetch.
- Poniższy kod pobiera surowe dane z powyższej strony Wikipedii.
const fetch = require("node-fetch"); // function to get the raw data const getRawData = (URL) => { return fetch(URL) .then((response) => response.text()) .then((data) => { return data; }); }; // URL for data const URL = "https://en.wikipedia.org/wiki/Cricket_World_Cup"; // start of the program const getCricketWorldCupsList = async () => { const cricketWorldCupRawData = await getRawData(URL); console.log(cricketWorldCupRawData); }; // invoking the main function getCricketWorldCupsList();
Otrzymaliśmy surowe dane z adresu URL. Teraz nadszedł czas, aby wyodrębnić potrzebne informacje z surowych danych. Użyjmy pakietu cheerio, aby wyodrębnić dane.
Wyodrębnianie danych zawierających znaczniki HTML za pomocą cheerio to bułka z masłem. Zanim przejdziemy do rzeczywistych danych, zobaczmy przykładowe parsowanie danych za pomocą cheerio.
- Przeanalizuj dane HTML za pomocą metody cheerio.load.
const parsedSampleData = cheerio.load( `<div id="container"><p id="title">I'm title</p></div>` );
- Przeanalizowaliśmy powyższy kod HTML. Jak wyodrębnić z niego zawartość tagu p? To jest to samo, co selektory w manipulacji JavaScript DOM.
console.log(parsedSampleData(„#tytuł”).text());
Możesz wybrać tagi, jak chcesz. Możesz sprawdzić różne metody z oficjalna strona cheerio.
- Teraz nadszedł czas, aby wyodrębnić listę mistrzostw świata. Aby wyodrębnić informacje, musimy znać znaczniki HTML, które zawierają informacje na stronie. Idź do strona Wikipedii o mistrzostwach świata w krykiecie i sprawdź stronę, aby uzyskać informacje o znacznikach HTML.
Oto pełny kod.
const fetch = require("node-fetch"); const cheerio = require("cheerio"); // function to get the raw data const getRawData = (URL) => { return fetch(URL) .then((response) => response.text()) .then((data) => { return data; }); }; // URL for data const URL = "https://en.wikipedia.org/wiki/Cricket_World_Cup"; // start of the program const getCricketWorldCupsList = async () => { const cricketWorldCupRawData = await getRawData(URL); // parsing the data const parsedCricketWorldCupData = cheerio.load(cricketWorldCupRawData); // extracting the table data const worldCupsDataTable = parsedCricketWorldCupData("table.wikitable")[0] .children[1].children; console.log("Year --- Winner --- Runner"); worldCupsDataTable.forEach((row) => { // extracting `td` tags if (row.name === "tr") { let year = null, winner = null, runner = null; const columns = row.children.filter((column) => column.name === "td"); // extracting year const yearColumn = columns[0]; if (yearColumn) { year = yearColumn.children[0]; if (year) { year = year.children[0].data; } } // extracting winner const winnerColumn = columns[3]; if (winnerColumn) { winner = winnerColumn.children[1]; if (winner) { winner = winner.children[0].data; } } // extracting runner const runnerColumn = columns[5]; if (runnerColumn) { runner = runnerColumn.children[1]; if (runner) { runner = runner.children[0].data; } } if (year && winner && runner) { console.log(`${year} --- ${winner} --- ${runner}`); } } }); }; // invoking the main function getCricketWorldCupsList();
A oto zeskrobane dane.
Year --- Winner --- Runner 1975 --- West Indies --- Australia 1979 --- West Indies --- England 1983 --- India --- West Indies 1987 --- Australia --- England 1992 --- Pakistan --- England 1996 --- Sri Lanka --- Australia 1999 --- Australia --- Pakistan 2003 --- Australia --- India 2007 --- Australia --- Sri Lanka 2011 --- India --- Sri Lanka 2015 --- Australia --- New Zealand 2019 --- England --- New Zealand
Fajne 😎, prawda?
Skrobanie szablonu
Pobieranie nieprzetworzonych danych z adresu URL jest powszechne w każdym projekcie skrobania stron internetowych. Jedyną częścią, która się zmienia, jest wyodrębnianie danych zgodnie z wymaganiami. Możesz wypróbować poniższy kod jako szablon.
const fetch = require("node-fetch"); const cheerio = require("cheerio"); const fs = require("fs"); // function to get the raw data const getRawData = (URL) => { return fetch(URL) .then((response) => response.text()) .then((data) => { return data; }); }; // URL for data const URL = "https://example.com/"; // start of the program const scrapeData = async () => { const rawData = await getRawData(URL); // parsing the data const parsedData = cheerio.load(rawData); console.log(parsedData); // write code to extract the data // here // ... // ... }; // invoking the main function scrapeData();
Wniosek
Nauczyłeś się, jak zeskrobać stronę internetową. Teraz Twoja kolej na ćwiczenie kodowania.
Sugerowałbym również sprawdzenie popularnych platform do skrobania stron internetowych w celu zbadania i opartych na chmurze rozwiązań do skrobania stron internetowych.
Miłego kodowania 🙂
Podobał Ci się artykuł? A co powiesz na dzielenie się ze światem?