PDA

View Full Version : سوال: برداشتن یک قسمت از یک سایت



SaidJan
دوشنبه 10 آذر 1393, 10:21 صبح
درود
توی سایت bonbast.com آخرین قیمت دلار رو زده. میخوام فقط اون قسمت قیمت دلار رو که مثلا زده 3490 رو بردارم و بزارم توی برنامه (فقط عدد 3490 رو). کدش به چه صورت هست؟
مثلا اگه بخوام قیمت رو توی یه Textbox نشون بده، باید بنویسم textbox1.text= با چی؟
سپاس

I M A N
دوشنبه 10 آذر 1393, 13:30 عصر
سلام دوست عزیز براتون درست کردم :لبخندساده:


Dim htmlText, GetOnlyDollar As String



'Get Website Source Code'


Dim request As HttpWebRequest = HttpWebRequest.Create("http://www.bonbast.com/")
Dim response As WebResponse = request.GetResponse()


Dim stream As Stream = response.GetResponseStream()


Dim reader As StreamReader = New StreamReader(stream)


htmlText = reader.ReadToEnd()




'Find Dollar'


Dim DStart As Integer = htmlText.IndexOf("US Dollar")
Dim DEnd As Integer = htmlText.IndexOf(";"">", DStart)


Dim Dollar As String = htmlText.Substring(DStart, DEnd - DStart + 7)




'Get Only Dollar'


Dim DollarString As String = Dollar
Dim DSub As String = DollarString.Substring(DollarString.LastIndexOf(";"">"))
GetOnlyDollar = DSub.Remove(0, 3)


MessageBox.Show(GetOnlyDollar)

SaidJan
سه شنبه 11 آذر 1393, 02:06 صبح
سپاس فراوان :لبخندساده:
این کد که دادین رو گذاشتم زیر این خط
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
و این دوتا رو هم گفت اضافه کن که کردم:
Imports System.Net
Imports System.IO


Dim DSub As String = DollarString.Substring(DollarString.LastIndexOf("; "">"))
حالا خط بالا رو هایلایت میکنه و ارور زیر رو میده:
StartIndex cannot be less than zero.
Parameter name: startIndex


ویرایش:
پیداش کردم مشکل رو. خط 39 که خودتون نوشتین ایندکس آخری وسطش 2تا فاصله هست که پاکش کردم.
یه سوال دیگه اینکه ایندکس US Dollar رو خود برنامه میتونه بفهمه که مثلا عدد 50هست ولی ایندکس ";"">" یعنی کجا؟
اگر بخوام قیمت خرید رو بگیرم چه تغییراتی باید بدم؟
اون عدد 7 از کجا اومده؟


کلا اگه بخوام یه متن رو از یه وبسایت بگیرم چجوریه؟ مثلا توی سایت نوشته my user name is saidjan. من میخوام از user تا is رو از سایت بگیرم.
و یه سوال دیگه اینکه میخوام با زدن یه دکمه وبسایت اپدیت بشه. مثلا اگه ادرس سایت bn1 هست با زدن دکمه بشه bn2 و همینجوری بره بالا تا سایت باز بشه؟

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

I M A N
سه شنبه 11 آذر 1393, 11:14 صبح
خواهش می کنم دوست من

آزه الان دیدم نمیدونم چرا بینشون فاصله افتاده بود .


ایندکس ";"">"

