好的,我有这个代码:
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” 除了使用正则表达式之外还有其他选择吗?或者这是唯一的方法吗?
感谢
答案 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查询和检索所需的节点。
您不想做的是实现自己的解析器。