PDA

View Full Version : سوال: دریافت اطلاعات از سایت



azbddk
جمعه 20 تیر 1393, 18:12 عصر
سلام دوستان

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

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

چطوری می تونم

ehsan2589040
شنبه 21 تیر 1393, 11:02 صبح
باید ببینی آیا رتبه تو سورس صفحه ات هم هست بعدش با دستور client.downloadstring(url page aleska) اونو جدا کنی

azbddk
شنبه 21 تیر 1393, 11:10 صبح
چطوری؟

میشه یه مثال بزنی

azbddk
یک شنبه 22 تیر 1393, 11:09 صبح
یعنی واقعاً کسی بلد نیست؟

s.karim
سه شنبه 24 تیر 1393, 10:13 صبح
اول باید به سایت الکسا رفته با استفاده از FireBug یا هر افزونه ی دیگه ای شبیه اون، نام Element مورد نظر خود رو بدست بیاری.

فرض کن آبجکت رتبه ی سایت رو با فایر باگ Inspect کردی و متوجه شدی که نام اون مثلا این هست:

dnn_ctr471_lblRotbeh

این نام رو کپی کن و داشته باش


از اون طرف درون پروژه ات روی فرم، یک Web Browser بزار و سایت الکسا رو توش لود کن به صورت زیر:


webBrowser1.Navigate("http://www.alexa.com/");





پس از اون با نوشتن کد زیر می تونی رتبه سایتتو توی textbox نمایش بدی:



textBox1.text = webBrowser1.Document.GetElementById("dnn_ctr471_lblRotbeh").InnerText.ToString()

azbddk
سه شنبه 24 تیر 1393, 13:51 عصر
این کدی که شما نوشتی با ID کار میکنه و هیچکدومشون ID ندارن ولی Class دارن

s.karim
چهارشنبه 25 تیر 1393, 09:27 صبح
// get element by class name

private void button1_Click(object sender, EventArgs e)
{
if (webBrowser1.Document != null)
{
HtmlElementCollection elems = webBrowser1.Document.GetElementsByTagName("strong");
foreach (HtmlElement elem in elems)
{
if (elem.GetAttribute("className") == "metrics-data align-vmiddle")
{

MessageBox.Show(elem.GetAttribute("InnerText"));
}
}

}
}

azbddk
چهارشنبه 25 تیر 1393, 11:53 صبح
داداش بازم نشد و نشون نداد

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

Public Class Form1

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
WebBrowser1.Navigate("http://www.alexa.com/siteinfo/" + TextBox1.Text)
If (Not (WebBrowser1.Document) Is Nothing) Then
Dim elems As HtmlElementCollection = WebBrowser1.Document.GetElementsByTagName("strong")
For Each elem As HtmlElement In elems
If (elem.GetAttribute("className") = "metrics-data align-vmiddle") Then
TextBox2.Text = elem.GetAttribute("InnerText")
End If
Next
End If
End Sub
End Class

s.karim
چهارشنبه 25 تیر 1393, 12:07 عصر
دوست عزیر ، چون لود وب سایت درون webBrowser کمی طول میکشه
هنوز زمان کافی نداشته که element ها رو مقدار دهی کنه
پیشنهاد می کنم WebBrowser1.Navigate رو درون From_Load بزاری
و موقع کلیک شدن دکمه، Get Element کنی
در ضمن من خانومم :بامزه:

s.karim
چهارشنبه 25 تیر 1393, 12:08 عصر
private void Form3_Load(object sender, EventArgs e)
{
webBrowser1.Navigate("http://www.alexa.com/siteinfo/" + "www.yahoo.com") ;
}


private void button1_Click(object sender, EventArgs e)
{
if (webBrowser1.Document != null)
{
HtmlElementCollection elems = webBrowser1.Document.GetElementsByTagName("strong");
foreach (HtmlElement elem in elems)
{
if (elem.GetAttribute("className") == "metrics-data align-vmiddle")
{

MessageBox.Show(elem.GetAttribute("InnerText"));
}
}

}
}

azbddk
چهارشنبه 25 تیر 1393, 17:56 عصر
خیلی ممنون کار کرد

ولی یه مشکل داره و اون اینه که فقط اطلاعات رتبه رو نمیگیره و نتیجه 4-5 تا از element های دیگه رو هم نشون میده

مثلاً هم رتبه رو نشون میده و هم Bounce Rate رو نشون میده

s.karim
چهارشنبه 25 تیر 1393, 20:08 عصر
چون همشون دارای یک کلاس هستن
دیگه از این بعدش خلاقیت خودتونه
می تونی همه رو بریزی توو یه آرایه و به اونی که می خوای مستقیما دسترسی پیدا کنی

ehsan2589040
پنج شنبه 26 تیر 1393, 09:32 صبح
همشو بریز تو یه متغیر بعدش از indexof , substring , lastindexof استفاده کن

amir-new.programer
جمعه 27 تیر 1393, 04:40 صبح
آقا احسان میشه اینایی که گفتید رو توضیح بدید

ehsan2589040
یک شنبه 29 تیر 1393, 23:49 عصر
فرض کن این سایت منه "http://www.tsetmc.com/tsev2/data/CodalContent.aspx?s=%D9%BE%D8%B3%D9%87%D9%86%D8%AF&r=14"4
من بدنبال اولین عدد بعد از عبارت txbDividendPerShare هستم در نتیجه اول متن داخل وببروزر رو میگیرم ntext = WebBrowser2.Document.Body.OuterText
بعد شروع می کنم به جدا کردن
Dim sood As String = ntext.Substring(ntext.IndexOf("txbDividendPerShare"",""_text"":") + 30, ntext.IndexOf("}]", ntext.IndexOf("txbDividendPerShare"",""_text"":")) - ntext.IndexOf("txbDividendPerShare"",""_text"":") - 31)


اگر از کارکرد
indexof , substring , lastindexof نمیدونی باید بگردی تو وب تو گوگل بزن
example of indexof in vb.net یا بپرس