2014-02-14 59 views
0

雖然仍處於延展狀態,此代碼的工作:使用HtmlAgilityPack進行屏幕刮取時,可以同時搜索多種標籤類型嗎?

public List<string> GetParagraphsListFromHtml(string sourceHtml) 
{ 
    var pars = new List<string>(); 
    HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); 
    doc.LoadHtml(sourceHtml); 

    var getHtmlWeb = new HtmlWeb(); 
    var document = getHtmlWeb.Load("http://www.montereycountyweekly.com/opinion/letters/article_e333a222-942d-11e3-ba9c-001a4bcf6878.html"); 
    var pTags = document.DocumentNode.SelectNodes("//p"); 
    int counter = 1; 
    if (pTags != null) 
    { 
     foreach (var pTag in pTags) 
     { 
      pars.Add(pTag.InnerText); 
      MessageBox.Show(pTag.InnerText); 
      counter++; 
     } 
    } 
    MessageBox.Show("done!"); 
    return pars; 
} 

我真正想要的,不過,就是抓住所有文本元素(按順序),而不是段落標記(「的SelectNodes(」 // p 「))

是否有可能同時得到多個標籤類型,一拉像(僞):

var textTags = document.DocumentNode.SelectNodes("//h1", "//h2", "//h3", "//p",); 

...或LINQified版本,如:

foreach (var par in doc.DocumentNode 
     .DescendantNodes() 
     .Single(x => x.Id == "body") 
     .DescendantNodes() 
     .Where(x => x.Name == "h1" || x.Name == "h2" || x.Name == "h3" || x.Name == "hp" ||)) 

回答

1

我認爲這可能爲你工作:

doc.DocumentNode.ChildNodes.Where(x => (x.NodeType == HtmlNodeType.Text)); 

這將抓住所有的文本元素。

+0

不幸的是,在上面顯示的示例頁面中,消息框幾次顯示空字符串(無),就這些了。 –

相關問題