C# 如何从网页中提取信息?

C# 如何从网页中提取信息?,c#,html,regex,C#,Html,Regex,我想从一个网站的首页收集一些数据。我可以很容易地浏览每一行,它只是我感兴趣的一个特定行。所以我想识别正确的行并提取数字,在本例中是324。我该怎么做 <h2><a href="/mmp/it/su/">Weather</a></h2> <span class="jix_channels_count">(324)</span><br><p class="jix_channels_desc">Prog&a

我想从一个网站的首页收集一些数据。我可以很容易地浏览每一行,它只是我感兴趣的一个特定行。所以我想识别正确的行并提取数字,在本例中是324。我该怎么做

<h2><a href="/mmp/it/su/">Weather</a></h2> <span class="jix_channels_count">(324)</span><br><p class="jix_channels_desc">Prog&oslash;r, su, si&oslash;r, tester</p>
(324)

Progø;r、 苏、思和奥斯拉什;r、 测试员


下载内容后,使用HTML解析器(如)识别属于
jix\u channels\u count
类的
span
元素

另一个选择是

你用
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(递归或其他方式)查找属性为
class
span
元素,其值等于
jix\u channels\u count
,并读取该元素的值。

下载内容后,使用HTML解析器,例如识别属于
jix\u channels\u count
类的
span
元素

另一个选择是

你用
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(递归或其他方式)查找属性为
class
span
元素,该属性的值等于
jix\u channels\u count
,并读取该元素的值。

使用正则表达式解析html页面是错误的。但是,如果您知道单个html行的确切结构,则可以使用正则表达式,而不必将该行视为html代码

假设数字始终在括号内,且跨度为jix_通道数级:

Match match = Regex.Match(htmlLine, @"(\<span[^>]*class=""jix_channels_count[^>]*\>\()([^)]+)(\))", RegexOptions.IgnoreCase);
if (match.Success)
{
    string number = match.Groups[2].Value;
}
Match Match=Regex.Match(htmlLine,@“(\]*class=”“jix\u channels\u count[^>]*\>\()([^)]+)(\)”,RegexOptions.IgnoreCase);
如果(匹配成功)
{
字符串编号=匹配。组[2]。值;
}

用正则表达式解析html页面是错误的。但是,如果您知道单个html行的确切结构,则可以使用正则表达式,而不必将该行视为html代码

假设数字始终在括号内,且跨度为jix_通道数级:

Match match = Regex.Match(htmlLine, @"(\<span[^>]*class=""jix_channels_count[^>]*\>\()([^)]+)(\))", RegexOptions.IgnoreCase);
if (match.Success)
{
    string number = match.Groups[2].Value;
}
Match Match=Regex.Match(htmlLine,@“(\]*class=”“jix\u channels\u count[^>]*\>\()([^)]+)(\)”,RegexOptions.IgnoreCase);
如果(匹配成功)
{
字符串编号=匹配。组[2]。值;
}

关于regex,我问了这个问题,希望有更好的方法:-)关于regex,我问了这个问题,希望有更好的方法:-)也称为“解析HTML的Cthulhu方法”;)哈哈对。但是请注意,这里没有将html解析为页面,这是错误的。您只是在解析一行html代码,了解其结构。也称为“解析html的Cthulhu方式”;)哈哈对。但是请注意,这里没有将html解析为页面,这是错误的。您只是在解析一行html代码,了解其结构。