ورود

View Full Version : ساخت یک خزنده برای وب سایت ها



haitman
دوشنبه 22 فروردین 1390, 11:17 صبح
دوستان عزیز کسی نمونه کدی یا ماژولی رو برای ایجاد یگ خزنده با زبان پایتون داره؟؟؟؟؟؟؟؟؟؟؟؟؟

code_baz
دوشنبه 22 فروردین 1390, 17:55 عصر
http://code.activestate.com/recipes/577608-url_spider/
اول یک آدرس بهش میدی برنامه اون پیج رو دریافت میکنه و لینکهای اون صفحه رو میریزه توی دیتا بیس سپس یکی از اون آدرس ها رو دوباره لود میکنه
برنامه همینطور ادامه پیدا میکنه تا به اون سقفی که ابتدا براش تعربف میکنی برسه(limit متغیر)
امیدوارم بدردت بخوره اگه سوال داشتی من در خدمتم

code_baz
دوشنبه 22 فروردین 1390, 17:59 عصر
یه قسمتی هست که با استقاده از regex آدرس هایی که مربوط به w3.org میشه رو رد میکنه دلیل اونم اینه که در هنگام تست برنامه
هر وقت به چنین آدرسی برمیخورد برنامه به طور خودکار ازم username & pass میخواست که مربوط میشه به ساختار ماژول urllib و خود این سایت که من فقط ردش کردم چیزه دیگه ای به فکرم نرسید

franchesco
دوشنبه 22 فروردین 1390, 20:51 عصر
http://scrapy.org/

haitman
سه شنبه 23 فروردین 1390, 08:06 صبح
سلام دوست عزیز ممنون از جواب تون
راستش من مشکلی با این برنامه ندارم یعنی قبلا خودم نوشتن همین که شما گذاشتید رو البته با کمی فرق واسه کار دیگه
اما مشکل من الان اینجاست که من مقدار های خاصی از یک سایت رو میخوام برای مثال سایتی مثل سافت پدیا که واسه دانلود نرم افزار
این برنامه باید بتون اطلاعات هر برنامه رو دریافت کن حالا اینم حل اما مشکل اینجاست که همه سایت ها مثل هم نیست که هر کدوم یه جور کد نویسی شده پس هر کدوم یک قالب htmlخاص خواهند داشت

توضیح کوچیک بدم:
مثلا سایت گوگل میاد کل صفحات رو لود میکن و شروع میکنه بر اساس الگوریتمی که داره مثلا تگ های <strong>
رو بیشتر روست داره منظور اینکه فقط ایندکس میکن کاری نداره کجاش باشه چی باشه

اما من چند مورد خاص رو توی این صفحات نیاز دارم که برنامه بتون پیدا کن و لیست کن

code_baz
سه شنبه 23 فروردین 1390, 18:11 عصر
اگه دقیقا بگی چه چیزهایی رو میخوای روشون کار کنی بهتر میشه
فکر میکنم شما باید از ماژول sgmllib استفاده کنی
در خودآموز http://diveintopython.org/ که احتمالا میدونی در بخش html processing توضیحی خوبی درباره html parsing با sgmllib داده .
البته اگر میحوای با xml کار کنی که موضوع فرق میکنه.
به جزییات بیشتر اشاره کنی ما هم روشن می شیم

haitman
چهارشنبه 24 فروردین 1390, 07:57 صبح
اگه دقیقا بگی چه چیزهایی رو میخوای روشون کار کنی بهتر میشه
فکر میکنم شما باید از ماژول sgmllib استفاده کنی
در خودآموز http://diveintopython.org/ که احتمالا میدونی در بخش html processing توضیحی خوبی درباره html parsing با sgmllib داده .
البته اگر میحوای با xml کار کنی که موضوع فرق میکنه.
به جزییات بیشتر اشاره کنی ما هم روشن می شیم


دوست عزیز ممنون از اینکه کمک میکنید

راستش من باید یک سری اطلاعات از سایت های مختلف جمع کنم

در حال جاضر لیستی از نرم افزار های اپن سورس و اینکه از چه لایسنسی استفاده میکنند

خوب اگر بخوام خودم برنامه رو بنویسم بصورت آنالیز html مشکلی نیست حل مشکلم این که سایت های متعددی رو باید اسکن کنم پس برنامه باید جامع و قوی باشه

