Web-scraping/parsing 🕸
Pythonist
🌙 Assalomu Alaykum barchaga, Pythonist kanalida "Web-scraping*"ga oid o‘tkazilgan so‘rovnomada:
📊 Ko‘pchilik ushbu mavzuga qiziqishini bildirib o‘tibdi (55%+), katta ehtimol bilan ular bu sohani oz bo‘lsa ham bilishadi. Ammo Web-scrapingdan xabari yo'qlarning soni ikkinchi o‘rinda turibdi (25%+) va umuman qiziqmaydiganlar ham topiladi (10%+).
To‘g'ri so‘rovnomada hamma ilonshunoslarni qatnashtira olmadik, ammo 50+ ta odamning o‘zi admin uchun juda katta BAXT :)Disclaimer*
Maqolani o‘qishni boshlashingizdan oldin buni bilishingiz shart. Ushbu maqola faqatgina bilim berish, xabardor qilish maqsadida yozildi. Maqola muallifi yuzaga keladigan nojo‘ya xatti-harakatlarga javobgar emas.
Mundarija
| Web-scraping nima va qayerlarda qo‘llaniladi?
| Maʼlumotlarning himoyasi. Web-scraping qonuniymi?
| Web-scraper uchun kerakli *toollar
| Amaliyot
Web-scraping nima va qayerlarda qo‘llaniladi?
Web-scraping (inglizcha web-sahifadan qirib tashlash, ajratish) - bu ma'lumotlarning web-resurs sahifalaridan ajratib olish texnologiyasi. Web-scraping kompyuter foydalanuvchisi tomonidan qo'lda amalga oshirilishi mumkin, ammo bu atama odatda maqsadli saytga HTTP so'rovlarini yuboradigan kod orqali amalga oshiriladigan avtomatlashtirilgan jarayonni anglatadi.
Web-scraping web-sahifalarni sintaktik usulda ishlashga yaroqli shakllarga aylantirish uchun ishlatiladi. Web-sahifalar matnni belgilash tillari (HTML va XML) yordamida yaratilgan va kodda juda ko'p foydali ma'lumotlarni o'z ichiga oladi. Biroq, web-resurslarning aksariyati avtomatik qulaylik uchun emas, balki saytda ma'lumotlarni qidirib topishda atay kamchilik va qiyinchiliklar yaratganligi yokida keraksiz ma'lumotlar ko'pligi uchun webning "scarping" texnologiyasi ishlab chiqilgan.
Web-scraping tarixi Internet paydo bo'lishi bilan boshlanadi:
- 1993 yil iyun oyida birinchi web-robot World Wide Web Wanderer yaratildi, u faqat WWW hajmini o'lchash uchun mo'ljallangan edi.
- 1993 yil dekabr oyida esa birinchi WWW qidiruv tizimi paydo bo'ldi. U allaqachon ma'lumotni kuzatishi, indekslashi va havolalarni tartiblash uchun so'zlarni qidirishni kabi funksiyalarni amalga oshirayotgan edi.
- 1994-yilda birinchi toʻliq matnli qidiruv tizimi WebCrawler ishga tushirildi.
- 2000-yilda birinchi Web API va API Crawler paydo bo'ldi. Shu yili Salesforce va eBay o'zlarining APIlarini ishga tushirdilar, bu dasturchilarga ba'zi ommaviy ma'lumotlarga kirish imkonini berdi. O'shandan beri ko'plab web-saytlar Web APIlarini taklif qilishdi, bu esa web-parsingni ancha osonlashtirdi.
- 2004-yilda Python uchun BeautifulSoup kutubxonasi ishga tushirildi. Hamma web-saytlar API chiqarmaganligi sababli, dasturchilar ma'lumotlarni o'zlari ajratib olishiga to'g'ri kelib qoldi. BeautifulSoup kutubxonasi HTML-sahifalar tarkibini tahlil qilish va ma'lumotlarni olishda yordam berib sevimli parserga aylandi. Ayni damda BeautifulSoup(Go'zal sho'rva) eng murakkab va ilg'or web-scraping kutubxonasi hisoblanadi.
- 2018-yilda Internetda 1,8 milliarddan ortiq web-sayt mavjud edi. Aynan web-scraping World Wide Webdan ma'lumotlarni qidirishga imkon berdi, tez o'sib borayotgan Internet yanada qulayroq va foydalanish uchun oson bo'ldi. (🔗)

