Nettskraping er en av de mest interessante tingene i kodeverdenen.
Hva er nettskraping?
Hvorfor finnes det i det hele tatt?
La oss finne ut svarene.
Innholdsfortegnelse
Hva er nettskraping?
Nettskraping er en automatisert oppgave for å trekke ut data fra nettsteder.
Det er mange bruksområder for nettskraping. Trekke ut prisene på produkter og sammenligne dem med forskjellige e-handelsplattformer. Få et daglig tilbud fra nettet. Bygg din egen søkemotor som Google, Yahoo, etc.. Listen fortsetter.
Du kan gjøre mer enn du tror med nettskraping. Når du får vite hvordan du trekker ut dataene fra nettsteder, kan du gjøre hva du vil med dataene.
Programmet som trekker ut dataene fra nettsteder kalles en nettskraper. Du skal lære å skrive nettskrapere i JavaScript.
Det er hovedsakelig to deler til nettskraping.
- Hente dataene ved hjelp av forespørselsbiblioteker og en hodeløs nettleser.
- Parsing av dataene for å trekke ut den nøyaktige informasjonen vi ønsker fra dataene.
La oss uten videre komme i gang.
Prosjektoppsett
Jeg antar at du har Node installert, hvis ikke sjekk ut NodeJS-installasjonsveiledningen.
Vi skal bruke pakkene node-fetch og cheerio for web-skraping i JavaScript. La oss sette opp prosjektet med npm for å jobbe med en tredjepartspakke.
La oss raskt se trinnene for å fullføre oppsettet vårt.
- Lag en katalog kalt web_scraping og naviger til den.
- Kjør kommandoen npm init for å initialisere prosjektet.
- Svar på alle spørsmålene basert på dine preferanser.
- Installer nå pakkene ved å bruke kommandoen
npm install node-fetch cheerio
La oss se glimt av de installerte pakkene.
node-henting
Pakken node-fetch bringer window.fetch til node js-miljøet. Det hjelper å lage HTTP-forespørslene og få rådataene.
cheerio
Pakken cheerio brukes til å analysere og trekke ut informasjonen som er nødvendig fra rådataene.
To pakker node-fetch og cheerio er gode nok for nettskraping i JavaScript. Vi kommer ikke til å se alle metodene som pakkene tilbyr. Vi vil se flyten av nettskraping og de mest nyttige metodene i den flyten.
Du vil lære nettskraping ved å gjøre det. Så la oss komme til arbeidet.
Scraping Cricket World Cup List
Her i denne delen skal vi gjøre faktisk nettskraping.
Hva henter vi ut?
Med tittelen på delen tror jeg du lett kan gjette det. Ja, hva du enn tenker er riktig. La oss trekke ut alle cricket-verdenscupvinnere og andrevinnere til nå.
- Lag en fil kalt extract_cricket_world_cups_list.js i prosjektet.
- Vi vil bruke Wikipedia Cricket World Cup side for å få ønsket informasjon.
- Først får du rådataene ved å bruke node-fetch-pakken.
- Koden nedenfor henter rådataene fra Wikipedia-siden ovenfor.
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();
Vi fikk rådataene fra URL-en. Nå er det på tide å trekke ut informasjonen vi trenger fra rådataene. La oss bruke pakken cheerio til å trekke ut dataene.
Å trekke ut data som involverer HTML-tagger med cheerio er en cakewalk. Før vi går inn på de faktiske dataene, la oss se noen eksempeldataparsing ved hjelp av cheerio.
- Parse HTML-dataene ved å bruke metoden cheerio.load.
const parsedSampleData = cheerio.load( `<div id="container"><p id="title">I'm title</p></div>` );
- Vi har analysert HTML-koden ovenfor. Hvordan trekke ut p-tag-innholdet fra det? Det er det samme som velgerne i JavaScript DOM-manipulasjon.
console.log(parsedSampleData(“#title”).text());
Du kan velge taggene som du vil. Du kan sjekke ut forskjellige metoder fra cheerio offisielle nettsted.
- Nå er det på tide å trekke ut verdenscuplisten. For å trekke ut informasjonen, må vi kjenne HTML-taggene som informasjonen ligger på siden. Gå til cricket verdenscup Wikipedia-side og inspiser siden for å få informasjon om HTML-tagger.
Her er den komplette koden.
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();
Og her er de skrapte dataene.
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
Kult 😎, er det ikke sant?
Skrapemal
Å hente rådata fra URL-en er vanlig i alle nettskrapingsprosjekter. Den eneste delen som endres er å trekke ut dataene i henhold til kravet. Du kan prøve koden nedenfor som en mal.
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();
Konklusjon
Du har lært hvordan du skraper en nettside. Nå er det din tur til å øve på koding.
Jeg vil også foreslå å sjekke ut populære nettskrapingsrammer for å utforske og skybaserte nettskrapingløsninger.
Lykke til med koding 🙂
Likte du å lese artikkelen? Hva med å dele med verden?