PDA

View Full Version : گرفتن اطلاعات از گوگل



samiasoft
چهارشنبه 10 خرداد 1396, 21:10 عصر
سلام دوستان

- چگونه میشود یک متنی را در گوگل جستجو کنیم و نتایج رو داخل تکست باکس نمایش بدیم؟

- چگونه میتوان تصویری را در گوگل جستجو کنیم و نتیجه تصویر جستجو شده را داخل پیکچر باکس بدست بیاوریم؟ یا لینک عکس را بدست بیاوریم؟


آیا حتما بایستی از کتابخانه های Google.Apis استفاده کنم ؟ راه دیگری نداره؟ برای این کتابخانه ها مثالی دارید؟

Google.Apis.Core.dll
Google.Apis.dll
Google.Apis.PlatformServices.dll

nunegandom
جمعه 12 خرداد 1396, 20:29 عصر
با سلام
درخواستی که میزنید سمت گوگل با کلاس webbrowser یا هرچی که دوست داشتید باید همچین چیزی باشه برای قسمت متنی:


https://www.google.com/search?q=<SearchForWhat>
و بعد از اینکه صفحه complete شد بخونیدش...

قسمت جست و جوی عکسی دوتا ره حل داره:
۱- یه جا آپلود بشه و آدرسش راحت ارسال داخل input مورد نظر قرار بگیره
۲- ببینید که آپلود عکس مقصدش کجاست (اینو فکر کنم با Tamper Data ی فایر فاکس میشه فهمید) و ارسالش کنید (که اینو نمیدونم دقیقا چجوریه داستانش)

قسمت خوندنش نسبت به ارسالش خیلی کاری نداره :لبخند:

که میفرسته به https://www.google.com/searchbyimage/upload
که البته ظاهرا خیلی چیزا ارسال میکنه

samiasoft
یک شنبه 14 خرداد 1396, 22:16 عصر
ممنون از راهنمایی شما

ولی من نتونستم کدشو بنویسم.

var url = "https://www.google.com/search?q=" + HttpUtility.UrlEncode("sami")); using (var webClient = new WebClient())
{
textBox1.Text = webClient.DownloadString(url);
}




این تکه کد رو پیدا کردم ولی داخل تکست باکس مواردی که میخوام بعد جستجو نمایش میده رو بدست بیارم.

samiasoft
دوشنبه 15 خرداد 1396, 02:49 صبح
دوستان من این راه رو هم برای سرچ در گوگل رفتم ولی متاسفانه اونجایی که باید api کلید بسازیم بعد ساخت کلید در برنامم خطا میده که این فعال نشده برای فعالسازیش هم انگار بایستی در حسابی که ساختم پول واریز کنم چرا که مشخصات ازم میخواد !

const string apiKey = "AIzaSyCbMKpyLqUH_6Nu9XwRA9r1DY7_sluR5c0"; const string searchEngineId = "006468701770972545753:csfoslx7wwy";
const string query = "دنیای نرم افزار";
var customSearchService = new CustomsearchService(new BaseClientService.Initializer { ApiKey = apiKey });
var listRequest = customSearchService.Cse.List(query);
listRequest.Cx = searchEngineId;


textBox1.Text += "Start..." ;
IList<Result> paging = new List<Result>();
var count = 0;
while (paging != null)
{

listRequest.Start = count * 10 + 1;
paging = listRequest.Execute().Items;
if (paging != null)
foreach (var item in paging)
textBox1.Text += "Title : " + item.Title + Environment.NewLine + "Link : " + item.Link +
Environment.NewLine + Environment.NewLine ;
count++;
}

توضیحات در لینک زیر :
http://hintdesk.com/c-how-to-use-google-custom-search-api/

حال به نظرتون چیکار کنم؟
یه راه ساده برای دریافت نتایج جستجو در گوگل وجود نداره؟اگر با دستورات پست قبلی بشه اینکارو انجام داد این راه api کلید رو استفاده نکنیم.

nunegandom
دوشنبه 15 خرداد 1396, 15:30 عصر
سلام مجدد


private void button1_Click(object sender, EventArgs e)
{
webBrowser1.Navigate("http://www.google.com/search?q=" + textBox1.Text);
webBrowser1.DocumentCompleted += WebBrowser1_DocumentCompleted;
}


private void WebBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
string doc = webBrowser1.DocumentText;
richTextBox1.Text = doc;
}

