ScrapySharp + HtmlAgilityPack
这两个库基本可以完成98%的采集需求,剩下的2%可以再加一个库: phantomjs
目前接到的需求中,还没有使用到 phantomjs这个库。
补充(2015-3-9):
今天又发现了几个和采集网页相关的库(以下4个都没用过,先记下来)
- CsQuery。CsQuery可以算是.net中实现的Jquery, 可以使用类似Jquery中的方法来处理html页面。CsQuery的项目地址是https://github.com/afeiship/CsQuery
- AngleSharp (据说有内存泄漏,不知道现在还有没有)
- fizzler fizzler是HtmlAgilityPack的一个扩展,支持jQuery Selector
- NSoup NSoup是JSoup的Net移植版本。
ScrapySharp + HtmlAgilityPack 基本用法举例:
string htmlstr = HttpHelper.HttpPost(“http://www.tzgsj.gov.cn/baweb/show/shiju/queryByName.jsp” , “spellcondition=%E9%BE%99” );
HtmlDocument doc = new HtmlDocument ();
doc.LoadHtml(htmlstr);
HtmlNode docNode = doc.DocumentNode;
var nodes = docNode.CssSelect(“#content” );
这样就拿到了所有ID为content的DOM元素。
这段HTML如下:
为了进一步拿到里面的td的文字,可以接着这样写:
foreach(var node in nodes)
{
var tdNodes = node.CssSelect( "td");
foreach(var td in tdNodes)
{
string text = td.InnerText;
}
}
经过这个双重循环后,所有的td里的内容就都被采集出来了。
总结,ScrapySharp 主要是这个CssSelect好用。它是HtmlAgilityPack的一个扩展