IlmHamroh
Python kursi/Avtomatlashtirish6/10-dars16 daqiqa
Mundarija (22)

26.6-dars: Scraping etikasi va cheklovlar

26-QISM — AVTOMATLASHTIRISH · 6-dars


1. Kirish va motivatsiya

26.3–26.5 da scraping texnikasini o'rgandik (requests, BeautifulSoup, brauzer). Lekin scraping — texnik masala emas, faqat: u boshqalarning serveriga, ma'lumotiga, huquqlariga ta'sir qiladi. "Qila olaman" ≠ "qilishim kerak". Mas'uliyatsiz scraping — serverni yiqitish (DDoS kabi), qonun buzish (himoyalangan ma'lumot), etik muammo (shaxsiy ma'lumot). Professional scraping etika va qonunni biladi.

Scraping etikasi va cheklovlari — mas'uliyatli scraping: robots.txt (sayt qoidasi — nima scraping mumkin), rate limiting (so'rov sur'atini cheklash — serverga yuk kamaytirish), Terms of Service (foydalanish shartlari), qonuniy (mualliflik, shaxsiy ma'lumot — GDPR), etika (server yuki, ma'lumot huquqlari). Bu "kuch bilan mas'uliyat" 26.2-bob ning scraping shakli. To'g'ri scraping: sayt qoidasiga rioya, sekin so'rov, qonuniy ma'lumot. Etika — texnikadan muhimroq.

Real vaziyat. Bir startap agressiv scraping qildi — bir saytga soniyada 100 so'rov. Sayt yiqildi (server yuk), startap IP bloklandi, huquqiy ogohlantirish keldi. Aksincha, boshqa jamoa: robots.txt tekshirdi (ruxsat), sekin so'rov (2 soniya oraliq), User-Agent (kim ekanini aytdi). Muammosiz, uzoq muddat. Etik scraping — barqaror. Mas'uliyatsiz — bloklanish va huquqiy muammo.

Bu darsda scraping etikasi va cheklovlarini o'rganamiz.

Bu darsda:

  • robots.txt (sayt qoidasi)
  • Rate limiting (sur'at cheklash)
  • Terms of Service
  • Qonuniy jihatlar
  • Etik tamoyillar
  • API afzalligi
  • Identifikatsiya (User-Agent)
  • Amaliy: mas'uliyatli scraper

ℹ Misollarda urllib.robotparser (robots.txt) va rate limiting naqshi bilan sinaladi — deterministik.


2. Nazariya — chuqur tushuntirish

2.1. robots.txt (sayt qoidasi)

Sayt scraping qoidasi:

# example.com/robots.txt
User-agent: *
Disallow: /admin/       # scraping man
Disallow: /private/
Allow: /public/         # ruxsat
Crawl-delay: 2          # 2 soniya oraliq

robots.txt — sayt ildizidagi fayl (example.com/robots.txt) — scraping qoidasi: User-agent (kimga), Disallow (man qilingan yo'llar), Allow (ruxsat), Crawl-delay (so'rovlar oraligi). Bu standart (kelishilgan qoida — qonun emas, lekin hurmat kerak). Scraping oldidan tekshir (nima mumkin). urllib.robotparser — Python'da o'qish. robots.txt hurmat — etik scraping birinchi qoidasi. "Sayt qoidasini o'qi".

2.2. Rate limiting (sur'at cheklash)

So'rov sur'atini sekinlash:

python
import time
for url in urls:
    scrape(url)
    time.sleep(2)     # har so'rov orasida 2 soniya
# yoki robots.txt Crawl-delay

Rate limiting — so'rov sur'atini cheklash (time.sleep bilan oraliq): serverga yukni kamaytirish (ko'p tez so'rov — serverni sekinlashtiradi/yiqitadi). time.sleep(2) (har so'rov orasida 2 soniya), robots.txt Crawl-delay hurmat. Sabab: sizning skriptingiz boshqaning serveriga so'rov — sekin bo'lsin (odam brauzerda sekin ko'radi). Agressiv scraping — DDoS kabi (server yiqiladi) → bloklanish. Sekin so'rov — hurmat va barqarorlik. "Shoshilma — serverga hurmat".

2.3. Terms of Service

Foydalanish shartlari:

Terms of Service (ToS): sayt qoidasi
   - scraping ruxsat/man
   - ma'lumot ishlatish chegarasi
   - avtomatik kirish siyosati
# robots.txt'dan boshqa (huquqiy hujjat)

Terms of Service (ToS — foydalanish shartlari) — sayt huquqiy hujjati: scraping ruxsat/man, ma'lumot ishlatish chegarasi, avtomatik kirish. robots.txt'dan farq: robots.txt — texnik ko'rsatma, ToS — huquqiy shartnoma (buzish — huquqiy oqibat). Ko'p sayt ToS'da scraping man qiladi (ayniqsa tijorat). Muhim: ToS'ni o'qi (scraping ruxsatmi?). Ba'zi sudlar ToS buzishni jazolagan. ToS — qonuniy scraping asosi.

2.4. Qonuniy jihatlar

Scraping va qonun:

Jihat Tafsilot
Mualliflik Kontent himoyalangan (nusxalash man)
Shaxsiy ma'lumot GDPR (Yevropa), maxfiylik
ToS Huquqiy shartnoma
Kompyuter huquqbuzarligi Ruxsatsiz kirish

Qonuniy jihatlar — scraping qonun bilan bog'liq: mualliflik (kontent — matn, rasm himoyalangan; nusxalash/tarqatish man), shaxsiy ma'lumot (GDPR — Yevropa, ismlar, email — maxfiylik), ToS (huquqiy), kompyuter huquqbuzarligi (ruxsatsiz kirish, himoyani aylanib o'tish). Qoida: ochiq ma'lumot (fakt, narx) odatda OK, himoyalangan/shaxsiy — ehtiyot. Shubhada — huquqshunos. Qonun mamlakatga qarab (davlat qonuni). Scraping qonuniy chegaralarda.

2.5. Etik tamoyillar

Texnikadan tashqari:

Etik scraping:
   - robots.txt hurmat
   - sekin so'rov (server yuki)
   - identifikatsiya (User-Agent — kim)
   - ochiq/ruxsat etilgan ma'lumot
   - ma'lumotni to'g'ri ishlatish

Etik tamoyillar — "qila olaman" ≠ "qilishim kerak": robots.txt hurmat (sayt qoidasi), sekin so'rov (server yuki — 26.2 mas'uliyat), identifikatsiya (User-Agent — kim ekaningizni ayt, yashirinma), ruxsat etilgan ma'lumot (ochiq — fakt, narx), to'g'ri ishlatish (ma'lumotni zararga emas). Etik scraping — boshqalarga hurmat (server, ma'lumot, huquqlar). "Boshqaning resursiga mehmon — odob bilan" 26.3-bob. Etika — professional scraping asosi.

2.6. API afzalligi

Scraping o'rniga API:

python
# scraping (HTML — mo'rt, etik muammo):
requests.get(sayt) → BeautifulSoup

# API (rasmiy — barqaror, ruxsat etilgan):
requests.get(api_url).json()
# API — sayt bergan rasmiy yo'l

API afzal (scraping o'rniga) — ko'p sabab: rasmiy (sayt bergan yo'l — ruxsat etilgan), barqaror (26.4 — HTML mo'rt), toza (JSON — 19-qism), etik (sayt ruxsat bergan). Scraping oldidan: API bormi? (ko'p sayt beradi — narx, ob-havo, ijtimoiy). API — sayt bilan hamkorlik (scraping — bir tomonlama). Agar API bor bo'lsa — uni ishlat (etik, barqaror, oson). Scraping — API yo'q bo'lgandagi oxirgi chora. "Rasmiy yo'l bor bo'lsa — undan yur".

2.7. Identifikatsiya (User-Agent)

Kim ekaningizni ayt:

python
headers = {
    "User-Agent": "MyResearchBot/1.0 (email@example.com)"
}
# yashirinma (soxta brauzer emas)
# aloqa yo'li (email — sayt bog'lansa)

Identifikatsiya (User-Agent) — kim ekaningizni ochiq ayt: User-Agent: "MyBot/1.0 (email)" (bot nomi + aloqa). Sabab: halollik (yashirinma — soxta brauzer emas), aloqa (sayt muammo bo'lsa bog'lansa), hurmat (kim scraping qilayapti — ma'lum). Yashirin scraping (soxta User-Agent, bloklashdan qochish) — etik emas. Ochiq identifikatsiya — halol scraping. "Kim ekaningizni yashirma — ochiq bo'l".

2.8. Mas'uliyatli scraping

Mas'uliyatli scraping — texnika + etika + qonun: robots.txt (tekshir), rate limiting (sekin), ToS (o'qi), qonuniy (ochiq ma'lumot), identifikatsiya (ochiq), API (afzal). "Qila olaman" ≠ "qilishim kerak" — texnik imkoniyat axloqiy ruxsat emas. Mas'uliyatsiz scraping — bloklanish, huquqiy muammo, serverga zarar. Mas'uliyatli scraping — barqaror (uzoq muddat ishlaydi), qonuniy, etik. Bu 26.2 (fayl — kuch bilan mas'uliyat) ning scraping shakli. "Kuchli vosita — mas'uliyatli qo'l" — scraping boshqalarga ta'sir qiladi, ehtiyot va hurmat bilan.


3. Tez ma'lumotnoma

python
from urllib.robotparser import RobotFileParser
import time

# robots.txt tekshirish:
rp = RobotFileParser()
rp.set_url("https://example.com/robots.txt")
rp.read()
rp.can_fetch("*", "/public/page")     # ruxsatmi?

# rate limiting (server yukini kamaytir):
for url in urls:
    scrape(url)
    time.sleep(2)                      # oraliq

# identifikatsiya (ochiq):
headers = {"User-Agent": "MyBot/1.0 (email@example.com)"}

# tekshiruv ro'yxati:
# 1. robots.txt (ruxsatmi?)
# 2. ToS (scraping man emasmi?)
# 3. API bormi? (afzal)
# 4. rate limiting (sekin so'rov)
# 5. ochiq ma'lumot (shaxsiy/himoyalangan emas)
# 6. User-Agent (kim)

Etika xulosasi

robots.txt (sayt qoidasi) · rate limiting (sekin — server yuki) · ToS (huquqiy)
Qonuniy (mualliflik, shaxsiy) · etik (hurmat) · API afzal · User-Agent (ochiq)
"Qila olaman" ≠ "qilishim kerak" · mas'uliyatli = barqaror

4. Batafsil misollar

Misollarda urllib.robotparser (robots.txt) va rate limiting naqshi bilan sinaladi — deterministik.

Misol 1 — robots.txt tekshirish

python
"""robotparser: robots.txt tahlil; can_fetch (ruxsatmi?) — sayt qoidasiga rioya."""

from urllib.robotparser import RobotFileParser


ROBOTS_TXT = """
User-agent: *
Disallow: /admin/
Disallow: /private/
Allow: /public/
Crawl-delay: 2

User-agent: BadBot
Disallow: /
""".strip()


def main() -> None:
    rp = RobotFileParser()
    rp.parse(ROBOTS_TXT.splitlines())

    print("=== 1. Ruxsat etilgan yo'l (/public/) ===")
    print(f"  /public/page: {rp.can_fetch('*', '/public/page')}")

    print("\n=== 2. Man qilingan yo'llar ===")
    print(f"  /admin/x: {rp.can_fetch('*', '/admin/x')}")
    print(f"  /private/data: {rp.can_fetch('*', '/private/data')}")

    print("\n=== 3. Maxsus bot (BadBot — hammasi man) ===")
    print(f"  BadBot /anything: {rp.can_fetch('BadBot', '/anything')}")

    print("\n=== 4. robots.txt qoidalari ===")
    print("  Disallow: man qilingan yo'llar")
    print("  Allow: ruxsat, Crawl-delay: oraliq")
    print("  ⭐ robots.txt — scraping oldidan tekshir (sayt qoidasi)")


if __name__ == "__main__":
    main()

Natijaning muhim qismi:

text
=== 1. Ruxsat etilgan yo'l (/public/) ===
  /public/page: True

=== 2. Man qilingan yo'llar ===
  /admin/x: False
  /private/data: False

=== 3. Maxsus bot (BadBot — hammasi man) ===
  BadBot /anything: False

=== 4. robots.txt qoidalari ===
  Disallow: man qilingan yo'llar
  Allow: ruxsat, Crawl-delay: oraliq
  ⭐ robots.txt — scraping oldidan tekshir (sayt qoidasi)

Nima ko'rsatdi: 2.1-bo'lim.

Misol 2 — Rate limiting

python
"""rate limiting: so'rov oraligi (server yuki kamaytirish) — kutish vaqti hisoblash."""


class RateLimiter:
    """So'rovlar orasida minimal oraliq (server yuki)."""

    def __init__(self, delay_soniya: float) -> None:
        self.delay = delay_soniya
        self.oxirgi_sorov = 0.0

    def kutish_vaqti(self, hozir: float) -> float:
        """Keyingi so'rov uchun necha soniya kutish."""
        o_tgan = hozir - self.oxirgi_sorov
        return max(0.0, self.delay - o_tgan)


def main() -> None:
    limiter = RateLimiter(delay_soniya=2.0)

    print("=== 1. Birinchi so'rov (t=0) ===")
    print(f"  kutish: {limiter.kutish_vaqti(0)} soniya")
    limiter.oxirgi_sorov = 0.0

    print("\n=== 2. Tez keyingi so'rov (t=1) ===")
    print(f"  kutish (1 soniya o'tdi): {limiter.kutish_vaqti(1)} soniya")

    print("\n=== 3. Yetarli kutgach (t=3) ===")
    print(f"  kutish (3 soniya o'tdi): {limiter.kutish_vaqti(3)} soniya")

    print("\n=== 4. Nega rate limiting ===")
    print("  tez so'rov → serverga yuk (yiqiladi, bloklanadi)")
    print("  oraliq → hurmat, barqarorlik")
    print("  ⭐ rate limiting — serverga yukni kamaytirish (sekin)")


if __name__ == "__main__":
    main()

Natijaning muhim qismi:

text
=== 1. Birinchi so'rov (t=0) ===
  kutish: 2.0 soniya

=== 2. Tez keyingi so'rov (t=1) ===
  kutish (1 soniya o'tdi): 1.0 soniya

=== 3. Yetarli kutgach (t=3) ===
  kutish (3 soniya o'tdi): 0.0 soniya

=== 4. Nega rate limiting ===
  tez so'rov → serverga yuk (yiqiladi, bloklanadi)
  oraliq → hurmat, barqarorlik
  ⭐ rate limiting — serverga yukni kamaytirish (sekin)

Nima ko'rsatdi: 2.2-bo'lim.

Misol 3 — Etik tekshiruv ro'yxati

python
"""etik scraping tekshiruv ro'yxati: robots.txt, ToS, API, rate limit, ochiq ma'lumot."""


def etik_tekshiruv(sayt: dict) -> dict:
    """Scraping etik-mi tekshir."""
    natija = {}
    natija["robots_ruxsat"] = sayt.get("robots_allow", False)
    natija["tos_ruxsat"] = not sayt.get("tos_scraping_man", True)
    natija["api_bor"] = sayt.get("api", False)
    natija["ochiq_malumot"] = not sayt.get("shaxsiy_malumot", True)
    natija["etik"] = all([natija["robots_ruxsat"], natija["tos_ruxsat"], natija["ochiq_malumot"]])
    return natija


def main() -> None:
    print("=== 1. Yaxshi sayt (etik scraping mumkin) ===")
    yaxshi = {"robots_allow": True, "tos_scraping_man": False, "api": True, "shaxsiy_malumot": False}
    n1 = etik_tekshiruv(yaxshi)
    print(f"  robots: {n1['robots_ruxsat']}, ToS: {n1['tos_ruxsat']}, ochiq: {n1['ochiq_malumot']}")
    print(f"  etik: {n1['etik']}")

    print("\n=== 2. Yomon sayt (scraping man) ===")
    yomon = {"robots_allow": False, "tos_scraping_man": True, "shaxsiy_malumot": True}
    n2 = etik_tekshiruv(yomon)
    print(f"  etik: {n2['etik']} (robots/ToS man, shaxsiy ma'lumot)")

    print("\n=== 3. API bor (afzal) ===")
    print(f"  API bor: {n1['api_bor']} → scraping o'rniga API")

    print("\n=== 4. Tekshiruv ro'yxati ===")
    print("  robots.txt + ToS + API + ochiq ma'lumot + rate limit")
    print("  ⭐ etik tekshiruv — 'qila olaman' emas, 'qilishim kerak'")


if __name__ == "__main__":
    main()

Natijaning muhim qismi:

text
=== 1. Yaxshi sayt (etik scraping mumkin) ===
  robots: True, ToS: True, ochiq: True
  etik: True

=== 2. Yomon sayt (scraping man) ===
  etik: False (robots/ToS man, shaxsiy ma'lumot)

=== 3. API bor (afzal) ===
  API bor: True → scraping o'rniga API

=== 4. Tekshiruv ro'yxati ===
  robots.txt + ToS + API + ochiq ma'lumot + rate limit
  ⭐ etik tekshiruv — 'qila olaman' emas, 'qilishim kerak'

Nima ko'rsatdi: 2.3, 2.4, 2.5, 2.6-bo'limlar.

Misol 4 — Amaliy: mas'uliyatli scraper

Real mas'uliyatli scraping: robots.txt tekshir, rate limit, User-Agent, xato boshqarish. Bu — etik scraper'ning namunasi.

python
"""to'liq mas'uliyatli scraper (mock): robots tekshir, rate limit, User-Agent, ochiq ma'lumot."""

from urllib.robotparser import RobotFileParser


ROBOTS = """
User-agent: *
Disallow: /private/
Allow: /
Crawl-delay: 2
""".strip()


class MasuliyatliScraper:
    def __init__(self, robots_txt: str, delay: float) -> None:
        self.rp = RobotFileParser()
        self.rp.parse(robots_txt.splitlines())
        self.delay = delay
        self.headers = {"User-Agent": "ResearchBot/1.0 (email@example.com)"}
        self.sorovlar = 0

    def can_scrape(self, yo_l: str) -> bool:
        return self.rp.can_fetch("*", yo_l)

    def scrape(self, yo_l: str) -> str:
        if not self.can_scrape(yo_l):
            return f"MAN: {yo_l} (robots.txt)"
        self.sorovlar += 1
        # real: time.sleep(self.delay); requests.get(...)
        return f"OK: {yo_l} (User-Agent bilan, {self.delay}s oraliq)"


def main() -> None:
    scraper = MasuliyatliScraper(ROBOTS, delay=2.0)

    print("=== 1. Ruxsat etilgan sahifa ===")
    print(f"  {scraper.scrape('/public/data')}")

    print("\n=== 2. Man qilingan sahifa ===")
    print(f"  {scraper.scrape('/private/secret')}")

    print("\n=== 3. Identifikatsiya (User-Agent) ===")
    print(f"  User-Agent: {scraper.headers['User-Agent']}")

    print("\n=== 4. Statistika ===")
    scraper.scrape("/page1")
    scraper.scrape("/page2")
    print(f"  muvaffaqiyatli so'rovlar: {scraper.sorovlar}")
    print(f"  rate limit: {scraper.delay}s oraliq")
    print("  ⭐ mas'uliyatli scraper — robots + rate + User-Agent")


if __name__ == "__main__":
    main()

Natijaning muhim qismi:

text
=== 1. Ruxsat etilgan sahifa ===
  OK: /public/data (User-Agent bilan, 2.0s oraliq)

=== 2. Man qilingan sahifa ===
  MAN: /private/secret (robots.txt)

=== 3. Identifikatsiya (User-Agent) ===
  User-Agent: ResearchBot/1.0 (email@example.com)

=== 4. Statistika ===
  muvaffaqiyatli so'rovlar: 3
  rate limit: 2.0s oraliq
  ⭐ mas'uliyatli scraper — robots + rate + User-Agent

Nima ko'rsatdi: 2.1–2.8-bo'limlar.


5. To'g'ri va noto'g'ri tushunishlar

Noto'g'ri fikr To'g'risi
"Qila olsam — qilaman" Etika, qonun ham
"robots.txt — texnik detal" Hurmat qilish kerak
"Tez so'rov — samarali" Serverga yuk (sekin)
"Barcha ma'lumot ochiq" Himoyalangan/shaxsiy bor
"ToS keraksiz" Huquqiy shartnoma
"User-Agent yashir" Ochiq (halol)
"Scraping har doim OK" Qonun/etikaga bog'liq
"API va scraping teng" API afzal (rasmiy)

6. Keng tarqalgan xatolar va yechimlari

1. robots.txt tekshirmaslik

python
requests.get(sayt)   # robots man qilgan bo'lsa?      # ⚠️
rp.can_fetch("*", url)   # avval tekshir               # ✅

2. Rate limiting yo'q (server yuk)

python
for u in urls: scrape(u)   # tez, ko'p                # ⚠️
for u in urls: scrape(u); time.sleep(2)                # ✅

3. Soxta User-Agent (yashirish)

python
{"User-Agent": "Mozilla/5.0..."}   # soxta brauzer     # ⚠️
{"User-Agent": "MyBot/1.0 (email)"}   # ochiq          # ✅

4. Shaxsiy ma'lumot scraping

python
# ismlar, email yig'ish                                 # ⚠️ (GDPR)
# ochiq, ruxsat etilgan ma'lumot                         # ✅

5. ToS o'qimaslik

python
# darrov scraping                                       # ⚠️
# ToS: scraping ruxsatmi?                                # ✅

6. API borligini tekshirmaslik

python
# HTML scraping                                         # ⚠️ (API bor?)
# API bormi? (rasmiy — afzal)                            # ✅

7. Bloklashdan qochish (proxy, soxta)

python
# IP almashtirish, soxta User-Agent                     # ⚠️ (etik emas)
# robots.txt hurmat (bloklansa — sabab bor)              # ✅

7. Integratsiya — bu bilim qayerda kerak bo'ladi

  • 26.3–26.5 (o'tilgan): Scraping texnikasi
  • 26.2-dars (o'tilgan): Kuch bilan mas'uliyat
  • 26.7-dars: API — rasmiy yo'l
  • 20.7-dars (o'tilgan): Auth — ruxsat
  • 31-qism: Loyihalar — etik scraping

8. Eng yaxshi amaliyotlar

  1. robots.txt tekshir (ruxsatmi?).

  2. Rate limiting (sekin — server yuki).

  3. ToS o'qi (huquqiy).

  4. Ochiq ma'lumot (shaxsiy/himoyalangan emas).

  5. User-Agent ochiq (halol, aloqa).

  6. API afzal (rasmiy — bor bo'lsa).

  7. "Qila olaman" ≠ "qilishim kerak".

  8. Shubhada — huquqshunos.


9. Amaliy topshiriq

Vazifa 1: Bashorat qiling

python
1.  # robots.txt nima?
2.  # Disallow nima?
3.  # Crawl-delay nima?
4.  # rate limiting nima?
5.  # nega sekin so'rov?
6.  # ToS nima?
7.  # robots.txt vs ToS?
8.  # qonuniy jihatlar?
9.  # GDPR nima?
10. # etik User-Agent?
11. # API nega afzal?
12. # "qila olsam" degani?
Javoblar
  1. Sayt scraping qoidasi
  2. Man qilingan yo'llar
  3. So'rovlar oraligi
  4. So'rov sur'atini cheklash
  5. Serverga yukni kamaytirish
  6. Foydalanish shartlari (huquqiy)
  7. robots texnik, ToS huquqiy
  8. Mualliflik, shaxsiy, ToS
  9. Shaxsiy ma'lumot himoya (Yevropa)
  10. Ochiq (kim, aloqa) — yashirin emas
  11. Rasmiy, barqaror, etik
  12. Imkoniyat ≠ axloqiy ruxsat

Vazifa 2: Xatolarni tuzating

python
1.  requests.get(sayt)   # robots?         # tekshir

2.  for u in urls: scrape(u)               # sleep

3.  {"User-Agent": "Mozilla..."}           # ochiq

4.  # ismlar yig'ish                        # ochiq ma'lumot

5.  # darrov scraping                       # ToS
Javoblar
python
1.  rp.can_fetch("*", url)

2.  ...; time.sleep(2)

3.  {"User-Agent": "MyBot/1.0 (email)"}

4.  # ochiq, ruxsat etilgan ma'lumot

5.  # ToS tekshir (scraping ruxsatmi?)

Vazifa 3: robots.txt

Tekshir:

  1. RobotFileParser
  2. can_fetch
  3. Disallow
  4. Crawl-delay

Vazifa 4: Rate limiting

Sekin:

  1. time.sleep
  2. Oraliq
  3. Server yuki
  4. Barqarorlik

Vazifa 5: Etik tekshiruv

Ro'yxat:

  1. robots
  2. ToS
  3. API
  4. Ochiq ma'lumot

Vazifa 6: Mas'uliyatli

Scraper:

  1. robots
  2. rate limit
  3. User-Agent
  4. Xato

Vazifa 7: O'ylash

Scraping etikasining asosi — "qila olaman" (texnik imkoniyat) ≠ "qilishim kerak" (axloqiy ruxsat). Texnika (26.3–26.5) sizga kuch beradi, lekin mas'uliyat — etika va qonun. Nima uchun "texnik imkoniyat axloqiy ruxsat emas", va nega scraping (boshqalarning serveri, ma'lumoti, huquqlariga ta'sir) ayniqsa mas'uliyatli yondashuv talab qiladi — kuch va mas'uliyat orasidagi bog'liqlik nega muhim?

Javob

Qisqa javob: "Qila olaman" (texnik imkoniyat — kod scraping qila oladi) ≠ "qilishim kerak" (axloqiy/qonuniy ruxsat), chunki texnika kuch beradi, lekin kuch mas'uliyat bilan keladi. Scraping ayniqsa mas'uliyatli, chunki u boshqalarga ta'sir qiladi: server (ko'p so'rov — yuk, yiqilish), ma'lumot (himoyalangan, shaxsiy — huquqlar), sayt egasi (ToS, biznes). Bu sizning emas, boshqaning resursi va huquqi — hurmat kerak. "Kuch va mas'uliyat bog'liq": kuch qancha katta (avtomatik, ko'p so'rov), mas'uliyat shuncha katta (server yuki, qonun). Texnik imkoniyat axloqiy ruxsat emas — "qila olish" faqat mumkinlik, "qilish kerak" — to'g'rilik (etika, qonun, boshqalarga ta'sir). Yaxshi muhandis: imkoniyatni emas, ta'sirni o'ylaydi (kimga, qanday). "Kuchli vosita — ehtiyotli qo'l" — scraping, avtomatlashtirish, har kuchli texnika.

1. Qila olish ≠ qilish kerak

Texnik imkoniyat (kod qila oladi) — mumkinlik. Axloqiy/qonuniy ruxsat — to'g'rilik. Ikkalasi har xil (imkoniyat ≠ ruxsat).

2. Scraping boshqalarga ta'sir

Ta'sir Kim
Server yuki Sayt (yiqilish)
Ma'lumot Ega (huquqlar)
ToS buzish Biznes
Shaxsiy ma'lumot Odamlar (maxfiylik)

Sizning emas — boshqaning resursi.

3. Kuch va mas'uliyat bog'liq

Kuch katta (avtomatik, ko'p so'rov) → mas'uliyat katta (yuk, qonun). Kuchli vosita — ehtiyotli qo'l.

4. Ta'sirni o'ylash

Yaxshi muhandis: imkoniyat emas, ta'sir (kimga, qanday zarar). "Bu boshqalarga qanday ta'sir qiladi?" — birinchi savol.

5. Muhandislik saboqlari

  1. Texnik imkoniyat ≠ axloqiy ruxsat
  2. Scraping boshqalarga ta'sir (server, huquq)
  3. Kuch va mas'uliyat bog'liq
  4. Ta'sirni o'yla (imkoniyat emas)

6. Xulosa

  1. Qila olish ≠ qilish kerak
  2. Scraping boshqaning resursiga ta'sir
  3. Kuch bilan mas'uliyat
  4. Ta'sirni o'yla (etik, qonuniy)

Nimani mustahkamlaydi: 2.1–2.8-bo'limlar.


Xulosa

Bu darsda scraping etikasi va cheklovlarini o'rgandik.

Eng muhim uch fikr:

  1. robots.txt va rate limiting. robots.txt — sayt ildizidagi fayl (example.com/robots.txt) — scraping qoidasi: User-agent (kimga), Disallow (man yo'llar), Allow (ruxsat), Crawl-delay (oraliq). Standart (hurmat kerak — urllib.robotparser bilan o'qi, scraping oldidan tekshir). Rate limiting — so'rov sur'atini cheklash (time.sleep(2) — oraliq): serverga yukni kamaytirish (ko'p tez so'rov — serverni yiqitadi, DDoS kabi → bloklanish). Sekin so'rov — hurmat va barqarorlik.

  2. Qonun va etika. Terms of Service (ToS) — sayt huquqiy hujjati (scraping ruxsat/man — robots.txt texnik, ToS huquqiy). Qonuniy jihatlar: mualliflik (kontent himoyalangan), shaxsiy ma'lumot (GDPR — Yevropa), kompyuter huquqbuzarligi (ruxsatsiz kirish). Qoida: ochiq ma'lumot (fakt, narx) odatda OK, himoyalangan/shaxsiy — ehtiyot. Etik tamoyillar: robots.txt hurmat, sekin so'rov, identifikatsiya (User-Agent — kim ekaningizni ochiq ayt, yashirinma), ruxsat etilgan ma'lumot. API afzal (rasmiy — barqaror, toza, etik; scraping oldidan "API bormi?").

  3. "Qila olaman" ≠ "qilishim kerak". Mas'uliyatli scraping — texnika + etika + qonun. Scraping ayniqsa mas'uliyatli, chunki boshqalarga ta'sir qiladi: server (yuk), ma'lumot (huquqlar), sayt egasi (ToS). Bu sizning emas, boshqaning resursi — hurmat kerak. "Kuch va mas'uliyat bog'liq" 26.2-bob: kuch katta (avtomatik, ko'p so'rov) → mas'uliyat katta. Texnik imkoniyat axloqiy ruxsat emas ("qila olish" — mumkinlik, "qilish kerak" — to'g'rilik). Yaxshi muhandis: imkoniyat emas, ta'sirni o'ylaydi (kimga, qanday). Mas'uliyatsiz scraping — bloklanish, huquqiy muammo, zarar; mas'uliyatli — barqaror, qonuniy, etik. "Kuchli vosita — ehtiyotli qo'l".

Keyingi darsda API integratsiyasi ni o'rganamiz: rasmiy API'lar bilan ishlash — autentifikatsiya (kalit), so'rov turlari, sahifalash, xatolarni boshqarish — scraping o'rniga rasmiy yo'l.

Ulashish:Telegram'da

Izohlar (0)

Izoh yozish uchun kiring.

  • Hozircha izoh yo'q. Birinchi bo'ling!
26.6-dars: Scraping etikasi va cheklovlar — IlmHamroh