Web-scraping Internetda avtomatlashtirilgan ma'lumotlarni to'plash uchun muhim vositaga aylandi. U ma'lumotlar bazalari yoki ma'lumotlar banklarini shakllantirish uchun marketing axborot tizimlarining (MAT) bir qismidir, u yordamida kerakli ma'lumotlar jadvalli hisobotlar shaklida taqdim etiladi. Qidiruv tizimlari, kontent agregatorlari ham web-scraperlar bilan o'zaro bog'langan.
Web-parsing - ma'lumotlarni nusxalashning bir shakli bo'lib, unda olish uchun zarur bo'lgan ma'lum ma'lumotlar Internetdan olinadi va odatda markaziy mahalliy ma'lumotlar bazasida yoki elektron jadvallarda keyinchalik olingan web-resursni tahlil qilish, qayta formatlash va hokazolar u-n to'planadi. Odatda ma'lumotlar boshqa turli saytlarda qidirish va kontakt ma'lumotlar bazasini yaratish uchun ma'lum bir shaxslarning ismlari, telefon raqamlari, elektron pochta manzillari, URL-manzillarini nusxalash uchun qo'llaniladi.
Asosan, web-scraperlar quyidagi vazifalarni hal qiladi:
- Kerakli ma'lumotlarni qidirish;
- Internetdan ma'lumotlarni nusxalash;
- Saytlardagi yangilanishlarni kuzatish;
Web-scraping mustaqil vosita sifatida ishlatilishi va maqsadli ma'lumotlarni qidirish uchun xizmat qilishi mumkin, shuningdek, web-indekslash, online monitoring, narxlarni o'zgarishi va ularni taqqoslash, raqobatni kuzatish uchun hatto gigant kompaniyalarining monitoring tooliga aylangan.

Ma'lum bir saytni scrape qilishda avtomatlashtirilgan dasturlar botlardir.
Maʼlumotlarning himoyasi. Web-scraping qonuniymi?
Web-sayt ma'murlari ma'lumotlarning raqobatchilar tomonidan ishlatilishini oldini olish uchun web-scraperlarini bloklashi mumkin.

Scraping dasturlarini quyidagicha aniqlash mumkin:
- Foydalanuvchining noodatiy xatti-harakatlari (masalan, har soniyada saytning sahifasiga yuzlab so'rovlar);
- Takroriy noaniq harakatlar (foydalanuvchi bir xil vazifalarni qayta-qayta bajarmaydi!);
- Faqat web-sayt kodida mavjud bo'lgan va oddiy foydalanuvchilarga ko'rinmaydigan havolalardan foydalanish;
Bloklash usullari:
- Muayyan IP-manzildan saytga kirishni taqiqlash (masalan, bot har bir seansda 100 dan ortiq sahifaga so'rov yuborgan bo'lsa);
- Sayt admini nuqtai nazaridan saytda hisob raqam ochilishi tizimi mavjud bo'lsa ma'lumotlar bazasidan bloklash (*vangalikni yoqib :));
Shu o'rinda web-scraper dasturchilar uchun ham tavsiyalar:
- Bloklashni chetlab o'tish uchun botingizni saytda foydalanuvchi xatti-harakatlariga imkon qadar yaqin bo'lgan amallarni bajarishiga dasturlash;
- Vaqti-vaqti bilan IP-manzillarni o'zgartirib turish;
- Foydalanuvchi agenti identifikatori (User Agent)ni o'zgartirish va web-scraperning tezligini optimal darajada sozlash;
- Boshqa saytdagi ma'lumotlarni foydalanganda manbaning ko'rsatilishi;
Ana endi asosiy savolimizning javobiga o'tsak bo'ladi.
Web-scraping qonuniymi?
Hamma narsa nima va qanday scrape qilishingizga bog'liq. Bu telefon bilan suratga olishga juda o'xshaydi. Aksariyat hollarda bu mutlaqo qonuniydir, ammo "военный час"lar, banklar, davlat idoralarida maxfiy hujjatlarni suratga olish sizga muammolarni keltirib chiqarishi mumkin. Web-scraping ham xuddi shunday. Uni taqiqlovchi qonun yoki qoida yo'q. Lekin bu siz hamma saytni scrape qilib tashlashingiz mumkin degani emas!
Web-scraper uchun kerakli toollar
Okay, shu yergacha o'qib kelgan bo'lsangiz demak oz bo'lsada qiziqtira olgan ekanman, juda xursandman. Davom etamiz...

