بیتا حکمت
شنبه 10 مرداد 1394, 00:32 صبح
سلام ، اگر به ساختار لینک های سایت stackoverflow دقت کنین ، می بنید که قسمت اول ادرس یک رشته اس و قسمت دوم یک عدد 6 رقمی ، مثلا
قسمت اول لینک (یک رشته ثابت ):
http://stackoverflow.com/questions/
قسمت دوم که یک عدد هست
/31753779
http://stackoverflow.com/questions/31753779
البته ممکنه همه لینک ها چنین ساختاری نداشته باشن اما مهم نیست فقط میخوام یاد بگیرم که با استفاده از نرد محتویات 900000 صفحه رو چطوری در سریعترین زمان
ممکن بخونم و ..
__
من برای بررسی اینکه در بازه (اولین عدد 6 رقمی ) تا (اخرین عدد 6 رقمی ) لینک چه محتوایی داره ، از کد زیر استفاده کردم :
int shomarand = 0;
public void search()
{
this.Invoke((MethodInvoker)delegate() { this.progressBar1.Maximum = 999999; });
for (int i = 999999; i >= 100000; i--)
{
// label1.Text = "http://stackoverflow.com/questions/" + i.ToString();
try
{
// writeclearlik(rs.GetXHtmlFromUri(line).ToString(), line);
// label1.Text = line;
WebClient client = new WebClient();
var data = client.DownloadData("http://stackoverflow.com/questions/" + i.ToString() + "/");
var html = Encoding.UTF8.GetString(data);
if (html.ToString().Contains("Page Not Found"))
{
using (StreamWriter w = File.AppendText("clearlink.txt"))
{
w.WriteLine(shomarand.ToString() + "- " + "http://stackoverflow.com/questions/" + i.ToString() + "/", Encoding.UTF8);
shomarand++;
}
}
using (StreamWriter w = File.AppendText("cheaked.txt"))
{
w.WriteLine(System.DateTime.Now.ToString() + "-" + "http://stackoverflow.com/questions/" + i.ToString() + "/", Encoding.UTF8);
}
}
catch
{
}
this.Invoke((MethodInvoker)delegate() { progressBar1.Value++; });
}
MessageBox.Show("تمام شد ");
کد باتن برای شروع پروسس :
if (!System.IO.File.Exists("cheaked.txt"))
System.IO.File.Create("cheaked.txt");
if (System.IO.File.Exists("clearlink.txt"))
File.Delete("clearlink.txt");
System.IO.File.Create("clearlink.txt");
Thread t = new Thread(search); // Kick off a new thread
t.Start();
حالا
سوال اول : ساعتها طول می کشه تا این 900000 صفحه بررسی بشن ، برای اینکه از لحاظ زمانی سرعت اجرای برنامه و بررسی صفحات بیشتر بشه ، باید چه کنیم ؟
سوال دوم : چرا کد پایین درون متد Search باعث بروز خطا میشه ، من میخوام تو خروجی لحظه به لحظه مشخص باشه که کدوم آدرس اینترنتی در حال بررسی است ..
label1.Text = "http://stackoverflow.com/questions/" + i.ToString();
سوال سوم : حتی با وجود دقایق زیادی از اجرای برنامه ، پروسس بار تغییری نمی کنه .. در حالی که باید در حال پر شدن نشون داده می شد
قسمت اول لینک (یک رشته ثابت ):
http://stackoverflow.com/questions/
قسمت دوم که یک عدد هست
/31753779
http://stackoverflow.com/questions/31753779
البته ممکنه همه لینک ها چنین ساختاری نداشته باشن اما مهم نیست فقط میخوام یاد بگیرم که با استفاده از نرد محتویات 900000 صفحه رو چطوری در سریعترین زمان
ممکن بخونم و ..
__
من برای بررسی اینکه در بازه (اولین عدد 6 رقمی ) تا (اخرین عدد 6 رقمی ) لینک چه محتوایی داره ، از کد زیر استفاده کردم :
int shomarand = 0;
public void search()
{
this.Invoke((MethodInvoker)delegate() { this.progressBar1.Maximum = 999999; });
for (int i = 999999; i >= 100000; i--)
{
// label1.Text = "http://stackoverflow.com/questions/" + i.ToString();
try
{
// writeclearlik(rs.GetXHtmlFromUri(line).ToString(), line);
// label1.Text = line;
WebClient client = new WebClient();
var data = client.DownloadData("http://stackoverflow.com/questions/" + i.ToString() + "/");
var html = Encoding.UTF8.GetString(data);
if (html.ToString().Contains("Page Not Found"))
{
using (StreamWriter w = File.AppendText("clearlink.txt"))
{
w.WriteLine(shomarand.ToString() + "- " + "http://stackoverflow.com/questions/" + i.ToString() + "/", Encoding.UTF8);
shomarand++;
}
}
using (StreamWriter w = File.AppendText("cheaked.txt"))
{
w.WriteLine(System.DateTime.Now.ToString() + "-" + "http://stackoverflow.com/questions/" + i.ToString() + "/", Encoding.UTF8);
}
}
catch
{
}
this.Invoke((MethodInvoker)delegate() { progressBar1.Value++; });
}
MessageBox.Show("تمام شد ");
کد باتن برای شروع پروسس :
if (!System.IO.File.Exists("cheaked.txt"))
System.IO.File.Create("cheaked.txt");
if (System.IO.File.Exists("clearlink.txt"))
File.Delete("clearlink.txt");
System.IO.File.Create("clearlink.txt");
Thread t = new Thread(search); // Kick off a new thread
t.Start();
حالا
سوال اول : ساعتها طول می کشه تا این 900000 صفحه بررسی بشن ، برای اینکه از لحاظ زمانی سرعت اجرای برنامه و بررسی صفحات بیشتر بشه ، باید چه کنیم ؟
سوال دوم : چرا کد پایین درون متد Search باعث بروز خطا میشه ، من میخوام تو خروجی لحظه به لحظه مشخص باشه که کدوم آدرس اینترنتی در حال بررسی است ..
label1.Text = "http://stackoverflow.com/questions/" + i.ToString();
سوال سوم : حتی با وجود دقایق زیادی از اجرای برنامه ، پروسس بار تغییری نمی کنه .. در حالی که باید در حال پر شدن نشون داده می شد