Веб стругање је једна од најзанимљивијих ствари у свету кодирања.
Шта је веб стругање?
Зашто уопште постоји?
Хајде да сазнамо одговоре.
Преглед садржаја
Шта је Веб Сцрапинг?
Веб сцрапинг је аутоматизовани задатак за издвајање података са веб локација.
Постоји много апликација за веб стругање. Издвајање цена производа и њихово поређење са различитим платформама е-трговине. Добијање дневне понуде са веба. Прављење сопственог претраживача као што је Гоогле, Иахоо, итд., листа се наставља.
Можете да урадите више него што мислите са веб стругањем. Када сазнате како да извучете податке са веб локација, онда можете да радите шта год желите са подацима.
Програм који издваја податке са веб локација назива се веб стругач. Научићете да пишете веб скрапере у ЈаваСцрипт-у.
Углавном постоје два дела стругања веба.
- Добијање података помоћу библиотека захтева и претраживача без главе.
- Рашчлањивање података да бисмо издвојили тачне информације које желимо из података.
Без даљег одлагања, хајде да почнемо.
Подешавање пројекта
Претпостављам да имате инсталиран Ноде, ако не, погледајте водич за инсталацију НодеЈС-а.
Користићемо пакете ноде-фетцх и цхеерио за веб сцрапинг у ЈаваСцрипт-у. Хајде да подесимо пројекат са нпм-ом да ради са пакетом треће стране.
Хајде да брзо видимо кораке да завршимо наше подешавање.
- Направите директоријум под називом веб_сцрапинг и идите до њега.
- Покрените команду нпм инит да бисте иницијализовали пројекат.
- Одговорите на сва питања на основу ваших жеља.
- Сада инсталирајте пакете користећи команду
npm install node-fetch cheerio
Хајде да видимо увид у инсталиране пакете.
ноде-фетцх
Пакет ноде-фетцх доводи виндов.фетцх у окружење чвора јс. Помаже да направите ХТТП захтеве и добијете необрађене податке.
цхеерио
Пакет цхеерио користи се за рашчлањивање и издвајање информација које су неопходне из необрађених података.
Два пакета ноде-фетцх и цхеерио су довољно добри за веб сцрапинг у ЈаваСцрипт-у. Нећемо видети све методе које пакети пружају. Видећемо ток стругања веба и најкорисније методе у том току.
Радећи то научићете веб стругање. Дакле, пређимо на посао.
Сцрапинг списак Светског купа у крикету
Овде, у овом одељку, урадићемо стварно стругање веба.
Шта извлачимо?
По наслову одељка, мислим да ћете лако погодити. Да, шта год да мислите је тачно. Хајде да извучемо све до сада победнике и другопласиране светске купове у крикету.
- Направите датотеку под називом ектрацт_црицкет_ворлд_цупс_лист.јс у пројекту.
- Користићемо Википедиа Светско првенство у крикету страницу да бисте добили жељене информације.
- Прво, узмите необрађене податке користећи пакет ноде-фетцх.
- Код испод добија необрађене податке горње странице Википедије.
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();
Добили смо необрађене податке са УРЛ-а. Сада је време да из сирових података извучемо информације које су нам потребне. Хајде да користимо пакет цхеерио да издвојимо податке.
Издвајање података који укључују ХТМЛ ознаке са цхеерио је цакевалк. Пре него што пређемо на стварне податке, хајде да видимо неке примере рашчлањивања података помоћу цхеерио-а.
- Парсирајте ХТМЛ податке користећи методу цхеерио.лоад.
const parsedSampleData = cheerio.load( `<div id="container"><p id="title">I'm title</p></div>` );
- Рашчлањивали смо горњи ХТМЛ код. Како из њега издвојити садржај п ознаке? То је исто као и селектори у ЈаваСцрипт ДОМ манипулацији.
цонсоле.лог(парседСамплеДата(“#титле”).тект());
Можете одабрати ознаке како желите. Можете проверити различите методе из цхеерио званични сајт.
- Сада је време да извучемо листу светског купа. Да бисмо издвојили информације, морамо да знамо ХТМЛ ознаке које се налазе на страници. Иди на страница на Википедији светског купа у крикету и прегледајте страницу да бисте добили информације о ХТМЛ ознакама.
Ево комплетног кода.
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();
А ево и скрапаних података.
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
Цоол 😎, зар не?
Сцрапинг Темплате
Добијање необрађених података са УРЛ-а уобичајено је у сваком пројекту веб-стругања. Једини део који се мења је издвајање података према захтеву. Можете испробати доњи код као шаблон.
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();
Закључак
Научили сте како да скрепате веб страницу. Сада је ваш ред да вежбате кодирање.
Такође бих предложио да проверите популарне оквире за стругање веба да бисте истражили и решења за веб-сцрапинг заснована на облаку.
Срећно кодирање 🙂
Да ли сте уживали у читању чланка? Шта кажете на дељење са светом?