Semalt سے ایک سبق: ازگر میں ویب سکریپنگ

میں نے حال ہی میں کیونو پوسک (آئی ایم ڈی بی کا روسی ورژن) ملاحظہ کیا ہے اور مجھے پتہ چلا ہے کہ سالوں میں میں نے 1000 سے زیادہ فلموں کی درجہ بندی کرنے میں کامیاب کیا ہے۔ میں نے سوچا کہ ان اعداد و شمار پر مزید تفصیل سے تحقیق کرنا دلچسپ ہوگا: کیا وقت گزرنے کے ساتھ ساتھ میرے فلمی ذوق تبدیل ہوگئے ہیں؟ سال کے کون سے سیزن میں میں زیادہ فلمیں دیکھتا ہوں؟

لیکن اس سے پہلے کہ ہم خوبصورت گرافکس کا تجزیہ کریں اور تعمیر کریں ، ہمیں ڈیٹا حاصل کرنے کی ضرورت ہے۔ بدقسمتی سے ، بہت سی خدمات کے پاس عوامی API نہیں ہے ، لہذا آپ کو اپنی آستین تیار کرنا ہوگی اور HTML صفحات کو پارس کرنا ہوگا۔

یہ مضمون ان لوگوں کے لئے ہے جو ہمیشہ ویب سکریپنگ کو استعمال کرنے کا طریقہ سیکھنا چاہتے تھے لیکن اس پر ہاتھ نہیں ملا یا پتہ نہیں کہاں سے آغاز کیا جائے۔

ٹاسک

ہمارا کام پہلے ہی دیکھا ہوا فلموں کے بارے میں ڈیٹا نکالنا ہے: مووی کا عنوان ، دیکھنے کی تاریخ اور وقت ، صارف کی درجہ بندی۔

در حقیقت ، ہمارا کام 2 مراحل میں کیا جا رہا ہے۔

مرحلہ 1: HTML صفحات کو ڈاؤن لوڈ اور محفوظ کریں

مرحلہ 2: مزید تجزیہ کے لئے موزوں شکل میں HTML کو پارس کریں (csv ، json ، pandas ڈیٹا فریم وغیرہ)

سازو سامان

HTTP- درخواستیں بھیجنے کے لئے بہت ساری ازگر لائبریریاں ہیں۔ سب سے مشہور اور انتہائی آسان ایک درخواستیں ہیں۔

HTML پارسنگ کے ل a لائبریری کا انتخاب بھی ضروری ہے۔

بیٹیفلسوپ ، ایل ایکس ایم ایل

یہ HTML دو کو پارس کرنے کے لئے سب سے زیادہ مشہور لائبریریاں ہیں اور ان میں سے کسی کا انتخاب صرف ایک ذاتی ترجیح ہے۔ مزید یہ کہ یہ لائبریریاں ایک دوسرے سے قریب سے جڑی ہوئی ہیں: بیوٹیفل سوپ نے lxML کو ایکسل میں داخلی تجزیہ کار کے طور پر استعمال کرنا شروع کیا ، اور lxML میں ، سوپ پارسر ماڈیول شامل کیا گیا۔ نقطہ نظر کا موازنہ کرنے کے ل I ، میں ماڈیول lxML.html میں بیوٹیفل سوپ کے ساتھ اور XPath سلیکٹرز کا استعمال کرکے ڈیٹا کی تجزیہ کروں گا۔

ڈیٹا ڈاؤن لوڈ ہو رہا ہے

آئیے ڈاؤن لوڈ کرنا شروع کریں۔ سب سے پہلے ، آئیے صرف یو آر ایل کے ذریعے صفحے کو حاصل کرنے کی کوشش کریں اور اسے مقامی فائل میں محفوظ کریں۔

ہم نتیجہ فائل کو کھولتے ہیں اور دیکھتے ہیں کہ یہ اتنی آسان نہیں ہے: سائٹ نے ہمیں روبوٹ سمجھا اور ڈیٹا نہیں دکھائے گا۔

