PDA

View Full Version : save as کردن صفحات وب توسط c#



mozhganAhmadi
دوشنبه 17 خرداد 1395, 01:52 صبح
سلام
لطفا راهنماییم کنین.

میخوام صفحهات یک کتاب رو از تبیان با C#‎‎ ذخیره کنم. مثلن:

http://library.tebyan.net/fa/Viewer/Text/56186/1#1.htm
تا
http://library.tebyan.net/fa/Viewer/Text/56186/1#39.htm
اما من آدرس هر صفحه ای رو که به عنوان ورودی میدم، صفحه ی ذخیره شده محتویات پیج اوله. نمیدونم چرا واقعن.
اگر به صورت دستی save as کنم درست ذخیره میشه اما مثلن به این کد:
client.DownloadFile("http://library.tebyan.net/fa/Viewer/Text/56186/1#39.htm", @"C:\Users\Mozhgan\Desktop\Book2.htm");

خروجی باز هم محتویات این صفحه ست!!!http://library.tebyan.net/fa/Viewer/Text/56186/1#1.htm

Felony
دوشنبه 17 خرداد 1395, 03:53 صبح
کد به درستی داره کارش رو انجام میده .
شما با ساختار فایل های html آشنایی ندارید - اون لینک هایی که قرار دادید همگی یک صفحه هستند - در حقیقت اون صفحه طوری طراحی شده که در زمان بارگزاری کل دیتا کتاب رو لود میکنه و بعد به وسیله اسکریپت این اطلاعات رو صفحه بندی و نمایش میده - خروجی همین کدی که نوشتید و فایل رو ذخیره میکنه رو با Notepad باز کنید - تمامی صفحات کتاب باید داخلش باشه .
اون علامت # و پشت سرش عدد مربوطه نشان دهنده یک تگ تو صفحه هست که با دادن اون تگ در URL مرورگر به اون قسمت که دارای این تگ هست اسکرول میکنه نه یه صفحه جداگانه .

mozhganAhmadi
دوشنبه 17 خرداد 1395, 15:28 عصر
ممنون که جواب دادین. اون فایل رو که باز میکنم فقط اطلاعات صفحه ی اول کتاب توش هست.

mozhganAhmadi
دوشنبه 17 خرداد 1395, 15:31 عصر
الان از کد این صفحه که استفاده کردم مثلن لینک صفحه 39 رو که بهش دادم محتویات صفحه 39 در فایل خروجی رویت شد!
http://stackoverflow.com/questions/1307800/view-generated-source-after-ajax-javascript-in-c-sharp

نظر شما چیه؟

mozhganAhmadi
سه شنبه 18 خرداد 1395, 18:25 عصر
private string GeneratedSource { get; set; }
private string URL { get; set; }

public string GetGeneratedHTML(string url)
{
URL = url;

Thread t = new Thread(new ThreadStart(WebBrowserThread));
t.SetApartmentState(ApartmentState.STA);
t.Start();
t.Join();

return GeneratedSource;

}

private void WebBrowserThread()
{
WebBrowser wb = new WebBrowser();
wb.Navigate(URL);

wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(wb_Documen tCompleted);

while (wb.ReadyState != WebBrowserReadyState.Complete)
Application.DoEvents();

//Added this line, because the final HTML takes a while to show up
GeneratedSource = wb.Document.Body.InnerHtml;
wb.Refresh();
wb.Dispose();
}

private void wb_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
WebBrowser wb = (WebBrowser)sender;
GeneratedSource = wb.Document.Body.InnerHtml;


}

private void btnGetBook_Click(object sender, EventArgs e)
{
for (i = 1; i < 40; i++)
{

listView1.Items.Add("http://library.tebyan.net/fa/Viewer/Text/56186/1#"+ i.ToString());
listView1.Refresh();


File.AppendAllText(@"C:\Users\Mozhgan\Desktop\Test\" + i + ".txt", GetGeneratedHTML("http://library.tebyan.net/fa/Viewer/Text/56186/1#"+ i.ToString()));

}


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

ژیار رحیمی
سه شنبه 18 خرداد 1395, 21:32 عصر
از این library استفاده کن
http://www.codeproject.com/Articles/15536/A-Web-Spider-Library-in-C

mozhganAhmadi
چهارشنبه 19 خرداد 1395, 01:44 صبح
متاسفانه باز هم خروجی نمیده. در سورس خروجی فقط محتویات صفحه اول کتاب رو میده. دلیلش چیه؟ چه کار کنم؟؟