PDA

View Full Version : دسترسی به نتیج جستجو گوگل در داخل webbrowser



Sal_64
سه شنبه 02 خرداد 1391, 13:16 عصر
سلام
من روی فرمم یدونه webbrowser دارم که داخل سایت گوگل سرچ میکنم
حالا میخوام نتایج جستجو (مثل لینک سایت ها ) داخل یدونه ریچ تکست باکس نمایش بدم
چجوری باید اینکار بکنم

ممنونم

Saeed_m_Farid
سه شنبه 02 خرداد 1391, 15:08 عصر
چجوری باید اینکار بکنم
نمیشه :لبخند:
اگه میشد که گوگل باید در سایتش رو تخته میکرد! Google برای اینکار API میده و بابتش هم پول میگیره؛
اگه قرار بود لینک ها رو همینطوری بدست آورد که همه یه Webrequest می فرستادن و Response رو Parse میکردن و میشدن گوگل! میخوای یکبار امتحان کن، webbrowser.DocumentText رو بگیر و مثلاً دنبال href="http بگرد، غیر از مقدار متنابهی مزخرفات چیزی عایدت نمیشه ...
راستش اینکار مثل دزدی از شاه دزد هست :چشمک:

پ.ن:


البته نشد که نداره، اگه خیلی اصرار داشته باشی باید یه خزنده (Crawler, bot, ...) بنویسی که بره یکی یکی تمام لینک هارو باز کنه و referrer شون رو دربیاره و ... اونم بگیر نگیر داره ...
ضمناً می تونی (اگه درست Parse -تجزیه نه اونیکی پارس!- کنی) با InnerText فقط اون اسم لینک ها رو دربیاری (اونم تا زمانی که گوگل فرمت صفحه المنت هاش رو عوض نکنه).

Sal_64
چهارشنبه 03 خرداد 1391, 08:30 صبح
میگم چرا داخل پیچ سورسش هیچی نبود :لبخند:

قیمت و نحوه تهیه اون API هم میدونید؟

کسی میشناسید که بتونه برام خزنده بنویسه ؟ صلواتی و یا با گرفتن حق الزحمه :لبخند:

باقی موتورهای جستجو معروف هم همینقد کنسن ؟؟

تشکر

macsharp
چهارشنبه 03 خرداد 1391, 13:38 عصر
یه راه هست من امتحان کردم جواب داده
نتیجه جستجو رو به عنوان متن ذخیره کن و روی متنش یه اچ تی ام پارسر بنویس که تگ های لینک رو جدا کنه

موفق باشی

Sal_64
چهارشنبه 03 خرداد 1391, 18:00 عصر
یه راه هست من امتحان کردم جواب داده
geko
نتیجه جستجو رو به عنوان متن ذخیره کن و روی متنش یه اچ تی ام پارسر بنویس که تگ های لینک رو جدا کنه

موفق باشی

تشکر

با استفاده از WebRequest متن ذخیره کردم
اما داخلش چیز خاصی نتونستم ببینم:ناراحت:

Saeed_m_Farid
چهارشنبه 03 خرداد 1391, 20:13 عصر
میگم چرا داخل پیچ سورسش هیچی نبود :لبخند:
قیمت و نحوه تهیه اون API هم میدونید؟
کسی میشناسید که بتونه برام خزنده بنویسه ؟ صلواتی و یا با گرفتن حق الزحمه :لبخند:
باقی موتورهای جستجو معروف هم همینقد کنسن ؟؟



چون شما خوب داخلش رو ندیدین، خیلی هاش encode شدن ...
تو ایران نمیشه، چون دوطرفه تحریم هستیم.
من که نمردم! فقط دعا کنید یکم عقل بیاد تو کلّم ...
تازه این یکی از خوب خوباشونه

*************************
فقط همونطوریکه قبلاً هم گفتم، لینک هایی که میگیرین پر از چرت و چرت هستن و دیگه مرتب کردن و split رشته ها با خود شما، هر کدوم رو دوست داشتین می تونید از جایی که با http شروع میشه ببرید و ...
این برنامه فقط برای آشنایی شما با خرندگان و دوزیستان نوشته شده :لبخند:

