PDA

View Full Version : گفتگو: دانلود صفحه به صورت HtmlDocument



abasfar
یک شنبه 22 اسفند 1389, 12:19 عصر
سلام
کسی سورس بهینه تر از این برای دانلود صفحه به صورت HtmlDocument داره من نمیخوام از webbrowser
استفاده کنم


WebClient myClient = new WebClient();
string webPageString = myClient.DownloadString(url);
HtmlDocument doc = webBrowser1.Document.OpenNew(true);
doc.Write(webPageString);

Hossenbor
یک شنبه 22 اسفند 1389, 16:47 عصر
خوب uri رو چرا با ادرس مقدار دهی نمی کنی

abasfar
یک شنبه 22 اسفند 1389, 23:03 عصر
دوست عزیز دیگه من پیش فرض را گزاشتم هر کس که وارد اینجا میشه معنی url را میدونه
خوب و دیگه لازم نیست من نام یک وب سایت را بنویسم
در ضمن من نوشتم url نه uri
وهمچنین من نگفتم مشکل یا نقص این کد چی که شما به نظر خودتان اشکال در اوردید من گفتم از این کاملتر با سرعت بالا و اشغال حافظه کم کسی سراغ داره بسم الله

amir001
دوشنبه 23 اسفند 1389, 07:18 صبح
خودت سوکت بساز و دیتا بفرست و بخون.

string WebHost = "www.google.com";
string WebPage = "/";

string myHeader = "GET /" + WebPage + " HTTP/1.0\r\n";
myHeader += "Host: " + WebHost + "\r\n";
myHeader += "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6\r\n";
myHeader += "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";
myHeader += "Accept-Language: en-us,en;q=0.5\r\n";
myHeader += "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n";
myHeader += "\r\n";


TcpClient webSocket = new TcpClient(WebHost, 80);
Stream webStream = phpServerSocket.GetStream();

webStream.Write(Header, 0, Header.Length);

بعد از این تیکه هرچی از webStram بخونی دیگه پاسخ سرور به درخواست شماست.
من وقت نکردم برنامه را کامل کنم. میتونی بذاریش توی یک متد و اون نام هاست و صفحه را هم از تجزیه یک URL بدست بیاری. نام هاست نباید با http:// شروع بشه.
بلوک های هندل کردن خطا را هم بهش اضافه کن .

Hossenbor
دوشنبه 23 اسفند 1389, 08:13 صبح
دوست عزیز دیگه من پیش فرض را گزاشتم هر کس که وارد اینجا میشه معنی url را میدونه
خوب و دیگه لازم نیست من نام یک وب سایت را بنویسم
در ضمن من نوشتم url نه uri
وهمچنین من نگفتم مشکل یا نقص این کد چی که شما به نظر خودتان اشکال در اوردید من گفتم از این کاملتر با سرعت بالا و اشغال حافظه کم کسی سراغ داره بسم الله

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

abasfar
دوشنبه 23 اسفند 1389, 10:19 صبح
ممنون از همه شما
اما راستش اون سوکت هم کارم را راه ننداخت چون من میخوام خروجی HtmlDocument باشه برای کار بروی تگ های ان



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

دوست عزیز خواهش میکنم من هم منضور خاصی نداشتم

exlord
دوشنبه 23 اسفند 1389, 11:27 صبح
ممنون از همه شما
اما راستش اون سوکت هم کارم را راه ننداخت چون من میخوام خروجی HtmlDocument باشه برای کار بروی تگ های ان


دوست عزیز خواهش میکنم من هم منضور خاصی نداشتم

به چیه htmldocument نیاز داری ؟ اگه فقط تگ هاشو میخوای خوب xmldocument بردار ...

abasfar
دوشنبه 23 اسفند 1389, 11:46 صبح
نه ممنون نمیشه تو xml به innertText دسترسی داشت چون xml چیزی به این نوع تاجایی که من میدانم نداره ویک کامند داره اونم با اصول خاص خودش پی ریزی شده <!-- -->

exlord
دوشنبه 23 اسفند 1389, 18:16 عصر
نه ممنون نمیشه تو xml به innertText دسترسی داشت چون xml چیزی به این نوع تاجایی که من میدانم نداره ویک کامند داره اونم با اصول خاص خودش پی ریزی شده <!-- -->

حداقل یه سرچی میکردین ...

XmlDocument s = new XmlDocument();
s.LoadXml("string xml");//hamun safheye html ke download karidin ye xml mahsub mishe

XmlNode n = s.DocumentElement; //node asli
XmlNode n1 = n.ChildNodes; // node haye dakheli n
foreach (XmlNode node in n1)
{
string s1 = n1.InnerText;
string s2 = n1.InnerXml;
XmlNodeList s3 = n1.ChildNodes;
}

abasfar
سه شنبه 24 اسفند 1389, 12:05 عصر
دوست عزیز ممنون حالا عصیانی نشو ممنون ازت:خجالت:
اگر منضورت این است

XmlDocument s = new XmlDocument();
s.LoadXml("<html>" +
"<body><h2>some text</h2><h1>more text</h1></body>" +
"</html>");

XmlNode n = s.DocumentElement;

foreach (XmlNode node in n.ChildNodes)
{
txt1.Text = node.InnerText + "\r\n";
txt1.Text += node.InnerXml + "\r\n";
}

که خروجی داره


some textmore text
<h2>some text</h2><h1>more text</h1>

تمام innerText ها رو برمیگردانند پس نمیشود
اما کد شما

XmlDocument s = new XmlDocument();
s.LoadXml("string xml");

XmlNode n = s.DocumentElement;
XmlNode n1 = n.ChildNodes; // error
foreach (XmlNode node in n1)
{
string s1 = n1.InnerText;
string s2 = n1.InnerXml;
XmlNodeList s3 = n1.ChildNodes;
}

تو اون خط اگر اینجوری اجرا کنم خطا میده
وباید ایندکس بزارم که نمیدونم منضور شما باید به کدام خصوصیت دستیابی پیدا کنم
به هر حال ازتون ممنونم
اما xml یک کلاس خوبی داره به نام HtmlAgilityPack که میشه ازش استفاده کرد که من با xml زیاد رابطه ام خوب نیست نمیتونم استفاده کنم