❗ Радди масъулият : Ин қисми 3-юми силсилаи шаш порчаи мо дар бораи Web Scraping Advanced. Дар силсила нав ҳастед? Аз аввал бо хондани Қисми 1 оғоз кунед !
Дар қисми 2-и силсилаи Advanced Web Scraping мо, шумо омӯхтед , ки чӣ гуна маълумотро аз SPA, PWA ва сайтҳои бо AI идорашаванда тоза кунед . То ҳол, шумо бояд тамоми донишҳоеро дошта бошед, ки барои сохтани скрепере, ки бар зидди аксари вебсайтҳои муосир кор мекунад, лозим аст.
Баъд чӣ? Вақти он барои оптимизатсия кардани скрепери худ бо якчанд маслиҳатҳо ва ҳилаҳои скреперӣ!
Сохтани скрепер веб? Ин ҳама дар бораи скрипт аст. 👨💻
Ва биёед ростқавл бошем - агар шумо ягон вақт код навишта бошед, шумо медонед, ки скрипт аксар вақт он қадар душвор нест. Якчанд сатрҳо дар ин ҷо, for
он ҷо ва бум, шумо маълумотро мисли профессионал канда мекунед. Садо оддӣ, дуруст? 😄
Аммо мушкилот дар ин ҷост: соддагии навиштани скреперҳои хурд метавонад шуморо ба ҳисси бардурӯғи бехатарӣ кашад. Чаро бо шарҳҳои дуруст, коркарди хатогиҳо, гузоришҳо ё ҳатто қаҳвахонаҳои тозае, вақте ки ин танҳо даҳҳо сатри код аст, ки ҳар кас хонда метавонад?
Мо инро мефаҳмем — чаро чизеро, ки ба он ниёз надорад, аз ҳад зиёд муҳандисӣ мекунем? Аз ҳад зиёд муҳандисӣ душмани пешрафт аст . Аммо вақте ки ба шумо лозим аст, ки скреперҳои худро ба якчанд саҳифа ё ҳатто тамоми сайтҳо васеъ кунед, чӣ мешавад? 🤔
Ин аст, ки скреперҳои зуд ва ифлоси спагетти-кодшудаи шумо аз ҳам меафтад! 🍝
Ин аст, ки чаро ба шумо чанд маслиҳатҳои пешрафтаи скрепинги веб лозим аст.
Шумо бояд аллакай маслиҳатҳои муқаррарии скрепинги вебро шунидаед: аввал саҳифаҳоро бо маълумоти муҳим афзалият диҳед, дархостҳои худро тасодуфӣ кунед ва ғайра. Маслиҳати олӣ - аммо биёед ростқавл бошем, ин ҳилаҳо хабари кӯҳнаанд. 📰
Вақте ки шумо бо сенарияҳои пешрафта сарукор доред, он асосҳо онро бурида наметавонанд. Агар шумо воқеан хоҳед, ки бозии скрепинги худро баланд бардоред, ба шумо лозим меояд, ки баъзе усулҳои сатҳи ояндаро омӯзед.
Тайёр? Ба даст гиред - вақти он расидааст, ки малакаҳои скрепинги веби худро ба сатҳи оянда бардоред! 💪
⚠️ Огоҳӣ: Парво накунед, агар баъзе аз маслиҳатҳо шинос бошанд - идома диҳед! Вақте ки шумо амиқтар ғарқ мешавед, бисёр фаҳмишҳои ҷолиб мавҷуданд! 🤿
Яке аз хатогиҳои маъмултарин дар скрепинги веб ин фаромӯш кардани он аст, ки Интернет ягон технологияи ҷодугарӣ ва нодуруст нест. Вақте ки шумо ба сайт дархост мефиристед, як қатор чизҳо метавонанд (ва дар баъзе нуқтаҳо) хато кунанд. ❌
Биёед ба баъзе сенарияҳои маъмул назар кунем:
Wi-Fi ё пайвасти шумо метавонад як лаҳза ҳиҷоб шавад
Сервере, ки вебсайтро ҷойгир мекунад, метавонад дастнорас бошад
Саҳифае, ки шумо ҷустуҷӯ мекунед, шояд дигар вуҷуд надошта бошад
Сомонаи мавриди ҳадаф метавонад сустшавии муваққатиро аз сар гузаронад, ки ба хатогии вақтхушӣ оварда мерасонад
Ҳоло, таҳлили маълумот, коркарди пешакӣ ва содирот ба пойгоҳи додаҳоро омехта кунед ва шумо як рецепти комил барои бесарусомонӣ доред. 💥
Пас, роҳи ҳал чист? Муносибати хато ! 🛡️
Муносибати хатогӣ дӯсти беҳтарини шумо дар скрепинги веб аст. Эҳтимол скрипти шумо даҳҳо (ё ҳазорҳо) саҳифаро коркард мекунад ва як хато набояд тамоми амалиёти шуморо вайрон кунад.
Дар хотир доред, ки try ... catch
дӯсти шумост. Онро барои ҷамъбасти дархостҳо ва коркарди мантиқ истифода баред. Инчунин, дар хотир доред, ки аксари китобхонаҳои HTTP барои посухҳои бади HTTP истисно намегузоранд (ба монанди 404
ё 500
). 😲
Агар шумо бо рамзҳои ҳолати HTTP шинос набошед, ба видеои зер нигаред:
Масалан, дар китобхонаи дархостҳои Python шумо бояд рамзи ҳолати ҷавобро ба таври дастӣ тафтиш кунед:
import requests response = requests.get("https://example.com") if response.status_code == 200: # handle the successful response... else: # handle the error response...
Ё, ба таври баробар, усули rise_for_status() -ро истифода баред:
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...
Скрипти пешрафтаи скрепинги веби шумо бояд на танҳо тавонад хатогиҳоро ҳал кунад, балки аз онҳо барқарор шавад. Азбаски аксари хатогиҳои марбут ба скрепинги веб бо қабули дархостҳои веб алоқаманданд, шумо метавонед тавассути татбиқи дархостҳои такроршаванда самаранокии скреператонро ба таври назаррас беҳтар кунед .
Консепсия оддӣ аст: агар дархост ноком шавад, шумо онро дубора санҷед - як, ду, се ё бештар аз он - то муваффақ шуданаш. 🔄
Аммо дар ин ҷо ҷолиб аст: азбаски яке аз сабабҳои маъмултарини дархости ноком муваққатан кор кардан ё суст будани сервери мавриди ҳадаф аст, шумо намехоҳед бо фиристодани як дархост дар муддати кӯтоҳ такроран онро пур кунед.
Агар дархост ҳоло ноком шавад, эҳтимоли он фавран боз ноком шавад. Маҳз дар он ҷо бозгашти экспоненсиалӣ ба бозӣ меояд!
Ба ҷои дубора кӯшиш кардан, ин техника тадриҷан вақти байни кӯшишҳоро зиёд мекунад ва имкони муваффақияти шуморо тавассути додани вақти барқароршавӣ ба сервери мақсаднок беҳтар мекунад. ⏳
Дар ҳоле, ки шумо метавонед стратегияҳои оддии такрориро бо рамзи фармоишӣ дастӣ амалӣ кунед, бисёре аз муштариёни HTTP бо утилитҳои дарунсохт ё китобхонаҳо барои коркарди такрори худкор меоянд. Масалан, Axios китобхонаи axios-retry пешниҳод мекунад, ки шумо метавонед онро ба таври зерин истифода баред:
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
-и Python бо синфи Retry меояд, ки бефосила бо аксари муштариёни HTTP Python ҳамгиро мешавад.
Ҳангоми тафтиши унсурҳо дар DevTools, шумо шояд васваса карда шавад, ки тугмаи ростро клик кунед ва имконоти "Нусхабардории селектор" -ро интихоб кунед:
Аммо огоҳ бошед, ки натиҷа метавонад чунин бошад:
#__next > div > main > div.sc-d7dc08c8-0.fGqCtJ > div.sc-93e186d7-0.eROqxA > h1
Ин бешубҳа барои скрепинги веб беҳтарин нест….
Масъала? Интихобкунандагони аз ҳад зиёд мушаххас ба монанди инҳо метавонанд ҳангоми тағир додани сохтори саҳифа ба осонӣ шикастанд. Чӣ қадаре ки селектори шумо муфассалтар бошад, ҳамон қадар нозуктар мешавад.
Барои боз ҳам устувортар кардани веби шумо, шумо бояд селекторҳои худро чандир нигоҳ доред. Ба ҷои такя кардан ба дарсҳои марбут ба услуб (ки ҳама вақт иваз мешаванд), диққати худро ба атрибутҳое равона кунед, ки эҳтимоли тағйирёбанда камтаранд, ба монанди id
, data-
ё aria-
. Аксари ин атрибутҳо барои санҷиш ва дастрасӣ пешбинӣ шудаанд, аз ин рӯ онҳо бо мурури замон пайваста боқӣ мемонанд. 💡
Ва дар ҳоле ки интихобкунандагони CSS хондан ва фаҳмидан осонтаранд, XPath қудрати бештарро пешниҳод мекунад. Аммо хавотир нашавед - шумо метавонед аксар вақт бо интихобкунандагони оддии CSS ба ҳамон натиҷаҳо ноил шавед ва шуморо аз ниёз ба коди мураккаби XPath наҷот диҳед. 😌
Барои маълумоти бештар дар бораи он, ба дастури мо дар бораи XPath против CSS селекторҳо нигаред!
Таҳлили саҳифаҳои HTML вақт ва захираҳоро талаб мекунад, алахусус агар шумо бо DOM-и калон ва лонае сарукор дошта бошед. Агар скрепери шумо танҳо чанд саҳифаро таҳлил кунад, ин кори бузург нест.
Ҳоло, вақте ки амалиёти скрепинги шумо васеъ мешавад ва шумо бояд аз миллионҳо саҳифа маълумот гиред, чӣ мешавад? Ин хароҷоти хурд метавонад захираҳои серверро зуд холӣ кунад ва ба вақти умумии скраби шумо соатҳо илова кунад. ⏳
Барои гирифтани фаҳмиши амиқ, ба ин захираҳо муроҷиат кунед:
Дар ҷустуҷӯи муқоисаи пурра? Мақолаи моро дар бораи беҳтарин таҳлилгари HTML хонед.
Хабари хуш? Гузариш аз як таҳлилгар ба дигараш он қадар душвор нест. Масалан, дар BeautifulSoup , ин танҳо як тағири оддии параметр аст:
from bs4 import BeautifulSoup # or using html.parser soup = BeautifulSoup(html_content, "html.parser") # or using lxml parser soup = BeautifulSoup(html_content, "lxml")
Ва дар бораи таҳлилгарони HTML дар браузерҳо ба монанди Chrome чӣ гуфтан мумкин аст? 🤔
Маълумоти бештарро дар видеои зер пайдо кунед:
HTTP/2 версияи навшудаи HTTP мебошад, ки имкон медиҳад дархостҳои сершуморро тавассути як пайвастшавӣ иҷозат диҳад. Ин таъхирро коҳиш медиҳад ва метавонад иҷрои умумии вазифаи скрепингро беҳтар кунад.
Барои санҷидани он, ки оё сайт HTTP/2-ро дастгирӣ мекунад, танҳо DevTools -ро дар браузери худ кушоед, ба ҷадвали "Шабака" гузаред ва сутуни "Протокол" -ро ҷустуҷӯ кунед - агар дар он h2
навишта шавад, сайт HTTP/2-ро истифода мебарад:
Мутаассифона, на ҳама мизоҷони HTTP ва китобхонаҳои скрепинг HTTP/2-ро дастгирӣ мекунанд. Аммо, асбобҳо ба монанди HTTPX барои Python барои HTTP/2 дастгирии пурра пешниҳод мекунанд .
Скрепинги веб асосан вазифаи ба I/O вобаста аст - шумо ба сервер дархост мефиристед, посухро интизоред, маълумотро коркард мекунед ва такрор мекунед. Дар давоми интизорӣ, скрепери шумо асосан бекор аст, ки ин бесамар аст.
Ҳалли? Параллелизм ё ҳамоҳангӣ !
Бо фиристодани дархостҳои сершумор, шумо метавонед ин вақтҳои мурдаро кам кунед ва истифодаи шабакаро оптимизатсия кунед.
🚨 Аммо эҳтиёт бўлинг! 🚨
Бомбгузорӣ кардани сервер бо дархостҳои аз ҳад зиёди ҳамзамон метавонад боиси маҳдуд шудани суръати кор ё манъ шудани IP-и шумо - ду чораи маъмули зидди скраб . 😬
Маслиҳати Pro : Шумо инчунин метавонед вазифаҳои таҳлилро мувозӣ кунед, хусусан агар шумо CPU-ҳои сершуморро истифода баред, ки раванди истихроҷи маълумотро суръат мебахшад. ⚡
Алгоритмҳои мутобиқшавӣ дар асоси AI аз намунаҳо дар додаҳо ва сохторҳои саҳифаи HTML омӯхта, рафтори онҳоро дар вақти воқеӣ танзим мекунанд, то дар болои тағйирот боқӣ монанд. 😮
Ин як тағирдиҳандаи бозӣ барои скрепинги веб аст! 🤯
Вақте ки вебсайтҳо тарҳбандии худро нав мекунанд ё чораҳои зиддиботиро ҷорӣ мекунанд, ин алгоритмҳо метавонанд ба зудӣ мутобиқ шаванд ва кафолат диҳанд, ки скреператон бемаънӣ кор кунад. 🧠
Хулоса, онҳо скреперҳоро оқилтар мекунанд ва ба шумо барои самаранок истихроҷи маълумот кӯмак мекунанд - ҳатто вақте ки сайт тӯбҳои ғайричашмдоштро мепартояд. ⚾ Бо алгоритмҳои мутобиқшавӣ, он ба доштани скрепер монанд аст, ки бо мурури замон таҳаввул меёбад!
Бештар дар боби 4-и ин видео аз ҷониби Форрест Найт маълумот гиред:
Албатта, ҳама маслиҳатҳо ва ҳилаҳое, ки мо то ҳол зикр кардем, метавонанд скреперҳои шуморо тезтар, боэътимодтар, мустаҳкам ва самараноктар кунанд. Аммо биёед воқеӣ бошем - онҳо инчунин мураккабии зиёдеро ба бор меоранд. 😅
Хабари хуш ин аст, ки аксари ин дарсҳо ба аксарияти лоиҳаҳои скреперӣ дахл доранд. Ҳамин тавр, ба ҷои рамзгузории ҳама чиз аз сифр, шумо метавонед функсияҳои қаблан сохташударо барои ҳалли вазифаҳои мушаххас истифода баред. Маҳз ҳамон чизест, ки функсияҳои Scraping Bright Data пешниҳод мекунанд!
Бо 73+ функсияҳои омодаи JavaScript, корбарон зиёда аз 38К скрепер сохтаанд, ки дар 195+ кишвар кор мекунанд. Ин як тонна қудрати пошидан аст! 📈
Рушди худро бо муҳити корӣ суръат бахшед, ки барои кандакорӣ, кушодан ва миқёси ҷамъоварии маълумотҳои веб тарҳрезӣ шудааст:
Акнун шумо медонед, ки чӣ тавр скреператонро бо фаҳмиши таҳиягарони ботаҷрибаи скреперсозӣ баланд кунед!
Дар хотир доред, ки ин танҳо Қисми 3 аст, аз ин рӯ мо дар ними роҳи шаш қисмати худ ба скрепинги пешрафтаи веб қарор дорем! Он камарбанди бехатариро маҳкам нигоҳ доред, зеро мо ба технологияҳои пешрафта, ҳалли оқилона ва маслиҳатҳои инсайдерӣ ғарқ шуданӣ ҳастем.
Истгоҳи навбатӣ? Истифодаи қудрати идоракунии прокси бо AI идорашаванда! 🌐