PDA

View Full Version : روبات سرچ در گوگل



eshpilen
یک شنبه 25 خرداد 1393, 09:18 صبح
میخوام یه روبات PHP بنویسم که در گوگل سرچ کنه و نتایج سرچ گوگل رو بخونه.
روشش چیه؟ اینکه جای مرورگر جا بزنه و مثل مرورگر و کاربر عادی سرچ کنه و نتایج رو خودش از سورس HTML استخراج کنه، یا اینکه گوگل API و این حرفایی داره واسه این کار که بهتره؟ بعد استفاده از این google api ثبت نام و این حرفا میخواد حتما؟ ضمنا توی سایت خودش نوشته بود که Deprecate شده و محدودیتش هم بیشتر شده!

omidabedi
یک شنبه 25 خرداد 1393, 09:49 صبح
ساخت رباط کراولر مشکلی که داره اینکه که بعد از تعداد بالای سرچ در مدت زمان مشخصی برای ادامه کپچا میاره

برای api هم محدودیت هایی هست
مثلا یه نمونه api هست که نتایج رو بصورت atom/json بهت میده اما محدودیت تعداد سرچ داره روزانه 100 تا و اینکه فقط توی سایت خودت میگرده و نمیتونی بصورت سرچ انجین استفاده کنی ازش

1 راه دیگه بنظرم اومد

بعضی سرچ انجین ها هستن که توی چندتا سرچ انجین دیگه نتایج رو میگیرن و بهت میده بعنوان رابط

میتونی از این ها استفاده کنی فکر کنم یکیشون search.com باشه

در کل نوشتن رباط بهتره برای کپچا هم میتونی به proxy وصل بشی و هربار کپچا خواست عوض کنی proxyتو
در ضمن باید سرورت اجازه بده که curl ریدایرکت هارو follow کنه که تو هاست های اشتراکی اونایی که من تست کردم بسته بود این قابلیتشون اما دیگه بستگی ب کارت داره دیگه میشه دورش زد

MMSHFE
یک شنبه 25 خرداد 1393, 11:14 صبح
ما یکبار میخواستیم سرچ گوگل رو بیاریم تو سایتمون. کلی دهنمون سرویس شد. با CURL میگرفتیم. بعد از مثلاً 20 صفحه یا 20 سرچ، کپچا میومد. پراکسی ست میکردیم بازم کپچا رو میاورد. آخرش با کلی دردسر و ست کردن پراکسی و تغییر ایجنت و ایجاد Delay و جعل IP و کلی کارهای دیگه، دوباره یه مدتی کار میکرد. آخرشم دیدیم پراکسی داریم کم میاریم، کلاً بیخیالش شدیم.

tux-world
یک شنبه 25 خرداد 1393, 14:24 عصر
به این میگن امنیت اطلاعات در گوگل. واقعا مخی هستن برای خودشون

eshpilen
دوشنبه 26 خرداد 1393, 08:05 صبح
اتفاقا فک نمیکنم زیاد هم چیز پیچیده ای باشه. فقط حوصله میخواد که تمام پارامترها رو پیدا و در یک الگوریتم با فرمول مناسب ترکیب کنی.
بعضی ترفندهای خاص هم ممکنه بکار برن. مثلا میشه سعی کرد به پورت 80 آیپی کلاینت وصل شد و دید که آیا یک وب سرور روش اجرا هست یا نه! به این شکل میشه حدس زد که درخواست از سمت یک سرور وب آمده. البته باز این خودش نکات داره و لزوما اینطور نیست که حتما کلاینت یک روبات بوده باشه (ببینید میتونید حدس بزنید که چرا!؟)، بنابراین باید به این پارامتر یک وزن خاص اختصاص داد در فرمول کلی تری، و صرفا بعنوان یک ضریب احتمالاتی ازش استفاده کرد.
کلا این روشها چون استاندارد نیست و احتمال false positive اش بالاست و نکات ظریف و چیزهای ندانسته/مبهم داره بنابراین توصیه نمیشه؛ اما گوگل خب خودش بهترین و مطلع ترین متخصصان و دسترسی به اطلاعات و آمار رو داره و بنابراین بهتر میتونه این چیزها رو تشخیص بده و مدیریت کنه. مثلا میتونه توی دیتابیس های خودش کلاینت مورد نظر رو سرچ کنه ببینه جزو موارد شناخته شده و خاصش هست یا نه.