{
چون String Dollar ما اینجا این کد رو پیدا می کنه و تنها عدد رو نمایش نمیده یعنی :

Dollar = US Dollar</span></td><td><span style="color: #666666;">3380


در اینجا چون بعد از کد رنگ ، عدد مورد نظر قرار داره DStart رو 7 + کردیم تا عدد مورد نظر رو هم در بر بگیره


http://s5.picofile.com/file/8154808584/example.jpg


چون گفتم شاید یه وقتی در سورس سایت تغییری پیدا کنه : مثال color: #666666; تغییر کنه به color: #45768; یک عدد کم یا زیاد بشه که اگه بصورت دستی index = 55 میدایم یک حرف یا عدد قبل ار عددمون می دیدیم مثال : 3420< با این کار DSub مون .LastIndexOf(";"">" رو برامون پیدا میکنه



در این صورت کد رو به صورت زیر بنویسید که هم فروش هم خرید رو نمایش می ده :


Dim htmlText, GetOnlyDollarForoosh, GetOnlyDollarKharid As String


'Get Website Source Code'


Dim request As HttpWebRequest = HttpWebRequest.Create("http://www.bonbast.com/")
Dim response As WebResponse = request.GetResponse()


Dim stream As Stream = response.GetResponseStream()


Dim reader As StreamReader = New StreamReader(stream)


htmlText = reader.ReadToEnd()




'Find Dollar'


Dim DStart As Integer = htmlText.IndexOf("US Dollar")
Dim DEnd As Integer = htmlText.IndexOf("class=""separator", DStart)


Dim Dollar As String = htmlText.Substring(DStart, DEnd - DStart + 7)




'Get Only Dollar'


Dim DollarString As String = Dollar


'Foroosh Dollar


Dim DollarForooshStart As Integer = DollarString.IndexOf(";"">")
Dim A As String = DollarString.Substring(DollarForooshStart, 7)
GetOnlyDollarForoosh = A.Remove(0, 3)


'Kharid Dollar'


Dim DollarKharidStart As Integer = DollarString.LastIndexOf("</span></td><td><span") - 7
Dim D As String = DollarString.Substring(DollarKharidStart, 7)
GetOnlyDollarKharid = D.Remove(0, 3)


MessageBox.Show("قیمت فروش : " & GetOnlyDollarForoosh & vbNewLine & "قیمت خرید : " & GetOnlyDollarKharid)




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




Dim MyText As String = "<12345555555435>jjjj<><class=""name"">my user name is saidjan.""</class=""name""></12345555555435></jjjj>"


Dim Starts As Integer = MyText.IndexOf("<class=""name"">")
Dim Ends As Integer = MyText.IndexOf("</class=""name"">", Starts) - 1


Dim D As String = MyText.Substring(Starts, Ends - Starts).Remove(0, 14)




MessageBox.Show(D)







در مورد این که آدرس سایت تغییر کنه اطلاعی ندارم .

}

SaidJan
چهارشنبه 15 بهمن 1393, 00:24 صبح
اگه بخوام از این صفحه http://www.phonearena.com/phones/manufacturers/Nokia یا این صفحه http://www.gsmarena.com/samsung-phones-9.php فقط اسم تمام گوشی ها رو بردارم و توی یه فایل txt ذخیره کنم چجوری میشه این برنامه رو با vb ساخت؟
اگه بخوام از روشی که تو همین تاپیک گفته شده استفاده کنم، انگار نمیشه. چون تعداد گوشی ها بیشتر از 1 هست و نمیدونم چجوری نوشته میشه. ممنون میشم کمکم کنید.

I M A N
دوشنبه 20 بهمن 1393, 11:03 صبح
اگه بخوام از این صفحه http://www.phonearena.com/phones/manufacturers/Nokia یا این صفحه http://www.gsmarena.com/samsung-phones-9.php فقط اسم تمام گوشی ها رو بردارم و توی یه فایل txt ذخیره کنم چجوری میشه این برنامه رو با vb ساخت؟
اگه بخوام از روشی که تو همین تاپیک گفته شده استفاده کنم، انگار نمیشه. چون تعداد گوشی ها بیشتر از 1 هست و نمیدونم چجوری نوشته میشه. ممنون میشم کمکم کنید.


خب من براتون Project درستش کردم از سایت http://www.gsmarena.com/samsung-phones-9.php کل گوشی ها رو در فایل txt. در کنار برنامه ذخیره می کنه


موفق باشید :لبخندساده:

SaidJan
سه شنبه 21 بهمن 1393, 01:05 صبح
عالی کار کرد. فایل رو به صورت txt ذخیره کرد. ازتون خیلی ممنونم. ولی میشه توضیح بدید چجوری؟ درضمن من میخوام واسه یادگیریم اینو اول توی listbox ذخیره کنم، بعد توی فایل txt
و اینکه لوپ یا همون تکرار رو چجوری به کار بردید؟ من تونستم اولین گوشی رو که galaxy j1 هست رو بگیرم ولی نتونستم بزارم توی لوپ که بقیه رو هم بگیره.
درضمن من میخوام این رو با کل سایت gsmarena کنم که بتونم لیست تمام گوشیها رو دربیارم.
اینو خودم نوشتم ولی فقط اسم اولین گوشی رو درمیاره: چند خط رو هم کامنت کردم چون کار نمیکرد.


Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim htmlText As String
Dim request As HttpWebRequest = HttpWebRequest.Create("http://www.gsmarena.com/samsung-phones-9.php")
Dim response As WebResponse = request.GetResponse()
Dim stream As Stream = response.GetResponseStream()
Dim reader As StreamReader = New StreamReader(stream)
htmlText = reader.ReadToEnd()
'While htmlText IsNot Nothing
Dim i As Integer
Dim j As Integer
i = htmlText.IndexOf("""><strong>")
j = htmlText.IndexOf("</strong></a></li><li><a href=")
ListBox1.Items.Add(i)
ListBox1.Items.Add(j)
TextBox1.Text = htmlText.Substring(i + 10, j - 10 - i)
'Else
' MsgBox("salam")
'End If
'End While
End Sub

بازم سپاس فراوان