PDA

View Full Version : سوال: کی میتونه اسم های که توی این ویب سایت است را دانلود کنه وبه به دیتابیس ذخیره کنه رهنمای لطفا



esagraphic
پنج شنبه 04 دی 1393, 15:15 عصر
سلام به همه دوستان و اساتید گرامی من میخوام نام ، نام پدر ، نمره و بقیه تکس های که داخل این ویب سایت است را توسط وی بی دانلود کنم وبه دیتابیس ذخیره کنم چون کاپی کردنش خیلی سخته تعداد صفحه هایش هم فکر کنم بالای 1000 تا است کمک کنید هرکی بلده منتظر رهنمای هستم
صفحه دومش تنها فرقش به این است
N=2
تا حالا تجربه چنین کاری را نداشتم

esagraphic
یک شنبه 07 دی 1393, 17:22 عصر
یعنی کسی کیست جوابمو بده اخه فقط میخوام اسم های تو اون ویب سایت را کاپی کنم با برنامه یعنی دریافت کنم تک تک شونو

Mani_rf
یک شنبه 07 دی 1393, 18:25 عصر
سلام دوست خوبم.
کار دشواری نیست اما نیاز به داشتن دانش HTML دارد.
تنها کاری که باید انجام بدهی این است که باید جدولی که کلاس List را دارد، درون HTML سایت پیدا کنی و درون یک حلقه For تگ های TR را یکی یکی بخوانی و اطلاعات نوشته شده درون تگ های TD قرار گرفته درون هر Tr را در دیتابیس ذخیره کنی.
کمی جستجو کنی بارها و بارها نحوه خواندن تگ های HTML به کمک VB.net درون انجمن مطرح شده است که حتما به شما کمک خواهد کرد. اگر موفق نشدید بفرمایید تا بیشتر راهنماییتان کنم.

esagraphic
سه شنبه 09 دی 1393, 10:13 صبح
سلام دوست خوبم. کار دشواری نیست اما نیاز به داشتن دانش HTML دارد. تنها کاری که باید انجام بدهی این است که باید جدولی که کلاس List را دارد، درون HTML سایت پیدا کنی و درون یک حلقه For تگ های TR را یکی یکی بخوانی و اطلاعات نوشته شده درون تگ های TD قرار گرفته درون هر Tr را در دیتابیس ذخیره کنی.کمی جستجو کنی بارها و بارها نحوه خواندن تگ های HTML به کمک VB.net درون انجمن مطرح شده است که حتما به شما کمک خواهد کرد. اگر موفق نشدید بفرمایید تا بیشتر راهنماییتان کنم.دوست عزیز اگه یکبار کمک کنید ممنون تان میشم چون در این مورد هیچ تجربه ندارم چون تعداد صفحات هم زیاده با تشکر

Mani_rf
سه شنبه 09 دی 1393, 10:24 صبح
زیاد بودن صفحه ها اهمیتی برای برنامه ندارد، فقط زمان زیاد تری میبرد. مشکل شما دقیقا در کدام قسمت پیاده سازی است؟ کد های خود را قرار دهید تا کمکتان کنم

Mani_rf
سه شنبه 09 دی 1393, 11:10 صبح
یک نمونه برایت آماده کردم که این کار را انجام می دهد. البته 90% کار را انجام میدهد. اطلاعات را از سایت خوانده و در یک دیتاگرید میریزد.
شما کافی است تا یک حلقه برای جلو رفتن صفحه ها ایجاد کنید و بجای ریختن اطلاعات درون گرید آن را درون دیتایس مورد نظر خودتان ذخیره کنید.
موفق باشید

esagraphic
سه شنبه 09 دی 1393, 13:59 عصر
یک نمونه برایت آماده کردم که این کار را انجام می دهد. البته 90% کار را انجام میدهد. اطلاعات را از سایت خوانده و در یک دیتاگرید میریزد.
شما کافی است تا یک حلقه برای جلو رفتن صفحه ها ایجاد کنید و بجای ریختن اطلاعات درون گرید آن را درون دیتایس مورد نظر خودتان ذخیره کنید.
موفق باشید

دوست عزیز خیلی ممونم بابت کمکی که کردین من انشاء الله اون بخش for که صفحه هارو پیش ببره را تکمیل میکنم و اینکه چیطوری بریزم تو دیتابیس اگه به مشکلی خورد باز شما را زحمت میدم تشکر از همکاری
به درود

Mani_rf
چهارشنبه 10 دی 1393, 10:00 صبح
خوشحال میشم کمکتون کنم.
موفق باشید

esagraphic
شنبه 13 دی 1393, 02:05 صبح
خوشحال میشم کمکتون کنم.
موفق باشید


