使用html敏捷性从网页解析文本

时间:2013-12-01 12:59:42

标签: c# screen-scraping

到目前为止,尝试从网页中抓取文本的结果很少。我正在尝试使用HtmlAgility。

网页上的来源如下

<div class="state info">
        <h4 class="member-states parse"><span class="trim">Nebraska NE</span></h3>

我只想检索文本“Nebraska NE”并将其他所有内容从网页中删除。有一个简单的方法可以解决这个问题吗?

3 个答案:

答案 0 :(得分:1)

这里有一个关于如何获得此

的示例
  HtmlWeb htmlWeb = new HtmlWeb();
  MemoryStream ms = new MemoryStream();
        XmlTextWriter xmlTxtWriter = new XmlTextWriter(ms, Encoding.ASCII);            
       htmlWeb.LoadHtmlAsXml(uriofhtmlPageToload, xmlTxtWriter);
        ms.Position = 0;
        XDocument xdoc = XDocument.Load(ms);
        XElement xHtml = xdoc.Root;
        string nameSpace = "{" + xdoc.Root.GetDefaultNamespace().ToString() + "}";
        XElement xBody = xHtml.Element(nameSpace + "body");
        List<XElement> xBodyElts = xBody.Descendants().ToList();
        string elt = string.Empty;
        foreach (var eltPage in xBodyElts)
        {
            if (eltPage.Name == nameSpace + "div")
            {
                if (eltPage.Attribute("class") != null && eltPage.Attribute("class").Value == "page")
                {

                    foreach (XElement eltBlockh4 in eltPage.Descendants(nameSpace + "h4"))
                    {
                        foreach (XElement eltBlockspan in eltBlockh4.Descendants(nameSpace + "span"))
                        {
                            if (eltBlockspan.Attribute("class") != null && eltBlockspan.Attribute("class").Value == "trim")
                            {
                                elt = eltBlockspan.Value;
                            }
                        }
                    }
                }
            }
        }

答案 1 :(得分:1)

你可以这样做:

HtmlDocument doc = new HtmlDocument();
 doc.Load("path/to/html");
 //select each span which class contains 'trim'
 foreach(HtmlNode span in doc.DocumentElement.SelectNodes("//span[contains(@class,'trim')]")
 {
    //add the Text by assigning it using 'span.InnerText'
 }

如果此文本只出现一次,您可以简单地将其分配给字符串,如果它出现的次数多一次,则将其存储在像List<string>

这样的集合中

答案 2 :(得分:1)

使用美丽的汤,很容易遍历代码。

这是一个简单的代码

from bs4 import BeautifulSoup
soup = BeautifulSoup('<div class="state info"> <h4 class="member-states parse"><span class="trim">Nebraska NE</span></h3>')
print soup.text

打印

 Nebraska NE

如果您正在寻找任何其他网络抓取方式,那么这只是我的建议。