code_baz
جمعه 26 فروردین 1390, 13:22 عصر
شما میتونی از beautifulsoup استفاده کنی البته برنامه رو خودت باید بنویسی که فکر میکنم قصدت این نباشه ولی این ماژول کارت رو خیلی سریعتر راه میندازه
من فکر میکنم چیزی که شما روش مشکل داری در مبحث html parsing جای میگیره و اگر تو این زمینه سرچ کنی به نتیجه میرسی.
در زمینه sgmllib هم:
البته شاید اسرار من بی مورد به نظر بیاد ولی اگر دانش html خوبی داشته باشی نوشتن برنامه پارسر با sgmllib خیلی طولانی و سخت نیست
کافیه از از این ماژول ارث ببری و برای هر تگی که میخوای بک تابع به نام start_tag یا do_tag مثلا start_a بسازی و عملیاتی که میخوای مثلا ریختن محتویات اون تگ توی یک فایله رو توش تعریف کنی
بقیه کار با توابع ماژول هست
در مودرد جامع بودن برنامه و متفاوت بودن هر سایت هم فکر میکنم این مثلا رو میتونی با همین روش حل کنی

haitman
شنبه 27 فروردین 1390, 09:18 صبح
شما میتونی از beautifulsoup استفاده کنی البته برنامه رو خودت باید بنویسی که فکر میکنم قصدت این نباشه ولی این ماژول کارت رو خیلی سریعتر راه میندازه
من فکر میکنم چیزی که شما روش مشکل داری در مبحث html parsing جای میگیره و اگر تو این زمینه سرچ کنی به نتیجه میرسی.
در زمینه sgmllib هم:
البته شاید اسرار من بی مورد به نظر بیاد ولی اگر دانش html خوبی داشته باشی نوشتن برنامه پارسر با sgmllib خیلی طولانی و سخت نیست
کافیه از از این ماژول ارث ببری و برای هر تگی که میخوای بک تابع به نام start_tag یا do_tag مثلا start_a بسازی و عملیاتی که میخوای مثلا ریختن محتویات اون تگ توی یک فایله رو توش تعریف کنی
بقیه کار با توابع ماژول هست
در مودرد جامع بودن برنامه و متفاوت بودن هر سایت هم فکر میکنم این مثلا رو میتونی با همین روش حل کنی



دوست عزیز ممنون از کمک شما
فقط یک مشکل دیگه هم هست اونم این که این اطلاعات تقریبا باید هر 24 ساعت یک بار بروز بشن
مثلا یک برنامه در یک سایت منتشر شده باید هر 24 ساعت یک بار چک بشه که اگه تغییری کرده باشه دوباره ما ایندکس کنیمش
پس اطلاعات فقط یک بار ایندکس نمیشه

code_baz
شنبه 27 فروردین 1390, 12:00 عصر
http://snippets.dzone.com/posts/show/9843
این لینک میتونه کمکت منه
درباره ی update برنامه هم بستگی به ساختار خود برنامه داره:
به نظر من باید برای هر سایت در دیتا بیس یک فیلد time ساخت که مشخص کننده زمان بازرسی اونه .

مثلا اول برنامه رو اجرا میکنیم بعد از 40 دقیقه همه سایتها بازرسی شدند بعد از این وظیفه برنامه بازرسی update های هر قسمته به این شکل که برنامه با استفاره از ماژول (time ) (مثلا) سی دقیه به حالت (sleep) میره و بعد از سی دقیقه برنامه شروع میکنه به صورت تصادفی همه آدرس ها رو از دیتا بیس بیرون آوردن و زمان بازرسی اون رو با زمان فعلی مقایسه میکنه اگر 24 ساعت از زمان بازرسی گذشته باشه اون رو پردازش میکنه و دوباره رمان و اطلاعات اون آدرس رو update میکنه.بعد از این دوباره برای سی دقیقه
به حالت اسلیپ میره.

امیدوارم متوجه منظورت شده باشم!
البته sleep هم برای اینه که برنامه بیخودی کار اضافی نکنه.
با این رویه برنامه میتونه هر زمان که براش تعیین میکنیم update بشه .

haitman
شنبه 27 فروردین 1390, 12:15 عصر
دوست عزیز منظورم این نبود
در هر صورت ممنون برم دنبالش مشکلی بود مزاحم میشم
بازم ممنون از لطفتون

code_baz
شنبه 27 فروردین 1390, 12:18 عصر
تصحیح پست قبلی :
با استفاده از الگوریتم بالا دیگه نیازی به چک کردن هر فیلد برای 24 ساعت نیست
میتونیم با استغاده از time.sleep برنامه رو برای 24 ساعت به خواب ببریم و و بعد از 24 ساعت دوباره پردازش های قبلی مون رو تکرار کنیم !:اشتباه: