Web scraping este unul dintre cele mai interesante lucruri din lumea codificării.
Ce este web scraping?
De ce chiar există?
Să aflăm răspunsurile.
Cuprins
Ce este Web Scraping?
Web scraping este o sarcină automată pentru extragerea datelor de pe site-uri web.
Există multe aplicații de web scraping. Extragerea prețurilor produselor și compararea acestora cu diferite platforme de comerț electronic. Obținerea unei cotații zilnice de pe web. Construindu-vă propriul motor de căutare, cum ar fi Google, Yahoo, etc., Lista poate continua.
Puteți face mai mult decât credeți cu web scraping. Odată ce ați învățat cum să extrageți datele de pe site-uri web, atunci puteți face ce doriți cu datele.
Programul care extrage datele de pe site-uri web se numește web scraper. Veți învăța să scrieți web scrapers în JavaScript.
Există în principal două părți ale răzuirii web.
- Obținerea datelor folosind biblioteci de solicitări și un browser fără cap.
- Analizarea datelor pentru a extrage informațiile exacte pe care le dorim din date.
Fără alte prelungiri, să începem.
Configurarea proiectului
Presupun că aveți Node instalat, dacă nu, consultați ghidul de instalare NodeJS.
Vom folosi pachetele node-fetch și cheerio pentru web scraping în JavaScript. Să setăm proiectul cu npm pentru a lucra cu un pachet terță parte.
Să vedem rapid pașii pentru a finaliza configurarea noastră.
- Creați un director numit web_scraping și navigați la el.
- Rulați comanda npm init pentru a inițializa proiectul.
- Răspundeți la toate întrebările în funcție de preferințele dvs.
- Acum, instalați pachetele folosind comanda
npm install node-fetch cheerio
Să vedem o privire asupra pachetelor instalate.
nod-fetch
Pachetul node-fetch aduce window.fetch în mediul node js. Ajută la efectuarea solicitărilor HTTP și la obținerea datelor brute.
cheerio
Pachetul cheerio este utilizat pentru a analiza și extrage informațiile necesare din datele brute.
Două pachete node-fetch și cheerio sunt suficient de bune pentru web scraping în JavaScript. Nu vom vedea toate metodele oferite de pachete. Vom vedea fluxul de web scraping și cele mai utile metode din acel flux.
Veți învăța scrapingul web făcând-o. Deci, să trecem la treabă.
Scraping Cricket World Cup List
Aici, în această secțiune, vom face web scraping efectiv.
Ce extragem?
După titlul secțiunii, cred că ați ghici cu ușurință. Da, orice crezi tu este corect. Să extragem toți câștigătorii Cupei Mondiale de cricket și pe locul doi până acum.
- Creați un fișier numit extract_cricket_world_cups_list.js în proiect.
- Vom folosi Wikipedia Cupa Mondială de Cricket pagina pentru a obține informațiile dorite.
- Mai întâi, obțineți datele brute folosind pachetul node-fetch.
- Codul de mai jos obține datele brute ale paginii Wikipedia de mai sus.
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();
Am primit datele brute de la adresa URL. Acum, este timpul să extragem informațiile de care avem nevoie din datele brute. Să folosim pachetul cheerio pentru a extrage datele.
Extragerea datelor care implică etichete HTML cu cheerio este o simplă plimbare. Înainte de a intra în datele reale, să vedem câteva exemple de analizare a datelor folosind cheerio.
- Analizați datele HTML folosind metoda cheerio.load.
const parsedSampleData = cheerio.load( `<div id="container"><p id="title">I'm title</p></div>` );
- Am analizat codul HTML de mai sus. Cum se extrage conținutul etichetei p din acesta? Este la fel ca selectorii din manipularea DOM JavaScript.
console.log(parsedSampleData(„#title”).text());
Puteți selecta etichetele după cum doriți. Puteți verifica diferite metode din site-ul oficial cheerio.
- Acum, este timpul să extragem lista cupei mondiale. Pentru a extrage informațiile, trebuie să cunoaștem etichetele HTML că informațiile se află pe pagină. Du-te la Pagina Wikipedia pentru Cupa Mondială de cricket și inspectați pagina pentru a obține informații despre etichetele HTML.
Aici este codul complet.
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();
Și, aici sunt datele răzuite.
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
Cool 😎, nu-i așa?
Șablon de răzuire
Obținerea datelor brute de la adresa URL este obișnuită în fiecare proiect de web scraping. Singura parte care se modifică este extragerea datelor conform cerințelor. Puteți încerca codul de mai jos ca șablon.
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();
Concluzie
Ați învățat cum să răzuiți o pagină web. Acum, este rândul tău să exersezi codificarea.
De asemenea, aș sugera să verificați cadrele populare de web scraping pentru a explora și soluții de web-scraping bazate pe cloud.
Codare fericită 🙂
Ți-a plăcut să citești articolul? Ce zici de împărtășirea cu lumea?