2017-04-06 106 views
0

我想获取网页的html。然后用这个html有两个元素,我有我想读的xpath。我对这个主题知之甚少。将网页html下载到html文档

当我搜索时,我不断看到例子,但他们加载的网址,并把HTML的字符串。但是我相信因为我有两个xpath,所以将网页的html作为html文档而不是字符串下载会更好,还是我错了?

using (WebClient client = new WebClient()) { 
    string s = client.DownloadString(url); 
} 

那么如何下载网页的html到我可以搜索的html文档?

+1

的可能的复制[什么是C#来解析HTML的最佳方式?](http://stackoverflow.com/questions/56107/what-is-the-best-way-to- parse-html-in-c) – mason

+0

@mason我应该添加我想这样做,而不使用任何第三方代码。我无法在我的工作场所下载第三方软件 – mHelpMe

+0

您能否提供一些有关XPath查询的信息? – levent

回答

-2

可以使用的StreamWriter来下载的数据写入文件:

string s = string.Empty; 
using(WebClient client = new WebClient()) 
{ 
    string s = client.DownloadString(url); 
} 

using (FileStream fs = new FileStream("test.html", FileMode.Create)) 
{ 
    using (StreamWriter w = new StreamWriter(fs, Encoding.UTF8)) 
    { 
    w.WriteLine(s); 
    } 
    } 
+2

您已经问过如何将html下载到文件中,然后downvoted包含确切信息的答案,即使不使用任何外部库?不是很酷。 –

+0

**将网页的html作为html文档下载会更好** - 他试图说他需要找出如何将html文档解析为可通过xpath搜索的结构化文档。 https://www.w3schools.com/xml/xpath_intro.asp。我同意这个问题很不明确。 –

1

我这是怎么做到这一点。

  1. 所以首先你在字符串变量中定义你的url。
  2. 然后你下载字符串HttpWebRequest类。
  3. 我使用HtmlAgilityPack,所以你应该把它包含在你的项目中(例如使用Nugger)。
  4. 创建对象HtmlDocument,并将数据加载到此对象。
  5. 现在您可以浏览您的HtmlDocument

    string urlAddress = "url.com"; 
    
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlAddress); 
    HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
    string data = ""; 
    if (response.StatusCode == HttpStatusCode.OK) 
    { 
    Stream receiveStream = response.GetResponseStream(); 
    StreamReader readStream = null; 
    
    if (response.CharacterSet == null) 
    { 
        readStream = new StreamReader(receiveStream); 
    } 
    else 
    { 
        readStream = new StreamReader(receiveStream, Encoding.GetEncoding(response.CharacterSet)); 
    } 
    
    data = readStream.ReadToEnd(); 
    
    
    response.Close(); 
    readStream.Close(); 
    } 
    
    HtmlDocument document2 = new HtmlAgilityPack.HtmlDocument(); 
    document2.LoadHtml(data);