2010-12-22 9 views
61

मैं ASP.NET का उपयोग कर वेब पेज की सामग्री कैसे प्राप्त कर सकता हूं? मुझे वेबपृष्ठ के एचटीएमएल प्राप्त करने के लिए एक प्रोग्राम लिखना होगा और इसे एक स्ट्रिंग वैरिएबल में स्टोर करना होगा।मैं वेब पेज की सामग्री कैसे प्राप्त कर सकता हूं और इसे स्ट्रिंग वेरिएबल में सहेज सकता हूं

उत्तर

94

आप WebClient

WebClient client = new WebClient(); 
string downloadString = client.DownloadString("http://www.gooogle.com"); 
+0

दुर्भाग्य DownloadString (.NET 3.5) के रूप में बहुत चालाक BOMs के साथ काम करने के लिए नहीं है। मैंने अपने जवाब में एक विकल्प शामिल किया है। – user2246674

+12

कोई भी वोट नहीं (क्योंकि वेब क्लाइंट क्लाइंट = नया वेब क्लाइंट()) {} :) –

+2

यह स्टीवन स्पीलबर्ग के उत्तर के बराबर है, 3 मिनट पहले पोस्ट किया गया था, इसलिए कोई +1 नहीं। – BalinKingOfMoria

7
Webclient client = new Webclient(); 
string content = client.DownloadString(url); 

उस पृष्ठ का URL पास करें जिसे आप प्राप्त करना चाहते हैं। आप htmlagilitypack का उपयोग कर परिणाम पार्स कर सकते हैं।

62

मैंने पहले Webclient.Downloadstring में समस्याएं आती हैं का उपयोग कर सकता। WebClient.DownloadString का उपयोग कर

WebRequest request = WebRequest.Create("http://www.google.com"); 
WebResponse response = request.GetResponse(); 
Stream data = response.GetResponseStream(); 
string html = String.Empty; 
using (StreamReader sr = new StreamReader(data)) 
{ 
    html = sr.ReadToEnd(); 
} 
+5

क्या आप अपनी समस्या पर विस्तार कर सकते हैं? – Greg

+15

@ ग्रेग, यह एक प्रदर्शन से संबंधित मुद्दा था। मैंने इसे वास्तव में कभी हल नहीं किया है, लेकिन WebClient.DownloadString को HTML को खींचने में 5-10 सेकंड लगेंगे, जहां WebRequest/WebResponse लगभग तत्काल था। यदि ओपी के पास समान समस्याएं थीं या अनुरोध/प्रतिक्रिया पर थोड़ा अधिक नियंत्रण चाहते थे तो बस एक और वैकल्पिक समाधान प्रस्तावित करना चाहता था। – Scott

+6

@ स्कॉट - इसे ढूंढने के लिए +1। बस कुछ परीक्षण चलाएं। डाउनलोडस्ट्रिंग ने पहले उपयोग (52 99एमएस डाउनलोडस्ट्रिंग बनाम 200 एमएमएस वेबआरक्वेट) पर अधिक समय लगाया। कैशिंग से बचने के लिए विभिन्न यूआरएल का उपयोग करके, 50 एक्स बीबीसी, 50 एक्स सीएनएन और 50 एक्स पर एक लूप में इसका परीक्षण किया गया। शुरुआती लोड के बाद, डाउनलोडस्ट्रिंग बीबीसी के लिए 20 एमएमएस तेज, सीएनएन पर 300 एमएस तेज हो गया। अन्य आरएसएस फ़ीड के लिए, WebRequest 3ms तेज था। आम तौर पर, मुझे लगता है कि मैं URL के माध्यम से लूपिंग के लिए एकल और डाउनलोडस्ट्रिंग के लिए WebRequest का उपयोग करूंगा। – HockeyJ

19

मेरा सुझाव है नहीं: यदि आप करते हैं, तो आप इस कोशिश कर सकते हैं। ऐसा इसलिए है क्योंकि (कम से कम .NET 3.5 में) डाउनलोडस्ट्रिंग बीओएम का उपयोग/निकालने के लिए पर्याप्त स्मार्ट नहीं है, यह उपस्थित होना चाहिए। इसके परिणामस्वरूप बीओएम () यूटीएफ -8 डेटा लौटाए जाने पर स्ट्रिंग के हिस्से के रूप में गलत रूप से दिखाई दे रहा है (कम से कम एक वर्णमाला के बिना) - ick!

इसके बजाय, इस मामूली बदलाव BOMs साथ सही ढंग से काम करेगा:

string ReadTextFromUrl(string url) { 
    // WebClient is still convenient 
    // Assume UTF8, but detect BOM - could also honor response charset I suppose 
    using (var client = new WebClient()) 
    using (var stream = client.OpenRead(url)) 
    using (var textReader = new StreamReader(stream, Encoding.UTF8, true)) { 
     return textReader.ReadToEnd(); 
    } 
} 
संबंधित मुद्दे

 संबंधित मुद्दे