如何从网页提取信息?
我想从网站的首页收集一些数据。我可以轻松地遍历每一行,并且它只是我感兴趣的一个特定的一行。因此,我想确定正确的行并提取数字,在此情况下为324.我该怎么做?如何从网页提取信息?
<h2><a href="/mmp/it/su/">Weather</a></h2> <span class="jix_channels_count">(324)</span><br><p class="jix_channels_desc">Progør, su, siør, tester</p>
下载内容后,使用HTML解析器如HTML Agility Pack识别span
元件属于jix_channels_count
类。
另一种选择是SgmlReader。
您与regex
标记你的问题 - 我衷心建议你不采取这个方向发展。
建议的方法(与SgmlReader)变为或多或少像这样:
var url = "www.that-website.com/foo/";
var myRequest = (HttpWebRequest)WebRequest.Create(url);
myRequest.Method = "GET";
WebResponse myResponse = myRequest.GetResponse();
var responseStream = myResponse.GetResponseStream();
var sr = new StreamReader(responseStream, Encoding.Default);
var reader = new SgmlReader
{
DocType = "HTML",
WhitespaceHandling = WhitespaceHandling.None,
CaseFolding = CaseFolding.ToLower,
InputStream = sr
};
var xmlDoc = new XmlDocument();
xmlDoc.Load(reader);
var nodeReader = new XmlNodeReader(xmlDoc);
XElement xml = XElement.Load(nodeReader);
现在你可以使用LINQ到XML到(递归或其他方式)与属性class
,其值等于找到span
元素jix_channels_count
并读取该元素的值。
用正则表达式解析html页面是错误的。如果你知道单行html的确切结构,你可以使用正则表达式,而不必将行看作html代码。
假设的数量始终是括号,并与jix_channels_count类跨度内:
Match match = Regex.Match(htmlLine, @"(\<span[^>]*class=""jix_channels_count[^>]*\>\()([^)]+)(\))", RegexOptions.IgnoreCase);
if (match.Success)
{
string number = match.Groups[2].Value;
}
也被称为“HTML解析克苏鲁方式“;) – 2012-08-08 07:40:25
哈哈对。仍然请注意,您不是将页面解析为HTML,这是错误的。你只是知道它的结构解析一行html代码。 – 2012-08-08 08:24:09
关于正则表达式,我问这个问题,希望会有更好的办法:-) – 2012-08-08 07:27:47