Mundarija (22)
- 1. Kirish va motivatsiya
- 2. Nazariya — chuqur tushuntirish
- 2.1. robots.txt (sayt qoidasi)
- 2.2. Rate limiting (sur'at cheklash)
- 2.3. Terms of Service
- 2.4. Qonuniy jihatlar
- 2.5. Etik tamoyillar
- 2.6. API afzalligi
- 2.7. Identifikatsiya (User-Agent)
- 2.8. Mas'uliyatli scraping
- 3. Tez ma'lumotnoma
- 4. Batafsil misollar
- Misol 1 — robots.txt tekshirish
- Misol 2 — Rate limiting
- Misol 3 — Etik tekshiruv ro'yxati
- Misol 4 — Amaliy: mas'uliyatli scraper
- 5. To'g'ri va noto'g'ri tushunishlar
- 6. Keng tarqalgan xatolar va yechimlari
- 7. Integratsiya — bu bilim qayerda kerak bo'ladi
- 8. Eng yaxshi amaliyotlar
- 9. Amaliy topshiriq
- Xulosa
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:
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 ishlatishEtik 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:
# 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'lAPI 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:
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
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 = barqaror4. Batafsil misollar
Misollarda
urllib.robotparser(robots.txt) va rate limiting naqshi bilan sinaladi — deterministik.
Misol 1 — robots.txt tekshirish
"""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:
=== 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
"""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:
=== 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
"""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:
=== 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.
"""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:
=== 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-AgentNima 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
requests.get(sayt) # robots man qilgan bo'lsa? # ⚠️
rp.can_fetch("*", url) # avval tekshir # ✅2. Rate limiting yo'q (server yuk)
for u in urls: scrape(u) # tez, ko'p # ⚠️
for u in urls: scrape(u); time.sleep(2) # ✅3. Soxta User-Agent (yashirish)
{"User-Agent": "Mozilla/5.0..."} # soxta brauzer # ⚠️
{"User-Agent": "MyBot/1.0 (email)"} # ochiq # ✅4. Shaxsiy ma'lumot scraping
# ismlar, email yig'ish # ⚠️ (GDPR)
# ochiq, ruxsat etilgan ma'lumot # ✅5. ToS o'qimaslik
# darrov scraping # ⚠️
# ToS: scraping ruxsatmi? # ✅6. API borligini tekshirmaslik
# HTML scraping # ⚠️ (API bor?)
# API bormi? (rasmiy — afzal) # ✅7. Bloklashdan qochish (proxy, soxta)
# 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
robots.txt tekshir (ruxsatmi?).
Rate limiting (sekin — server yuki).
ToS o'qi (huquqiy).
Ochiq ma'lumot (shaxsiy/himoyalangan emas).
User-Agent ochiq (halol, aloqa).
API afzal (rasmiy — bor bo'lsa).
"Qila olaman" ≠ "qilishim kerak".
Shubhada — huquqshunos.
9. Amaliy topshiriq
Vazifa 1: Bashorat qiling
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
- Sayt scraping qoidasi
- Man qilingan yo'llar
- So'rovlar oraligi
- So'rov sur'atini cheklash
- Serverga yukni kamaytirish
- Foydalanish shartlari (huquqiy)
- robots texnik, ToS huquqiy
- Mualliflik, shaxsiy, ToS
- Shaxsiy ma'lumot himoya (Yevropa)
- Ochiq (kim, aloqa) — yashirin emas
- Rasmiy, barqaror, etik
- Imkoniyat ≠ axloqiy ruxsat
Vazifa 2: Xatolarni tuzating
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 # ToSJavoblar
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:
RobotFileParsercan_fetch- Disallow
- Crawl-delay
Vazifa 4: Rate limiting
Sekin:
time.sleep- Oraliq
- Server yuki
- Barqarorlik
Vazifa 5: Etik tekshiruv
Ro'yxat:
- robots
- ToS
- API
- Ochiq ma'lumot
Vazifa 6: Mas'uliyatli
Scraper:
- robots
- rate limit
- User-Agent
- 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
- Texnik imkoniyat ≠ axloqiy ruxsat
- Scraping boshqalarga ta'sir (server, huquq)
- Kuch va mas'uliyat bog'liq
- Ta'sirni o'yla (imkoniyat emas)
6. Xulosa
- Qila olish ≠ qilish kerak
- Scraping boshqaning resursiga ta'sir
- Kuch bilan mas'uliyat
- 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:
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.robotparserbilan 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.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?").
"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.
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!