高分求助:有关网页抓取的若干问题
想实现一个分析网页链接的软件,有些问题还没有比较好的办法(笨办法是有,不过效率不高),希望得到大家指点:
(1)一个比较好的正则表达式,本正则表达式匹配的条件可能有如下几种:
相对路径的网址,如: <a href= "../index.html " target= "_parent "> 网站首页 </a> 或
<a href= "bbs/../bbs/board.jsp?boardId=8 " target= "_parent "> 影视歌坛 </a>
或 <a href= "article/articleId3017.html " target= "_blank "> 七个心理寓言 </a>
或带有http开头的网址,如:http://www.netskycn.com/article/articleId2992.html
(2)对于一些相对路径,比如带有一个或多个“../”这样的路径,如果将其转化为正确的、以http开头的URL路径,如将“bbs/../bbs/board.jsp?boardId=8”转化为“http://www.netskycn.com/bbs/board.jsp?boardId=8”。
请大家提供一点比较好的思路,以分酬谢。
------解决方案--------------------ding
学习..
------解决方案--------------------帮你顶一下!!:)
------解决方案--------------------帮顶一下,记得给分
------解决方案--------------------(1)一个比较好的正则表达式,本正则表达式匹配的条件可能有如下几种:
^(href=)(\w)+( )$
------解决方案--------------------(2)对于一些相对路径,
后期再处理。
------解决方案--------------------先提取链接地址,后期再处理链接
string realUrl = " ";
string tmpUrl = site.WebUrl.Trim();
if (href.IndexOf( "http ") <= -1)
{
if (href.StartsWith( "/ "))
{
Regex r = new Regex(@ "^http://(? <d> [^/]+)/ ", RegexOptions.Compiled);
realUrl = "http:// " + r.Match(tmpUrl).Result( "${d} ") + href;
}
else
{
tmpUrl = tmpUrl.Substring(0, tmpUrl.LastIndexOf( '/ '));
realUrl = tmpUrl + "/ " + href;
}
}
else
{
realUrl = href;
}
------解决方案--------------------不要用 + 来连接两个 路径字符串
用Path.Combine( "字符串1 ", "字符串2 ")
比如
Path.Combine(@ "C:\AAA\BBB ", "CCC ") // C:\AAA\BBB\CCC --自动补上一个斜杠
Path.Combine(@ "C:\AAA\BBB\ ",@ "\CCC ") //相同结果,自动去掉一个斜杆
Path.Combine(@ "C:\AAA\BBB ",@ "..\CCC ") //C:\AAA\CCC
Path.Combine( "http://www.wallop.com ", "syeerzy ") // ^_^ 有空来踩踩 ^_^
------解决方案--------------------我觉得在这里的话,在Url中选去你要跳转的网页的时候,一般的都会多“../”程序在运行的时候会报错!这里我一直是手写的,不知道您是怎么一会事!!谢谢 着情 给分吧!!
------解决方案--------------------你需要提取url?
检测href后面网址是否是以http开头,如果是,则直接提取。
如果不是,需要组合。
又有两种情况。
如果网址是以/开头或者./开头,那么和当前地址栏url的根目录组合,所谓根目录就是第一个/和第二个/之间的字符串。
如果是以../开头,检查有几个../,有几个就从后往前开始消除当前地址栏几个/之后的字符,再组合。
当然还有其他一些情况,但是99%都是以上三种。
------解决方案--------------------使用net的话它的类库可以帮你完成.
路径的转化
------解决方案--------------------帮顶一下