到目前为止,尝试从网页中抓取文本的结果很少。我正在尝试使用HtmlAgility。
网页上的来源如下
<div class="state info">
<h4 class="member-states parse"><span class="trim">Nebraska NE</span></h3>
我只想检索文本“Nebraska NE”并将其他所有内容从网页中删除。有一个简单的方法可以解决这个问题吗?
答案 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
如果您正在寻找任何其他网络抓取方式,那么这只是我的建议。