PDA

View Full Version : خواندن اطلاعات یک صفحه html ‌و ذخیره در فایل متنی



itman.jam
یک شنبه 23 شهریور 1393, 15:53 عصر
سلام دوستان من میخوام اطلاعات این صفحه را http://zapi.gigfa.com/file/47%20.html
در فایل متنی ذخیره کنم . البته تعدادی از این لینک در یک جدول sql دارم . چطور میتونم اینکار را انجام بدم ؟
هزینه راهنمایی و نوشتن کار را هم پرداخت میکنم .

parvizwpf
یک شنبه 23 شهریور 1393, 17:17 عصر
شما برای خوندن باید از WebRequestHttp استفاده کنید.
http://stackoverflow.com/questions/599275/how-can-i-download-html-source-in-c-sharp

itman.jam
سه شنبه 25 شهریور 1393, 18:23 عصر
شما برای خوندن باید از WebRequestHttp استفاده کنید.
http://stackoverflow.com/questions/599275/how-can-i-download-html-source-in-c-sharp

ممنون از پاسختون . ولی یه مشکل هست من تعداد لینکهای زیادی دارم حدود ۵۰۰ عدد . سرعت انجام این کار با این کد پایینه. من لینکها را در یه آرایه میریزم و ازشون استفاده میکنم . آیا راه دیگه ای هست برای اینکه این تعداد لینک سریعتر خونده بشه ؟؟؟ الان حدود ۶۰ ثانیه طول میکشه ولی باید حدود ۱۰ ثانیه این ۵۰۰ لینک در فایل متن ذخیره بشن .
من برنامه کوچیکی دارم که اینکار را در مدت زمان کمی میکنه و متاسفانه سورسش را ندارم .

omid nasri
سه شنبه 25 شهریور 1393, 18:27 عصر
از چند نخ استفاده کن.

mohsen12345
سه شنبه 25 شهریور 1393, 18:37 عصر
شما می تونید برای خوندن همون طور که دوستمون گفتن از Thread استفاده کنی و تا کاربر اون رو بخونه و تا بخواد بخونه بقیشون رو از وب گرفتی
اگه توضیح نوشتاریش رو هم خواستی، در مورد اینکه می خوای چکار کنی بیشتر توضیح بده تا برات بگم

itman.jam
سه شنبه 25 شهریور 1393, 21:28 عصر
شما می تونید برای خوندن همون طور که دوستمون گفتن از Thread استفاده کنی و تا کاربر اون رو بخونه و تا بخواد بخونه بقیشون رو از وب گرفتی
اگه توضیح نوشتاریش رو هم خواستی، در مورد اینکه می خوای چکار کنی بیشتر توضیح بده تا برات بگم

سلام ممنون از راهنماییتون . راستش دیگه سواد thread ها را ندارم ! من کدی که نوشتم برای خوندن لینک و ذخیره اش در فایل متنی را مینویسم یه نگاه بندازید .
اگرم هزینه ای داره پرداخت میکنم خسته شدم از بس گشتم توی نت . :افسرده:

من یه فایل متنی دارم که لینکها را داخلش ذخیره کردم و برنامه از اون لینکها را میخونه . هر لینکی هم یه شماره داره برای خودش به این شکل :
2 ==>http://zapi.gigfa.com/file/2%20.html البته شماره اش سمت چپه که اینجا فک کنم برعکس شد . این هم کد مربوطه :
private void getnewinfo()
{
//دریافت لیست لینک ها
string[] UrlList = File.ReadAllLines(Path.GetDirectoryName(Applicatio n.ExecutablePath) + "\\linklist.txt");

foreach (string str in UrlList)
{
//جدا سازی نام فایل و لینک

string Fname = str.Substring(0, str.IndexOf("==>"));

string url = str.Substring((str.IndexOf("==>") + 3), (str.Length - (str.IndexOf("==>") + 3)));


string html = GetHtml(url);
File.WriteAllText(Path.GetDirectoryName(Applicatio n.ExecutablePath) + "\\filelist\\" + Fname + ".txt", html);

// }





//کلاسی برای دریافت سورس صفحات
public class GZipWebClient : WebClient
{
//کلاس برای فراخوانی صفحات gzip
protected override WebRequest GetWebRequest(Uri address)
{
HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(address);
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
return request;
}

}
}

itman.jam
سه شنبه 25 شهریور 1393, 21:37 عصر
یه تعدادی صفحه هست حاوی یکی دو خط عدد که میخوام بعضی اعدادشو جدا کنم و در یه جدول از بانک اطلاعاتیم ذخیره کنم . بعضی لینکها نیاز به اینکدینگ دارن که اونو حل کردم .
فقط الان سرعت کار پایینه . میخوام اول ببینم میتونم سرعت را ببرم بالا . اگه شد بعدن محتوای اونها را فیلتر کنم و چیزهایی که میخوام را در یه جدول sql‌ذخیره کنم .
ولی فعلا گیرم سر سرعت کار هست که در ۱۰ ثانیه کل لینکهام را بخونه و ذخیره کنه .

mohsen12345
چهارشنبه 26 شهریور 1393, 00:25 صبح
یه نمونه ساده از ساخت thread رو برات گذاشتم

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;// این فضای نام رو فراخوانی کن
namespace Sample_thread
{
class Program
{
static void Main(string[] args)
{
Thread t1 = new Thread(myThream_Metod);
t1.Start();
}
static void myThream_Metod()
{//کار هایی که قراره توی یه نخ دیگه به جز برنامت انجام بشه رو اینجا بریز
string a = "";
for (int i = 0; i < 10; i++)
{
a += "Number" + i.ToString() + "\n";
Thread.Sleep(100); // اگه بخوای یه تاخیری توی اجرا داشته باشی از این استفاده می کنی
}

}
}
}

من تو اینجا متد myThread_Metod رو static تعریف کردم چون متد Main استاتیک هست ، شما اگه متدی که قرار thread رو فراخوانی کنه static نیست احتیاج به ان کار نداری

بهترین کار اینه که اول یک صفحتو بخونی و به کاربر نشونش بدی و با اون صفحه مشغولش کنی تا بقیه کم کم از اینترنت دریافت شه ، بقیه کارهای سرعت مربوط به ping خود سرویس دهنده هست و روش دیگه ای الان بهتون پیشنهاد نمی کنم

چون نمی دونم برنامتون چیه فقط تا همین حد می تونم راهنمایی کنم.

باز اگه خواستید سورس رو بفرستید بهم خبر بدید

itman.jam
چهارشنبه 26 شهریور 1393, 08:38 صبح
یه نمونه ساده از ساخت thread رو برات گذاشتم

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;// این فضای نام رو فراخوانی کن
namespace Sample_thread
{
class Program
{
static void Main(string[] args)
{
Thread t1 = new Thread(myThream_Metod);
t1.Start();
}
static void myThream_Metod()
{//کار هایی که قراره توی یه نخ دیگه به جز برنامت انجام بشه رو اینجا بریز
string a = "";
for (int i = 0; i < 10; i++)
{
a += "Number" + i.ToString() + "\n";
Thread.Sleep(100); // اگه بخوای یه تاخیری توی اجرا داشته باشی از این استفاده می کنی
}

}
}
}

من تو اینجا متد myThread_Metod رو static تعریف کردم چون متد Main استاتیک هست ، شما اگه متدی که قرار thread رو فراخوانی کنه static نیست احتیاج به ان کار نداری

بهترین کار اینه که اول یک صفحتو بخونی و به کاربر نشونش بدی و با اون صفحه مشغولش کنی تا بقیه کم کم از اینترنت دریافت شه ، بقیه کارهای سرعت مربوط به ping خود سرویس دهنده هست و روش دیگه ای الان بهتون پیشنهاد نمی کنم

چون نمی دونم برنامتون چیه فقط تا همین حد می تونم راهنمایی کنم.

باز اگه خواستید سورس رو بفرستید بهم خبر بدید

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