❗ Одрицање одговорности : Ово је 3. део наше серије од шест делова о напредном веб скрапингу. Нови сте у серији? Почните од почетка читајући први део !
У другом делу наше серије Адванцед Веб Сцрапинг, научили сте како да скидате податке са СПА, ПВА и сајтова са АИ . До сада би требало да имате сво знање потребно да направите стругач који ради против већине модерних веб локација.
Шта је следеће? Време је да оптимизујете свој стругач уз неколико професионалних савета и трикова за стругање!
Правите веб стругач? Све је у скриптирању . 👨💻
И будимо искрени – ако сте икада писали код, знате да скриптовање није тако тешко већину времена. Неколико редова овде, for
тамо, и бум, скупљате податке као професионалац. Звучи једноставно, зар не? 😄
Али ево проблема: једноставност писања малог стругача може вас уљуљкати у лажни осећај сигурности. Зашто се мучити са одговарајућим коментарима, руковањем грешкама, евиденцијама или чак уредним увлачењем када је то само десетак линија кода које свако може да прочита?
Разумемо - зашто претерано инжињеирати нешто чему то није потребно? Прекомерни инжењеринг је непријатељ напретка. Али шта се дешава када треба да скалирате своје стругаче на више страница или чак на читаве сајтове? 🤔
Тада се ваш брзи и прљави стругач са шпагетима распада! 🍝
Ево зашто су вам потребни неки напредни савети за стругање веба.
Мора да сте већ чули уобичајене савете за гребање на вебу: прво одредите приоритет страница са критичним подацима, насумично поставите своје захтеве итд. Одличан савет—али будимо искрени, ти трикови су старе вести. 📰
Када имате посла са напреднијим сценаријима, те основе можда неће помоћи. Ако заиста желите да унапредите своју игру стругања, мораћете да истражите неке технике следећег нивоа.
Спреман? Вежите се — време је да своје вештине стругања веба подигнете на следећи ниво! 💪
⚠ Упозорење: Не брините ако вам неки од савета буду познати - наставите! Има много занимљивих увида док зароните дубље! 🤿
Једна од најчешћих грешака у веб скрапингу је заборављање да Интернет није нека магична, непогрешива технологија. Када пошаљете захтев на сајт, читав низ ствари може (и ће у неком тренутку) поћи наопако. ❌
Погледајмо неке уобичајене сценарије:
Ваш Ви-Фи или веза могу тренутно да кваре
Сервер који хостује веб локацију можда није доступан
Страница коју тражите можда више не постоји
Циљна локација можда доживљава привремено успоравање, што доводи до грешке временског ограничења
Сада, помешајте рашчлањивање података, претходну обраду и извоз у базу података, и добићете савршен рецепт за хаос. 💥
Дакле, шта је решење? Еррор хандлинг ! 🛡
Руковање грешкама је ваш најбољи пријатељ у веб сцрапингу. Ваша скрипта ће вероватно обрадити десетине (или хиљаде) страница, а једна једина грешка не би требало да доведе до рушења целе ваше операције.
Запамтите да је блок try ... catch
ваш пријатељ. Користите га да умотате своје захтеве и логику обраде. Такође, имајте на уму да већина ХТТП библиотека не покреће изузетке за лоше ХТТП одговоре (као што су 404
или 500
). 😲
Ако нисте упознати са ХТТП статусним кодовима , погледајте видео испод:
На пример, у Питхоновој библиотеци захтева морате ручно да проверите код статуса одговора на следећи начин:
import requests response = requests.get("https://example.com") if response.status_code == 200: # handle the successful response... else: # handle the error response...
Или, еквивалентно, користите метод раисе_фор_статус() :
import requests try: response = requests.get("https://example.com") # raises an HTTPError for bad responses (4xx or 5xx) response.raise_for_status() # handle the successful response... except requests.exceptions.HTTPError as http_err: # handle an HTTP error... except requests.exceptions.RequestException as req_err: # handle a request error...
Ваша напредна скрипта за гребање веба не само да би требало да буде у стању да обрађује грешке већ и да се опорави од њих. Пошто је већина грешака у вези са веб скрапингом везана за прављење веб захтева, можете значајно да побољшате ефикасност свог стругача применом захтева који се могу поновити .
Концепт је једноставан: ако захтев не успе, покушавате поново – један, два, три или више пута – док не буде успешан. 🔄
Али ево кваке: пошто је један од најчешћих разлога за неуспели захтев циљни сервер привремено неактиван или спор, не желите да га надвладате слањем истог захтева више пута у кратком временском периоду.
Ако захтев сада не успе, вероватно ће одмах поново пропасти. Ту долази до експоненцијалног повлачења !
Уместо тренутног поновног покушаја, ова техника постепено повећава време између покушаја, побољшавајући ваше шансе за успех дајући циљном серверу време да се опорави. ⏳
Иако можете ручно да имплементирате једноставне стратегије поновног покушаја помоћу прилагођеног кода, многи ХТТП клијенти долазе са уграђеним услужним програмима или библиотекама за аутоматску обраду покушаја. На пример, Акиос нуди библиотеку акиос-ретри , коју можете користити овако:
const axios = require("axios"); const axiosRetry = require("axios-retry"); axiosRetry(axios, { retries: 3, retryDelay: axiosRetry.exponentialDelay }); axios.get('https://example.com') .then(response => console.log(response.data)) .catch(error => console.log("Request failed:", error));
Слично, Питхон-ов пакет urllib3
долази са класом Ретри која се неприметно интегрише са већином Питхон ХТТП клијената .
Када прегледате елементе у ДевТоолс-у, можда ћете бити у искушењу да кликнете десним тастером миша и изаберете опцију „Селектор копирања“:
Али будите упозорени, резултат би могао изгледати отприлике овако:
#__next > div > main > div.sc-d7dc08c8-0.fGqCtJ > div.sc-93e186d7-0.eROqxA > h1
То дефинитивно није идеално за веб стругање….
проблем? Превише специфични селектори попут ових могу лако да се покваре када се структура странице промени. Што је ваш селектор детаљнији, он постаје крхкији.
Да би ваше стругање веба било отпорније, морате да одржавате своје бираче флексибилним. Уместо да се ослањате на класе везане за стил (које се стално мењају), фокусирајте се на атрибуте за које је мање вероватно да ће се променити, као што су id
, data-
или aria-
. Већина ових атрибута је намењена тестирању и приступачности , тако да имају тенденцију да остану доследни током времена. 💡
И док су ЦСС селектори лакши за читање и разумевање, КСПатх нуди више снаге. Али не брините – често можете постићи исте резултате са једноставним ЦСС селекторима, чиме се штедите од потребе за сложеним КСПатх кодом. 😌
За више информација о томе, погледајте наш водич о КСПатх вс ЦСС селекторима !
Рашчлањивање ХТМЛ страница захтева време и ресурсе, посебно ако имате посла са великим, угнежђеним ДОМ-ом. Ако ваш стругач анализира само неколико страница, то није тако велика ствар.
Сада, шта се дешава када се ваша операција гребања повећа и морате да преузимате податке са милиона страница? Тај мали трошкови могу брзо да исцрпе ресурсе сервера и да додају сате вашем укупном времену гребања. ⏳
Да бисте добили дубље разумевање, погледајте ове ресурсе:
Тражите потпуно поређење? Прочитајте наш чланак о најбољим ХТМЛ парсерима .
Добре вести? Пребацивање са једног парсера на други није тако тешко. На пример, у БеаутифулСоуп , то је само једноставна промена параметра:
from bs4 import BeautifulSoup # or using html.parser soup = BeautifulSoup(html_content, "html.parser") # or using lxml parser soup = BeautifulSoup(html_content, "lxml")
А шта је са ХТМЛ парсерима уграђеним у прегледаче као што је Цхроме? 🤔
Сазнајте више у видеу испод:
ХТТП/2 је ажурирана верзија ХТТП-а која дозвољава више захтева преко једне везе. Ово смањује кашњење и може побољшати укупне перформансе вашег задатка сцрапинга.
Да бисте проверили да ли сајт подржава ХТТП/2, једноставно отворите ДевТоолс у свом прегледачу, идите на картицу „Мрежа“ и потражите колону „Протокол“—ако пише h2
, сајт користи ХТТП/2:
Нажалост, не подржавају сви ХТТП клијенти и библиотеке за сцрапинг ХТТП/2. Међутим, алати као што је ХТТПКС за Питхон нуде пуну подршку за ХТТП/2 .
Веб сцрапинг је углавном задатак везан за И/О — шаљете захтеве серверу, чекате одговор, обрађујете податке и понављате. Током времена чекања, ваш стругач је у основи неактиван, што је неефикасно.
Решење? Паралелизам или конкурентност !
Слањем више захтева одједном, можете минимизирати та мртва времена и оптимизовати коришћење мреже.
🚨 Али будите опрезни! 🚨
Бомбардовање сервера са превише истовремених захтева може довести до ограничавања брзине или до забране вашег ИП-а – две популарне мере против гребања . 😬
Професионални савет : Такође можете паралелизирати задатке рашчлањивања, посебно ако користите више процесора, што ће убрзати процес екстракције података. ⚡
Прилагодљиви алгоритми засновани на вештачкој интелигенцији уче из образаца у подацима и структурама ХТМЛ страница, прилагођавајући своје понашање у реалном времену како би били у току са променама. 😮
То је мењач игре за веб стругање! 🤯
Када веб-сајтови ажурирају свој изглед или примењују мере против робота, ови алгоритми се могу брзо прилагодити, обезбеђујући да ваш стругач ради несметано. 🧠
Укратко, они чине скрапере паметнијима, помажући вам да ефикасно извлачите податке — чак и када сајт ствара неочекиване кривуље. ⚾ Са адаптивним алгоритмима, то је као да имате стругач који се временом развија!
Сазнајте више у поглављу 4 овог видеа Форреста Книгхта:
Наравно, сви савети и трикови које смо до сада споменули могу учинити ваш стругач бржим, поузданијим, робуснијим и ефикаснијим. Али будимо реални — они такође доносе много сложености. 😅
Добра вест је да се већина ових лекција односи на велику већину пројеката сцрапинга. Дакле, уместо да кодирате све од нуле, можете користити унапред изграђене функције за решавање одређених задатака. То је управо оно што Бригхт Дата Сцрапинг функције нуде!
Са 73+ готових ЈаваСцрипт функција, корисници су направили преко 38.000 стругача који раде у више од 195 земаља. То је тона стругања! 📈
Убрзајте свој развој помоћу окружења за извршавање које је дизајнирано да без напора скида, откључава и скалира прикупљање веб података:
Сада знате како да побољшате свој стругач уз увиде искусних програмера за стругање!
Запамтите да је ово само 3. део, тако да смо тек на пола пута кроз наше шестоделно путовање ка напредном веб скрапингу! Држите тај појас закопчан јер ћемо заронити у још најсавременију технологију, паметна решења и савете за инсајдере.
Следећа станица? Искористите моћ управљања проксијима вођеног вештачком интелигенцијом! 🌐