دوست عزیز درود خیلی ممنون از اینکه وقت تونو در اختیار ما گزاشتید من اون قسمت که صفحات زیاد شده برده را جور کردم ولی تو قسمت اینکه چیجوری توی دیتابیس ذخیره کنم موندم یعنی نه که چیطوری ذخیره میشه را میدونم ما اینطور کار نکردم اگه میشه یک توضیع از کد های قشنگی که نوشتین بدین و اینکه چیطوری تو دیتابیس ذخیره کنم یک اشاره کنید ممنون میشم

esagraphic
دوشنبه 15 دی 1393, 20:01 عصر
سلام دوستا من زمانی که اون مشصات را توی اسک کیو ال سرور با این روش زیر می اندازم ایرور زیر را میده
Conversion from string "F19893011" to type 'Double' is not valid.





Dim Link As String = "http://www.mohe.gov.af/?p=daily&n=" & GlobalVariables.count


WebBrowser1.Navigate(Link)
While Not (WebBrowser1.ReadyState = WebBrowserReadyState.Loaded Or WebBrowser1.ReadyState = WebBrowserReadyState.Complete)
'Wait to load document
Application.DoEvents()
End While


Dim ParentList As HtmlElement = WebBrowser1.Document.GetElementById("box")
Dim Table As HtmlElement = ParentList.Children(1).Children(2)


' Add Headers
Dim dt As New DataTable
For i = 0 To Table.FirstChild.Children(0).Children.Count - 1
Dim colName As String = Table.FirstChild.Children(0).Children(i).InnerText
dt.Columns.Add(colName)
Next


' Add Data
For i = 1 To Table.FirstChild.Children.Count - 2
Dim tr As HtmlElement = Table.FirstChild.Children(i)
Dim RowData As DataRow = dt.NewRow


For j = 0 To tr.Children.Count - 1
Dim td As HtmlElement = tr.Children(j)
RowData(j) = td.InnerText


Dim con As SqlClient.SqlConnection = New SqlClient.SqlConnection("Data Source=MOSSA;Initial Catalog=data;Integrated Security=True")


If RowData(j) = 0 Then


Dim strcommand As String = "insert into dataafg(stdid) " & " values(' " & Val(j) & "' )"
ElseIf RowData(j) = 1 Then
Dim strcommand As String = "insert into dataafg(stdname) " & " values('" & RowData(j) & "')"
ElseIf RowData(j) = 2 Then
Dim strcommand As String = "insert into dataafg(stdfname) " & "values('" & RowData(j) & "')"
ElseIf RowData(j) = 3 Then
Dim strcommand As String = "insert into dataafg(stdffname) " & "values('" & RowData(j) & "')"
ElseIf RowData(j) = 4 Then
Dim strcommand As String = "insert into dataafg(stdschool) " & "values('" & RowData(j) & "')"
ElseIf RowData(j) = 5 Then
Dim strcommand As String = "insert into dataafg(stdcity) " & "values('" & RowData(j) & "')"
ElseIf RowData(j) = 6 Then
Dim strcommand As String = "insert into dataafg(stdgrade) " & "values(' & RowData(j) &')"
ElseIf RowData(j) = 7 Then
Dim strcommand As String = "insert into dataafg(stdfac) " & "values('" & RowData(j) & "')"


Dim com As SqlClient.SqlCommand = New SqlClient.SqlCommand(strcommand, con)
con.Open()
com.ExecuteNonQuery()
con.Close()
End If





Next
dt.Rows.Add(RowData)
Next


DataGridView1.DataSource = dt

End Sub

Mani_rf
سه شنبه 16 دی 1393, 10:29 صبح
دلیل اون خطا اینه که شما دارید سعی میکنید مقدار رشته ای رو توی فیلدی از نوع Double بریزید. درواقع فیلد stdid رو شما از نوع Double در نظر گرفتید و دارید مقداری "
F19893011
" که از سایت میخونید رو توش میریزید که مشخصا String هست نه Double. یا نوع فیلد دیتابیسی رو عوض کنید و یا مقدار Id سایت رو ذخیره نکنید و خودتون Id تولید کنید.
کدی هم که شما برای اضافه کردن اطلاعات درون دیتابیس نوشتید درست نیست. بهتره که یه این شکل عمل کنید :


Dim Link As String = "http://www.mohe.gov.af/?p=daily&n=" & GlobalVariables.count


WebBrowser1.Navigate(Link)
While Not (WebBrowser1.ReadyState = WebBrowserReadyState.Loaded Or WebBrowser1.ReadyState = WebBrowserReadyState.Complete)
'Wait to load document
Application.DoEvents()
End While