Tabiiyki kanalimiz pythonga ixtisoslashtirilgan, demak web-scraper botlarimiz ham pythonda dasturlanadi :)
- Python;
- Web-browser, Postman;
- Requests;
- BeautifulSoup;
- Selenium, Scrapy;
- CSV, JSON, Pandas;
Web-browser - nomidan ma'lum bu web-sahifalarni ko'rish uchun ishlatiladigan dastur. Shaxsan menga Chrome juda yoqadi. Bizga browser saytni *networking qilishda juda qo'l keladi. Web-scraperni yozishdan oldin saytni tahlil qilish juda muhim, chunki ba'zi web-saytlar o'zlari uchun yashirin API chiqargan bo'ladi, tabiiyki bu халява))
Postman - bu API yaratish va ulardan foydalanish uchun tayyor dasturiy platforma. Qisqa qilib aytganda yuborilgan so'rov, APIlarini tahlil qilishda qo'llaniladi.
Requests - bu Python dasturlash tili uchun HTTP kutubxona. Loyihaning maqsadi HTTP so'rovlarini oddiyroq va odamlar uchun qulayroq qilishdir. Requests Pythonning standart kutubxonalari ro'yxatiga kiritilmagan eng mashhur Python kutubxonalaridan biri.
BeautifulSoup - bu HTML va XML hujjatlarini tahlil qilish uchun yaratilgan kutubxona. U HTMLdan ma'lumotlarni ajratib olish uchun ishlatiladi, tahlil qilingan sahifalar uchun ma'lumotlarni qidirishda o'ziga xos daraxtni yaratadi, bu yuqorida aytganimizdek, web-scraping uchun juda foydalidir.
Go'zal sho'rva loyihasiga o'z hissasini qo'shishda davom etayotgan Leonard Richardson tomonidan yozilgan va qo'shimcha ravishda ochiq manbali texnik xizmat ko'rsatishga pulli obuna bo'lgan Tidelift tomonidan qo'llab-quvvatlanadi.
Requests hamda BeautifulSoup kutubxonalari haqida batafsil
Selenium WebDriver - bu brauzerlarni boshqarish uchun dasturiy ta'minot kutubxonasi. WebDriver esa turli browserlardan foydalanish uchun drayverlarni taqdim etadi.
Bunday web-drayver bilan browserda barcha harakatlar ketma-ketligini avtomatik ravishda bajaradigan botni yaratishda qo'llash mumkin.
Selenium nafaqat Python uchun balkim Java, .NET (C#), Ruby, JavaScriptda ham mavjud, drayverlar Firefox, Internet Explorer, Safari, Andriod, iOS (shuningdek Chrome va Opera) brauzerlari uchun joriy qilingan.
Scrapy - bu turli web-saytlardan ma'lumotlarni to'plashda yordam beradigan ilg'or Python web-scraping frameworki. Scrapy Spiders deb nomlangan web-scannerlardan foydalanadi. Ular ma'lumotlarni olishlari, qayta ishlashlari va saqlashlari mumkin. Scrapy asinxron framework bo'lgan Twitstedning ustida qurilganligi sababli, u threadlarni bloklamasdan so'rovlarni yuboradi. Bu tezlikni ancha oshirilishiga sabab bo'ladi.
CSV, JSON, Pandas kabi Python kutubxonalari olingan ma'lumotlarni yig'ishda, analiz qilishda chiroyli viewga keltirishda ishlatiladi.
Hozirda scraping uchun eng ilg'or kutubxona va frameworklar shular. Ularni o'rganishni boshlashingizni tavsiya qilaman. Va shuningdek tez orada InshaAlloh YouTubeda "Web-scraping mini kurs" playlistini taqdim qilamiz. O'zbek tilidagi mini bepul kursimizni iloji boricha mazmunli, bilimlarga boy qilib zeriktirmasdan o'tishiga harakat qilamiz.
Amaliyot
Topshiriq:
obhavo.uz saytidan kiritilgan hudud uchun ob-havo ma'lumotlari consolega chiqarilsin;
INPUT:
Toshkent
OUTPUT:
+8° +2° Yomg'ir Namlik: 76% Shamol: Sharqiy-shimoli-sharq, 2.6 m/s Bosim: 769 mm sim. ust. Oy: Yosh oy Quyosh chiqishi: 07:25 Quyosh botishi: 17:48

Saytni networking qilganimda sayt ma'muriyatiga rahmat qo'llari dard ko'rmasin, web-scraperlar qiynalmasliklari uchun havolasi so'ngida qaysi hududni kiritsam osha joy uchun ma'lumotlarni chiqarib beradi (ya'ni har bir hudud uchun alohida sahifa). Va bu biz uchun juda qo'l keladi))
Demak, qilinishi kerak bo'lgan amallar ketma-ketligi - Algorithm:
- requests kutubxonasi orqali saytga so'rov yuborish mexanizmini tuzish kerak bo'ladi birinchi navbatda (qidiruv tizimi);
import requests
def weather_data(zone: str):
url = 'https://obhavo.uz/'
response = requests.get(url + zone)
if response.status_code != 200:
print('Bunday hudud mavjud emas.')
print(f'{zone.title()} hududida bugun:')
# some code
if __name__ == '__main__':
zone = input('Hududni kiriting: ').lower()
weather_data(zone)