یه موضوع دیگه هم مطابق Readme داخل پوشه برنامه:
سلب مسئولیت : تاکید می کنم این برنامه "As is" هست و من از تمام سوء استفاده های احتمالی، لینک هایی که درنتیجه جستجو حاصل میشن و محتویات اونها، توسعه بعدی برنامه در جهت خرابکاری و موارد مشابه، بدین وسیله سلب مسئولیت می کنم (بعلت عدم امکان اطلاع از اونها)؛ مطمئناً این قضیه ارجاعات داخلی تر لینک ها و تبلیغات و ... هم شامل میشه، چون ممکنه سطح جستجوی برنامه از یک سطح بالاتر بره ...

Sal_64
چهارشنبه 10 خرداد 1391, 09:53 صبح
سلام مهندس جان

هر چند اولین بار بود که با html درگیر میشدم ولی با کمک کد نویسی شسته رفته شما تقریبا کدها متوجه شدم

میشه درباره این لیست و چرایی تعریفش به این شکل یه کوچولو منو روشن کنی

new List<string> { "cite", "a" });

Saeed_m_Farid
چهارشنبه 10 خرداد 1391, 12:20 عصر
... میشه درباره این لیست و چرایی تعریفش به این شکل یه کوچولو منو روشن کنی

new List<string> { "cite", "a" });


سلام

تابع GetGoogleResultHtmlSource رو که متوجه شدین چکار میکنه؟ نتیجه Html جستجوی گوگل رو برای متنی که بهش دادین بصورت یه رشته بر میگردونه!
حالا ما باید تو این متن دنبال لینک بگردیم و همونطورکه گفتم گوگل لینک ها رو همینطوری "شسته رفته" مثل من تحویل نمیده، هزار تا بامبول درمیاره که شما نتونین پیداشون کنید، ولی بالاخره مجبوره لینک بده به کاربران، حالا اگه نتیجه تابع GetGoogleResultHtmlSource رو بگیرین و تو یه ویرایشگر دنبال ":http" بگردین تگ والدش، اون چیزی هست که ما دنبالش هستیم و برای زمانی که من کد رو مینوشتم این تگ یا a بود یا cite؛ ولی به احتمال زیاد ممکنه عوض بشه و شما باید در یک برنامه واقعی یه فایل کانفیگ یا xml (یا هرچی!) کنار برنامه تون داشته باشید که این تگ ها توش لیست شده باشن و اونها رو به تابع GetSpecifiedHtmlElements پاس بدین که دنبالشون بگرده.

بازم مطابق مطالب ذکرشده تو پست های قبلی، این برنامه فقط نسخه آزمایشی و برای آشنایی شما هست و شما توابع رو نسبت به نیاز خودتون باید بسط بدین، برای نمونه Dictionary ای که تابع جستجوی اِلمان های Html یعنی "GetSpecifiedHtmlElements" به شما میده، یه کالکشن خام هست و باید نتایجش نسبت به نیاز شما پارس و فیلتر بشن که به بحث این تاپیک ربطی نداره و فکرم نمی کنم برای شما کار سختی باشه، اونایی که Tag Name شون مشخصه مال گوگل هستن (ضمیمه رو ببینید▼) رو Remove می کنید و بقیه که موندن و در متغیر parsed ذخیره شدن، Value شون رو میدین به یه تابع دیگه که لینک رو ازش دربیاره و ...
==========
موفق باشید

Sal_64
سه شنبه 30 خرداد 1391, 09:48 صبح
سلام مهندس جان
آقا بازم ی سوال
میشه بگید دلیل نوشتنش این کد به این صورت چیه "//" + tag


foreach (HtmlNode node in htmlDoc.DocumentNode.SelectNodes("//" + tag))

و دوم اینکه میشه به وسیله این dll عمل مقدار دهی و post انجام داد ، اگه میشه چجوری :لبخند:



تشکر :بوس:
ایام به کام

Saeed_m_Farid
سه شنبه 30 خرداد 1391, 10:23 صبح
سلام
سوال اول: دلیلش رو تو مثال خود (http://htmlagilitypack.codeplex.com/wikipage?title=Examples) پروژه ببینید.
سوال دوم: اولاً که Html Agility Pack (http://htmlagilitypack.codeplex.com/) یه Dll نیست! یه پروژه متن باز خیلی معروفه که شما به سورسش هم دسترسی دارید و می تونید هزاران مثال تو هر سطحی واسش پیدا کنید ...
ضمناً اینجا کامل نحوه GET/POST رو توضیح دادم : اجرای Html در C#‎‎‎‎‎‎‎ (http://barnamenevis.org/showthread.php?342548)