cpuram
دوشنبه 26 خرداد 1393, 09:32 صبح
نمیشه کاری کرد که سرچ ها با آی پی کاربر انجام بشه و بعدش اطلاعات به سرور ارسال بشه؟

eshpilen
دوشنبه 26 خرداد 1393, 09:42 صبح
چرا فکر کنم میشه. ولی بهرصورت فکر نمیکنم به این شکل بشه تمام محدودیت ها رو دور زد.
بعدم کدوم کاربر؟ یعنی باید حتما کاربر توی سایت باشه که کار بکنه؟ لابد اونم چندتا!
البته کلا بنظرم با این ایده میشه یه کارهایی کرد. مثلا یه برنامه بذاری روی یک یا چندتا سیستم که همیشه یا بیشتر اوقات روشن و به اینترنت متصل هستن، و این برنامه برای سرور اصلی نقش پراکسی برای سرچ در گوگل رو ایفا بکنه.
ولی البته این دنگ و فنگ که خودش دشوار هست و بنظرم مشکلات و محدودیت های فنی خودش رو ایجاد میکنه، باید دید تا چه حد بازدهی داره و آیا اصلا نیاز هست یا نه. چون معلوم نیست که گوگل حتما از اون روشهایی که گفتم استفاده میکنه یا اینکه تا چه حد اون پارامترها رو بحساب میاره (ضریب تاثیرش در میان پارامترهای دیگر).
فکر نمیکنم به دردسرش بیارزه. روی سرور بالاخره امکانات بیشتر و قدرت و ثبات/اطمینان بیشتری در دسترس آدمه. اگر سرچ زیادی نداشته باشیم و به محدودیت جدی نخوریم، فکر کنم همون سرور بهتر باشه. برنامه ای هم که مد نظر بنده هست کوئری های زیادی در زمان کوتاه نداره.

MMSHFE
دوشنبه 26 خرداد 1393, 09:50 صبح
آخرش کاری که کردیم و جواب داد این بود که اطلاعات رو با AJAX بارگذاری میکردیم و دفعه اول که کلاینت به سایت وصل میشد، اطلاعاتش رو دریافت میکردیم و همونها رو با cURL برای گوگل میفرستادیم و جواب میگرفتیم و جواب رو میچیدیم توی قالب خودمون و به کلاینت نشون میدادیم. لینک صفحات رو هم نشون میدادیم و وقتی کاربر مثلاً روی صفحه 2 کلیک میکرد، همین روند تکرار میشد (صفحه 2 رو از گوگل درخواست میکردیم و نشونش میدادیم). البته این روش قطعاً نیازمند کلاینت هست و بنابراین اگه صرفاً یک سایت جستجو میخواین بسازین بدرد میخوره نه بعنوان یک روبوت چون خودکار نیست. ازطرفی اگه واقعاً میخواین یک موتور جستجو داشته باشین، میشه نتایج رو برای جستجوهای مختلف برای مدت مشخصی کش کنید یا توی دیتابیس خودتون بگذارین و تا وقتی اطلاعات جستجو توی کش هست از همونجا نشون بدین. اینطوری درخواستها به سمت گوگل کمتر میشه. اما اگه واقعاً قصد دارین یک Search Engine بسازین توصیه میکنم دنبال خلاقیت و نوآوری باشین چون با این روش هرچقدر هم جلو برین، ته تهش میشین یه گوگل دیگه (تازه اگه بتونین دیتاسنتری مثل مال گوگل راه بندازین).

eshpilen
دوشنبه 26 خرداد 1393, 10:07 صبح
راستش توی فکر بودم یه روبات بنویسم که بیاد و توی سایتهای ملت بعضی آسیب پذیریهای ناشیانه رو پیدا و تست کنه و اونایی که آسیب پذیر هستن رو ثبت کنه.
حالا هدفش چیه! هویجوری محض خلاقیت و تفریح :چشمک:
حس کردم یخورده هم توی این کارا وارد بشم خوبه. حالا فعلا که کار جدی تر و پروژهء خاصی نداریم از هیچی بهتره حداقل :متفکر:
من از این کارهای خلاق و متنوع و خاص که خیلی هم بزرگ و جدی و تجاری نیستن خوشم میاد راه دست و خوراک افراد خوره همه فن حریف هیچ کاره بی کار و بی عاری مثل من هستن :لبخند:

