0

好的,我得到了这个代码:

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

4 回答 4

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.

于 2010-02-09T13:53:06.893 回答
1

HtmlAgilityPack 只是一个包,可让您操作 html 文件,但是如果您想使用 PhantomJS 进行屏幕抓取 Selenium WebDriver 是更好的解决方案。PhantomJS 是无头 Web 浏览器,因此速度非常快。此外,与 html 敏捷包相比,它具有更好的功能。有一个关于这个主题的短期课程。

于 2015-02-02T21:44:21.710 回答
0

你不应该使用正则表达式来解析 HTML——它们是错误的工具,因为 HTML 对他们来说太复杂了。
您应该使用 HTML 解析器。
另请参阅: 寻找 C# HTML 解析器

于 2010-02-09T13:53:43.663 回答
0

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

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

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

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

于 2010-02-09T13:53:54.223 回答