我想从网站的首页收集一些数据。我可以轻松地遍历每一行,它只是我感兴趣的一个特定行。所以我想识别正确的行并提取数字,在本例中为 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 to XML(递归或以其他方式)查找具有值等于span
的属性的元素并读取该元素的值。class
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;
}