البته من بی کار و بی عارش رو شوخی کردم (مگر بگی توی خود فیلد برنامه نویسی). همین الانم دوجا کار میکنم و وقت آزادم کمه. بخاطر همین بیشتر میتونم روی پروژه های شخصی کوچک که به مرور و بصورت غیرجدی بشه انجامشون داد کار کنم تا چیز دیگه. یه چیزی که خورده خورده به مرور سرهم کنم.
بنظرم اینطور پروژه ها چیز خوبیه واسه تمرین و گسترش دایره اطلاعات و مهارت های آدم. چیزهایی که آدم یاد میگیره و حتی کدهایی که مینویسه فکر میکنم در بعضی پروژه های دیگر هم ممکنه کاربرد پیدا کنن.

MMSHFE
دوشنبه 26 خرداد 1393, 10:24 صبح
بنظر من اگه یکم کاربردی ترش کنین بهتره. مثلاً بجای روبات گوگل، بیاین یک سایت بسازین که آدرس سایت رو بگیره و حفره های امنیتی رایج رو پیدا و گزارش کنه. یه چیزی مثل Acunetix ولی بصورت آنلاین. خلاصه Crawler و... رو بهش اضافه کنید ولی آدرس صفحه اصلی سایت رو از خود فرد بگیره. در آینده میتونید تجاریش هم بکنید. چیزی که الان خیلی نیازه، اسکنر آنلاین امنیت سایته. یکی دو مورد بیشتر نداریم که اونم پولیه. نمیگم اینو رایگان انجام بدین ولی وقتی به ریال باشه، مردم کشور ما هم میتونن پول بدن (توی سایتهای خارجی نمیشه).

eshpilen
دوشنبه 26 خرداد 1393, 11:56 صبح
خب همین دیگه وقت ندارم ضمنا کار اولمه نمیخوام بزرگ و پیچیدش کنم.
فعلا فقط یک نوع آسیب پذیری خاص و ساده رو مد نظر داشتم.
اول باید با کوچیک و ساده شروع کرد یاد گرفت تجربه بدست آورد بعد گسترش داد و سراغ کارهای بزرگتر رفت. نه؟
تازه منکه وقت ندارم!
بعد تازه اسکنرهای خوب کرک شده مثل Acunetix که هستن این کار چه ضرورتی داره؟

eshpilen
دوشنبه 26 خرداد 1393, 12:32 عصر
میدونی مهندس، من اصلا علاقه ای به نوشتن برنامه های موجود که در دسترس عمومی هست ندارم.
مثلا CMS، یا همین اسکنر امنیتی که گفتید. اینا برنامه هاش هست؛ برنامه های واقعا باکیفیت و پیشرفته ای هم هست. بخصوص اونایی که بازمتن و رایگان باشه. البته Acunetix رایگان و بازمتن نیست، ولی همون کرک شدش فعلا هست و کافیه بنظرم! من بنویسم یا ننویسم چندان فرقی حداقل واسه خودم نمیکنه.
البته نه اینکه بگم مثلا نوشتن CMS به درد هیچ کس نمیخوره. نه، مثلا خودتون بارها برای تمرین و پیشرفت برنامه نویسی توصیه کردید که یک CMS شخصی بنویسن. من اینو قبول دارم این به درد میخوره منتها واسه افرادی مثل خودتون که شغل و درآمد آیندشون میخواد از همین راه برنامه نویسی تجاری و کارهای موجود در بازار که سایت و تشکیلات و پروژه های وابسته و مشابهش هست باشه. هم یادگیریش نیازه و به درد میخوره و هم از کدهاش و حتی برنامه هاش میشه آینده در کارهای تجاری خودمون استفاده کنیم.
ولی منکه شغل و منبع درآمدم و هدف اینطور برنامه نویسی تجاری نبود تاحالا، و هنوزم تقریبا نیست، دوست دارم روی برنامه های موارد خاص و اونایی که معادل در دسترس عمومی ندارن کار کنم. یه چیزی مینویسم میخواد حداکثر کاربردی برای شرایط و نیازها و اهداف فعلی خودم باشه، حالا یه گوشهء چشمی به آینده و موارد تجاری هم شاید داشته باشم، و چیز جدیدی باشه و متنوع و خلاق و محتوی یادگیری مقولات خاص و متنوع که بتونم ازش برای نیازها و پروژه هایی بازم با همین خصوصیات استفاده کنم.
مثلا سیستم رجیستر و لاگین نوشتم، خب واقعا در این زمینه حداقل برای خودم کمبود دیدم. نبود، هنوزشم یه چیزی کامل و منعطف و حرفه ای و امنیتی از هر جهت نیست، یعنی من ندیدم، سرچ کردم، مثلا توی همون github، یه چند مورد بود ولی اصلا در اون حد کامل و حرفه ای که مد نظر من بود نبودن هیچکدام. در عین حال پروژم طوری نیست که دیگران بتونن براحتی ازش استفاده کنن، چون این هدف و اولویت اول برام نبود و بیشتر برای محک زدن توانایی، تمرین و یادگیری، و در عین حال کاربردهای آینده واسه خودم نوشتم.
یا مثلا این کار کوچک اخیر، vcard editor، هم باز کم و بیش چنین خصوصیاتی رو داشت و واسه کار و نیاز موردی خودم هم نوشتم.
الان این روبوته هم پروژهء نسبتا جذاب و خاصی هست درنظرم که نمونش در دسترس عموم نیست. حالا البته فعلا چیز خاصی هم نیست و فقط تست و برنامه ساده و کوچک اولیه ای میخواد باشه برای ورود به اینطور حیطه ها.
بعدها شاید در این زمینه کارهای خفن تری کردم. البته اگر وقت کردم!
فعلا که وقت هم ندارم، باید موارد کم حجم/کوچک ولی خاص و خلاق و متنوع رو انتخاب کنم. یه چیزایی طبیعتا غیررسمی و غیرتجاری.