آئیے معلوم کریں کہ سائٹ کس طرح کام کرتی ہے

براؤزر کو سائٹ سے معلومات حاصل کرنے میں کوئی حرج نہیں ہے۔ آئیے دیکھتے ہیں کہ یہ واقعی کیسے درخواست بھیجتی ہے۔ ایسا کرنے کے ل we ہم براؤزر میں "ڈویلپر ٹولز" میں "نیٹ ورک" پینل استعمال کرتے ہیں (میں اس کے لئے فائر بگ استعمال کرتا ہوں) ، عام طور پر ، جس درخواست کی ہمیں ضرورت ہے وہ سب سے طویل ہے۔

جیسا کہ ہم دیکھ سکتے ہیں ، براؤزر ہیڈرز یوزر ایجنٹ ، کوکی اور پیرامیٹرز کی ایک اور تعداد کو بھی بھیجتا ہے۔ پہلے ، ہم صرف ہیڈر کو درست یوزرجنٹ بھیجنے کی کوشش کریں گے۔

اس بار ہم کامیاب ہیں ، اور اب ہمیں ضروری اعداد و شمار دیئے گئے ہیں۔ یہ بات قابل غور ہے کہ بعض اوقات سائٹ کوکی کی صداقت کو بھی جانچتی ہے ، اس صورت میں درخواستوں کے لائبریری میں سیشن مددگار ثابت ہوں گے۔

تمام قیمتیں ڈاؤن لوڈ کریں

اب ہم شرحوں کے ساتھ ایک صفحے کو بچانے کے قابل ہیں۔ لیکن عام طور پر صارف کے پاس بہت سارے نرخ ہوتے ہیں ، اور تمام صفحات پر اس کی تکرار ضروری ہے۔ ہم سے دلچسپی رکھنے والا صفحہ نمبر براہ راست یو آر ایل میں منتقل کرنا آسان ہے۔

ایچ ٹی ایم ایل سے ڈیٹا اکٹھا کرنا

اب html سے ڈیٹا اکٹھا کرنے کے لئے براہ راست حاصل کرتے ہیں. براؤزر میں "عنصر کا معائنہ کریں" فنکشن کا استعمال کرکے HTML صفحے کی تشکیل کا طریقہ سمجھنے کا آسان ترین طریقہ ہے۔ اس معاملے میں ، ہر چیز بالکل آسان ہے: شرحوں کے ساتھ پوری میز ٹیگ میں ہے۔ اس نوڈ کو منتخب کریں:

بی ایس 4 سے امپورٹڈ بیوٹیشل سوپ

LXML درآمد HTML سے

# خوبصورت سوپ

سوپ = بیوٹیشل سوپ (متن)

فلم_ فہرست = سوپ.فائنڈ ('div'، ('کلاس': 'پروفائل فیلمز لسٹ'))

# lxML

درخت = html.fromstring (متن)

film_list_lxML = tree.xpath ('// div [class =' 'profileFilmList' ']') [0]

آئیے سیکھتے ہیں کہ فلم کا روسی عنوان کس طرح کھینچنا ہے اور فلم کے صفحے سے لنک (یہ بھی ہے کہ متن اور خصوصیت کی قدر کیسے حاصل کی جا.)۔

اگر آپ کو انگریزی میں ٹائٹل نکالنے کی ضرورت ہے تو صرف "nameRus" کو "nameEng" میں تبدیل کریں۔

نتائج

ہم نے ویب سائٹس کی تجزیہ کرنے کا طریقہ سیکھا ، لائبریریوں کی درخواستوں ، بیوٹیفل سوپ ، اور ایل ایکس ایم ایل سے واقفیت حاصل کی ، اسی طرح کینو پیسک پر پہلے ہی دیکھا ہوا فلموں کے مزید تجزیہ کے لئے موزوں ڈیٹا موصول ہوا۔