日期:2014-05-20  浏览次数:20708 次

高分求助:有关网页抓取的若干问题
想实现一个分析网页链接的软件,有些问题还没有比较好的办法(笨办法是有,不过效率不高),希望得到大家指点:
(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的话它的类库可以帮你完成.

路径的转化
------解决方案--------------------
帮顶一下