接到一个需求,要抓取论坛的所有板块 title 和 url,主要是三种,discuz,phpwind和动网的.
http://www.discuz.net/比如这个网页,需要抓取"Comsenz团队日志"+url
"建站交流" + url
"中国站长俱乐部" +url类似 这个等级的板块.希望大家可以给点思路或者演示代码(如果有最好啦,呵呵)目前我使用的是正则表达式 方法,但是 这种方法效果不是很理想,例如虽然都是discuz核心,但是其中的模版之类的差距,使得正则用起来和棘手.论坛的类型都一样,假设全部都是discuz,但是有 一百个站,使用的模版,discuz的版本好也有可能不同.不知道使用DOM树的方式是否可以,求指导.思路僵化,希望各路神仙搭救小弟一把.谢谢各位大神.
http://www.discuz.net/比如这个网页,需要抓取"Comsenz团队日志"+url
"建站交流" + url
"中国站长俱乐部" +url类似 这个等级的板块.希望大家可以给点思路或者演示代码(如果有最好啦,呵呵)目前我使用的是正则表达式 方法,但是 这种方法效果不是很理想,例如虽然都是discuz核心,但是其中的模版之类的差距,使得正则用起来和棘手.论坛的类型都一样,假设全部都是discuz,但是有 一百个站,使用的模版,discuz的版本好也有可能不同.不知道使用DOM树的方式是否可以,求指导.思路僵化,希望各路神仙搭救小弟一把.谢谢各位大神.
XML节点的话是可以取到的。
wb1.Document.InvokeScript("scriptFunc", new String[] { "alert('good');" });
或者直接对每种不同的html做一个正则也是可行的如果网站太多的话,用HtmlAgilityPack的话只能分析他们的共同点了,比如他们都会长成什么样子,InnerText都是什么样的等等
HttpWebRequest httpWebRequest = WebRequest.Create(@"http://www.cnblogs.com") as HttpWebRequest;
HttpWebResponse httpWebResponse = httpWebRequest.GetResponse() as HttpWebResponse;
Stream stream = httpWebResponse.GetResponseStream();
StreamReader reader = new StreamReader(stream, Encoding.UTF8);
string s = reader.ReadToEnd();
reader.Close();
stream.Close();
httpWebResponse.Close();
HtmlDocument htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(s);
HtmlNodeCollection anchors = htmlDoc.DocumentNode.SelectNodes(@"//a[@class='titlelnk']");
foreach (HtmlNode anchor in anchors)
Response.Write(anchor.InnerHtml + "<br/>");
Response.End();
XPath语法参考:http://www.w3school.com.cn/xpath/xpath_syntax.asp
正则和xpath都是有针对性的东西,做模版不太灵活
我也是做抓取的,对这种需要也感到无语!