یه webbrowser نیاز دارید + event complete
بعد از لود شدن صفحه برای بیرون کشیدن اطلاعات به چند روش میشه عمل کرد من خودم از regex راحتتر استفاده میکنم به این صورت که:
۱- کل قسمت نتایج رو بیرون میکشم
پترن:
(?<=<div class=\"g\">).+(?=<\/div>)
۲- با استفاده از ۱ ،نتایجم رو تیکه تیکه میکنم، پترن:

(?<=<!--m-->).+?(?=<!--n-->)
۳- حالا از ۲، استفاده میکنم و آدرس سایت رو بیرون میارم، پترن:

(?<=<cite class=\"_Rm\">).+?(?=</cite>)
۴- از ۲ استفاده میکنم و توضیحات رو بیرون میکشم، پترن:

(?<=<span class=\"st\">).+?(?=</span>)
۵- از ۲ استفاده میکنم و آدرس رو درمیارم با دو پترن به این صورت:
اول h3 رو بیرون میکشم:
(?<=<h3 class=\"r\">).+(?=</h3>)
بعد از نتیجه اول استفاده میکنم و تکست تگ a رو بیرون میکشم :
(?<=\">).+?(?=</a>)

samiasoft
دوشنبه 15 خرداد 1396, 17:27 عصر
تشکر از شما

ولی فکر میکنم دراین حالت یه ذره سرعت کار میاد پایین.
چون میخواستم من اینو در عین لحظه به ربات تلگرامم ارسال کنم.

این روشی که گفتید من امتحان نکردم متاسفانه روی نتایج فارسی امکان پذیر نیست! الان خودتون با کدی که نوشتید سورس گوگل رو بدست بیارید.خواهید دید که اصلا متن فارسی داخل سورس برای استخراج وجود ندارد!!!!فک کنم باید به utf تبدیل بشه.


در انجمن در لینک زیر من یه سورسی پیدا کردم که بعد از جستجو لینک نتایج سایت های جستجو شده رو به من میده .
http://barnamenevis.org/showthread.php?500512-%DA%AF%D8%B1%D9%81%D8%AA%D9%86-10-%D9%86%D8%AA%DB%8C%D8%AC%D9%87-%D8%A7%D9%88%D9%84-%DA%AF%D9%88%DA%AF%D9%84&p=2236914&viewfull=1#post2236914

ولی متاسفانه من به دنبال گرفتن عناوین این نتایج هستم.دوستان به نظرتون نمیشه این سورس رو ویرایش کرد تا فقط عناوین رو به ما بده.فک کنم این راه از راه قبلی سریعتر باشه.

nunegandom
دوشنبه 15 خرداد 1396, 21:46 عصر
درسته من انگلیسی رو چک کرده بودم
برای فارسی باید سورس رو نگاه کنید
الان مثلا قسمت توضیحاتش رو توی فارسی میتونید از پترن:

(?<=<span dir="rtl"><em>).+?(?=<\/span>)
بدست بیارید
سرعت regex خیلی بالاست :\

samiasoft
دوشنبه 15 خرداد 1396, 23:07 عصر
نه ببینید
منظورم این هست که در سورس کلا من متن فارسی نمیبنم اصلا !

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

var webClient = new WebClient();
var pageSourceCode = webClient.DownloadString("https://www.google.com/search?q=" + textBox1.Text );

textBox2.Text = pageSourceCode;

حتی با دستور زیر به utf تبدیل کردم بازهم متن فارسی داخلش نیست.

var webClient = new WebClient();
var pageSourceCode = webClient.DownloadString("https://www.google.com/search?q=" + textBox1.Text );


//تبدیل به یوتی اف
byte[] b = System.Text.Encoding.Default.GetBytes(pageSourceCo de);
pageSourceCode = System.Text.Encoding.UTF8.GetString(b);
///


textBox2.Text = pageSourceCode;

soheilnew
دوشنبه 15 خرداد 1396, 23:20 عصر
سلام
برای گرفتن نتایج راه ساده و تک خطی اینه با گت المنت ایدی ires رو در ریچ تکست باکس بریزی
نتایج گوگل در ires هستند
نمونه :
این برای HTML

richTextBox1.Text = webBrowser3.Document.GetElementById("ires").InnerHtml;

اینم TEXT

richTextBox1.Text = webBrowser3.Document.GetElementById("ires").InnerText;

samiasoft
دوشنبه 15 خرداد 1396, 23:22 عصر
سلام
برای گرفتن نتایج راه ساده و تک خطی اینه با گت المنت ایدی ires رو در ریچ تکست باکس بریزی
نتایج گوگل در ires هستند
نمونه :
این برای HTML

richTextBox1.Text = webBrowser3.Document.GetElementById("ires").InnerHtml;

اینم TEXT

richTextBox1.Text = webBrowser3.Document.GetElementById("ires").InnerText;

تشکر از شما
ولی من نمیخوام از وب بروزر استفاده کنم...راه دیگری نداره؟

soheilnew
دوشنبه 15 خرداد 1396, 23:24 عصر
البته یادم رفت اضافه کنم که برای جستجوی متن فارسی هم باید بصورت زیر متن را بفرستی

webBrowser3.Navigate(Uri.EscapeUriString("http://www.bing.com/search?q=" +textBox1.Text));


برای حل مشکل علامت ??????? بجای متون فارسی از Uri.EscapeUriString استفاده کنید

soheilnew
دوشنبه 15 خرداد 1396, 23:26 عصر
تشکر از شما
ولی من نمیخوام از وب بروزر استفاده کنم...راه دیگری نداره؟

منم برای رباتم به دلیل محدودیت گوگل مجبورم از وب بروز استفاده کنم که بهترین نتیجه رو داده
تنها راه حل خوب اینه فعلا البته از نظر من
نمیدونم دوستان دیگه چه نظری دارند

samiasoft
سه شنبه 16 خرداد 1396, 00:52 صبح
دوستان مشکل نامفهوم بودن متن فارسی حل شد.:لبخند:کلی حرص خوردیم تا به کمک خود گوگل حل کنیم.

بایستی به اخر ادرس عبارت &=utf8&oe=utf8 را اضافه میکردیم.

var webClient = new WebClient();
var pageSourceCode = webClient.DownloadString("https://www.google.com/search?q=" + textBox1.Text + "&=utf8&oe=utf8");


//تبدیل به یوتی اف
byte[] b = System.Text.Encoding.Default.GetBytes(pageSourceCo de);
pageSourceCode = System.Text.Encoding.UTF8.GetString(b);
///


textBox2.Text = pageSourceCode;

الان دیگه میشه با ریجکس نتایج رو استخراج کرد.