MMSHFE
دوشنبه 26 خرداد 1393, 15:44 عصر
بهرصورت درمورد این پروژه میتونید از سایتهایی که فهرست پراکسی رایگان منتشر میکنن استفاده کنید. حتی بعضیهاشون با صرف اندکی هزینه (20 دلار در سال) هر روز چندین هزار پراکسی تست شده براتون ایمیل میکنن که میتونید با IMAP توی اسکریپتتون بخونید و به دیتابیس پراکسیهاتون اضافه کنید.

koorosh4
سه شنبه 27 خرداد 1393, 13:53 عصر
راستش توی فکر بودم یه روبات بنویسم که بیاد و توی سایتهای ملت بعضی آسیب پذیریهای ناشیانه رو پیدا و تست کنه و اونایی که آسیب پذیر هستن رو ثبت کنه.
حالا هدفش چیه! هویجوری محض خلاقیت و تفریح :چشمک:
حس کردم یخورده هم توی این کارا وارد بشم خوبه. حالا فعلا که کار جدی تر و پروژهء خاصی نداریم از هیچی بهتره حداقل :متفکر:
من از این کارهای خلاق و متنوع و خاص که خیلی هم بزرگ و جدی و تجاری نیستن خوشم میاد راه دست و خوراک افراد خوره همه فن حریف هیچ کاره بی کار و بی عاری مثل من هستن :لبخند:

البته من بی کار و بی عارش رو شوخی کردم (مگر بگی توی خود فیلد برنامه نویسی). همین الانم دوجا کار میکنم و وقت آزادم کمه. بخاطر همین بیشتر میتونم روی پروژه های شخصی کوچک که به مرور و بصورت غیرجدی بشه انجامشون داد کار کنم تا چیز دیگه. یه چیزی که خورده خورده به مرور سرهم کنم.
بنظرم اینطور پروژه ها چیز خوبیه واسه تمرین و گسترش دایره اطلاعات و مهارت های آدم. چیزهایی که آدم یاد میگیره و حتی کدهایی که مینویسه فکر میکنم در بعضی پروژه های دیگر هم ممکنه کاربرد پیدا کنن.

یه پروژه میدم بهت برو دنبالش که خلاقیتت وقتی شکوفاشد و تونستی حلش کنی دست کم ازش سود هم ببری .
برو دنبال خوندن کپچا و دور زدنش . اگه تونستی صفحه ای بنویسی که بره توی گوگل برات ثبتنام کنه و یه اکانت بسازه اون موقع robo adds را نوشتی . ربوتی که بتونه برات ثبتنام کنه و اکانتت را کنترل کنه . البته اگه بنویسی فقط در گوگل کاربرد نداره بلکه اونی که بتونه گوگل را دور بزنه بقیه سایتها را هم میتونه بپیچونه . از ذهنتون استفاده بهینه کنید .