Webskrabning er en af de mest interessante ting i kodningsverdenen.
Hvad er webskrabning?
Hvorfor eksisterer det overhovedet?
Lad os finde ud af svarene.
Indholdsfortegnelse
Hvad er Web Scraping?
Webskrabning er en automatiseret opgave til at udtrække data fra websteder.
Der er mange anvendelser af web-skrabning. Udtrække priserne på produkter og sammenligne dem med forskellige e-handelsplatforme. Få et dagligt tilbud fra nettet. Opbygning af din egen søgemaskine som Google, Yahoo osv.. Listen fortsætter.
Du kan gøre mere, end du tror med web-skrabning. Når du får at vide, hvordan du udtrækker data fra hjemmesider, så kan du gøre, hvad du vil med dataene.
Programmet, som udtrækker data fra websteder, kaldes en webskraber. Du skal lære at skrive webskrabere i JavaScript.
Der er hovedsageligt to dele til webskrabning.
- Hentning af data ved hjælp af anmodningsbiblioteker og en hovedløs browser.
- Parsing af dataene for at udtrække den nøjagtige information, som vi ønsker fra dataene.
Lad os uden videre komme i gang.
Projektopsætning
Jeg antager, at du har Node installeret, hvis ikke, tjek NodeJS installationsvejledningen.
Vi kommer til at bruge pakkerne node-fetch og cheerio til web-scraping i JavaScript. Lad os sætte projektet op med npm til at arbejde med en tredjepartspakke.
Lad os hurtigt se trinene for at fuldføre vores opsætning.
- Opret en mappe kaldet web_scraping og naviger til den.
- Kør kommandoen npm init for at initialisere projektet.
- Besvar alle spørgsmålene baseret på dine præferencer.
- Installer nu pakkerne ved hjælp af kommandoen
npm install node-fetch cheerio
Lad os se glimt af de installerede pakker.
node-hentning
Pakken node-fetch bringer window.fetch til node js-miljøet. Det hjælper med at lave HTTP-anmodningerne og få de rå data.
cheerio
Pakken cheerio bruges til at parse og udtrække den information, der er nødvendig, fra rådataene.
To pakker node-fetch og cheerio er gode nok til web-skrabning i JavaScript. Vi kommer ikke til at se alle metoder, som pakkerne tilbyder. Vi vil se strømmen af webskrabning og de mest nyttige metoder i det flow.
Du vil lære web-skrabning ved at gøre det. Så lad os komme til arbejdet.
Scraping Cricket World Cup List
Her i dette afsnit skal vi lave en egentlig web-skrabning.
Hvad udvinder vi?
Med titlen på afsnittet tror jeg, du nemt ville gætte det. Ja, uanset hvad du tænker er korrekt. Lad os trække alle cricket verdensmesterskabsvindere og andenpladser indtil nu.
- Opret en fil kaldet extract_cricket_world_cups_list.js i projektet.
- Vi vil bruge Wikipedia Cricket World Cup side for at få den ønskede information.
- Først skal du hente de rå data ved hjælp af node-fetch-pakken.
- Nedenstående kode får rådata fra ovenstående Wikipedia-side.
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 fik de rå data fra URL’en. Nu er det tid til at udtrække den information, vi har brug for, fra de rå data. Lad os bruge pakken cheerio til at udtrække dataene.
At udtrække data, der involverer HTML-tags med cheerio, er en cakewalk. Før vi går ind i de faktiske data, lad os se nogle eksempler på dataparsing ved hjælp af cheerio.
- Parse HTML-data ved hjælp af metoden cheerio.load.
const parsedSampleData = cheerio.load( `<div id="container"><p id="title">I'm title</p></div>` );
- Vi har analyseret ovenstående HTML-kode. Hvordan udtrækkes p-tag-indholdet fra det? Det er det samme som vælgerne i JavaScript DOM-manipulation.
console.log(parsedSampleData(“#title”).text());
Du kan vælge tags, som du vil. Du kan tjekke forskellige metoder fra cheerio officielle hjemmeside.
- Nu er det tid til at udtrække verdensmesterskabslisten. For at udtrække informationen skal vi kende HTML-tags, som informationen ligger på siden. Gå til cricket verdensmesterskaber Wikipedia-side og inspicer siden for at få oplysninger om HTML-tags.
Her er den komplette kode.
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 skrabet data.
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
Fedt 😎, er det ikke?
Skrabning skabelon
At få de rå data fra URL’en er almindeligt i alle web-skrabeprojekter. Den eneste del, der ændres, er at udtrække dataene i henhold til kravet. Du kan prøve nedenstående kode som skabelon.
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();
Konklusion
Du har lært, hvordan man skraber en webside. Nu er det din tur til at øve dig i kodning.
Jeg vil også foreslå, at du tjekker populære web-scraping-rammer for at udforske og cloud-baserede web-scraping-løsninger.
God kodning 🙂
Nydt at læse artiklen? Hvad med at dele med verden?