使用c#获取html标签

时间:2010-02-09 13:50:24

标签: c# web-scraping

好的,我有这个代码:

public static string ScreenScrape(string url)
    {
        System.Net.WebRequest request = System.Net.WebRequest.Create(url);
        // set properties of the request
        using (System.Net.WebResponse response = request.GetResponse())
        {
            using (System.IO.StreamReader reader = new System.IO.StreamReader(response.GetResponseStream()))
            {
                return reader.ReadToEnd();
            }
        }
    }

现在我想过滤文本以获得div class =“comment” 除了使用正则表达式之外还有其他选择吗?或者这是唯一的方法吗?

感谢

4 个答案:

答案 0 :(得分:10)

您需要使用HTML Agility Pack

例如:

var doc = new HtmlWeb().Load(url);
var comments = doc.Descendants("div")
                  .Where(div => div.GetAttributeValue("class", "") == "comment");

请注意,这不会找到<div class="OtherClass comment">;如果您正在寻找,可以致电IndexOf

答案 1 :(得分:1)

HtmlAgilityPack只是一个包,可以让你操作html文件,但是如果你想用屏幕抓取Selenium WebDriver和PhantomJS是更好的解决方案。 PhantomJS是无头网络浏览器,因此非常快。此外,与html敏捷包相比,它具有更好的功能。这个主题有一个简短的course

答案 2 :(得分:0)

你不应该使用正则表达式来解析HTML - 它们是错误的工作工具,因为HTML对它们来说太复杂了。
您应该使用HTML解析器 也可以看看: Looking for C# HTML parser

答案 3 :(得分:0)

您的第一个停靠点应该是HTML Agility Pack

正则表达式是解析非.NET语言的这种输入的经典方法。

另外,如果您可以将其规范化为XML变体(即XHTML),则可以使用XPATH查询和检索所需的节点。

您不想做的是实现自己的解析器。