Dim ParentList As HtmlElement = WebBrowser1.Document.GetElementById("box")
Dim Table As HtmlElement = ParentList.Children(1).Children(2)


' Add Data
For i = 1 To Table.FirstChild.Children.Count - 2
Dim tr As HtmlElement = Table.FirstChild.Children(i)


Dim strcommand As String = "insert into dataafg(stdid,stdname,stdfname,stdffname,stdschool ,stdcity,stdgrade,stdfac) Values (@stdid,@stdname,@stdfname,@stdffname,@stdschool,@ stdcity,@stdgrade,@stdfac)"


strcommand.Parameters.AddWithValue("@stdid",tr.Children(0).InnerText)
strcommand.Parameters.AddWithValue("@stdname",tr.Children(1).InnerText)
strcommand.Parameters.AddWithValue("@stdfname",tr.Children(2).InnerText)
strcommand.Parameters.AddWithValue("@stdffname",tr.Children(3).InnerText)
strcommand.Parameters.AddWithValue("@stdschool",tr.Children(4).InnerText)
strcommand.Parameters.AddWithValue("@stdcity",tr.Children(5).InnerText)
strcommand.Parameters.AddWithValue("@stdgrade",tr.Children(6).InnerText)
strcommand.Parameters.AddWithValue("@stdfac",tr.Children(7).InnerText)


Dim con As SqlClient.SqlConnection = New SqlClient.SqlConnection("Data Source=MOSSA;Initial Catalog=data;Integrated Security=True")


Dim com As SqlClient.SqlCommand = New SqlClient.SqlCommand(strcommand, con)
con.Open()
com.ExecuteNonQuery()
con.Close()
Next

esagraphic
سه شنبه 16 دی 1393, 11:04 صبح
دلیل اون خطا اینه که شما دارید سعی میکنید مقدار رشته ای رو توی فیلدی از نوع Double بریزید. درواقع فیلد stdid رو شما از نوع Double در نظر گرفتید و دارید مقداری "
F19893011
" که از سایت میخونید رو توش میریزید که مشخصا String هست نه Double. یا نوع فیلد دیتابیسی رو عوض کنید و یا مقدار Id سایت رو ذخیره نکنید و خودتون Id تولید کنید.
کدی هم که شما برای اضافه کردن اطلاعات درون دیتابیس نوشتید درست نیست. بهتره که یه این شکل عمل کنید :


Dim Link As String = "http://www.mohe.gov.af/?p=daily&n=" & GlobalVariables.count


WebBrowser1.Navigate(Link)
While Not (WebBrowser1.ReadyState = WebBrowserReadyState.Loaded Or WebBrowser1.ReadyState = WebBrowserReadyState.Complete)
'Wait to load document
Application.DoEvents()
End While


Dim ParentList As HtmlElement = WebBrowser1.Document.GetElementById("box")
Dim Table As HtmlElement = ParentList.Children(1).Children(2)


' Add Data
For i = 1 To Table.FirstChild.Children.Count - 2
Dim tr As HtmlElement = Table.FirstChild.Children(i)


Dim strcommand As String = "insert into dataafg(stdid,stdname,stdfname,stdffname,stdschool ,stdcity,stdgrade,stdfac) Values (@stdid,@stdname,@stdfname,@stdffname,@stdschool,@ stdcity,@stdgrade,@stdfac)"


strcommand.Parameters.AddWithValue("@stdid",tr.Children(0).InnerText)
strcommand.Parameters.AddWithValue("@stdname",tr.Children(1).InnerText)
strcommand.Parameters.AddWithValue("@stdfname",tr.Children(2).InnerText)
strcommand.Parameters.AddWithValue("@stdffname",tr.Children(3).InnerText)
strcommand.Parameters.AddWithValue("@stdschool",tr.Children(4).InnerText)
strcommand.Parameters.AddWithValue("@stdcity",tr.Children(5).InnerText)
strcommand.Parameters.AddWithValue("@stdgrade",tr.Children(6).InnerText)
strcommand.Parameters.AddWithValue("@stdfac",tr.Children(7).InnerText)


Dim con As SqlClient.SqlConnection = New SqlClient.SqlConnection("Data Source=MOSSA;Initial Catalog=data;Integrated Security=True")


Dim com As SqlClient.SqlCommand = New SqlClient.SqlCommand(strcommand, con)
con.Open()
com.ExecuteNonQuery()
con.Close()
Next

سلام دوستم خیلی ممنون از رهنمائی من فیلد آی دی را ذخیره نکردم اون خودش identity است اون آی دی مال آی هر شاگرد بود بعدش نوعیت هم nvarchar(50) بود ممنون از رهنمای شما دوستم همیشه موفق باشین