- Ana endi BeautifulSoupni ishlatish vaqti keldi, kodga quyidagi kusoklarni qo'shib yakuniy kodni hosil qilamiz:
import requests
from bs4 import BeautifulSoup
def weather_data(zone: str):
url = 'https://obhavo.uz/'
response = requests.get(url + zone)
if response.status_code != 200:
return print('Bunday hudud mavjud emas.')
print(f'{zone.title()} hududida bugun:')
soup = BeautifulSoup(response.content, 'html.parser')
weather = soup.find(class_='padd-block')
temp = weather.find(class_='current-forecast').get_text()
desc = weather.find(class_='current-forecast-details')
desc1 = desc.find(class_='col-1').get_text()
desc2 = desc.find(class_='col-2').get_text()
print(temp.strip() + '\n' + desc1.strip() + '\n' + desc2.strip())
if __name__ == '__main__':
zone = input('Hududni kiriting: ').lower()
weather_data(zone)

Mana 25 qatorli kod bilan foydalanishga tayyor qilib dastur tuzdik. Va bu Realtime Parsing (RP)ga yaqqol misol bo'la oladi. Shuningdek One-time Parsing (OP) ham mavjud va u o'zgarmas ma'lumotlarni yig'ishda ishlatiladi.
Dynamic/Static websaytlarga Realtime/One-time turdagi parsinglarni tez orada YouTubedagi Web-parsing kursida batafsil ko'rib chiqamiz...
Maqola Pythonist kanali uchun Hoosnick tomonidan ❤️ yozildi.*scraping - qirib tashlash, ajratib olish *disclaimer - yuzaga kelishi mumkin bo'lgan huquqbuzarlik oqibatlari uchun javobgarlikdan yozma ravishda voz kechish *tool - asbob, jihoz *vangalik - bashorat qilish, fol ochishlik. Bu so'z mashhur ko'r folbin Vanga nomi bilan kelib chiqqan. *networking - muammolarni imkon qadar tez va samarali hal qilishga qaratilgan ijtimoiy va kasbiy faoliyat.