Chinaunix

标题: [文章采集] 请问如何补全url? [打印本页]

作者: diychen    时间: 2005-08-25 17:00
标题: [文章采集] 请问如何补全url?
请问一下我在做采集的时候有些图片或者文章地址是相对路径,怎么办呢?

当然,我可以取新闻列表页URL加相对地址..
但是更多时候比如:
新闻列表页URL为:http://www.aaa.com/aaa/bb/news.html
然后图片相对地址为
../../images/tt.jpg

这时候我该怎么办呢?

而且更多的时候可能情况更复杂,不知道大家在遇到这样的问题的时候有什么好的解决方法?
作者: peng1000cn    时间: 2005-08-25 18:43
标题: [文章采集] 请问如何补全url?
这个问题好,,顶。。

关系到页面里的地址如何处理。。
作者: HonestQiao    时间: 2005-08-25 19:54
标题: [文章采集] 请问如何补全url?
原帖由 "diychen" 发表:
请问一下我在做采集的时候有些图片或者文章地址是相对路径,怎么办呢?

当然,我可以取新闻列表页URL加相对地址..
但是更多时候比如:
新闻列表页URL为:http://www.aaa.com/aaa/bb/news.html
然后图片相对地址为
..........


更多得时候,难道相对路径就不起作用了?
还是可以再基础路径上多次../../../../的。
作者: hightman    时间: 2005-08-25 21:54
标题: [文章采集] 请问如何补全url?
版主, LZ的意思应该是把页面抓下来以后, 碰到图片无法显示时想寻找解决办法.

这个我觉得可以在读取网页内容时用正则表达式进行匹配判断,然后替换...
作者: lnux    时间: 2005-08-26 09:01
标题: [文章采集] 请问如何补全url?
这个问题不好办,我以前用 outlook 发送网页时,发现网页中的图片是相对路径的,就无法显示。
作者: HonestQiao    时间: 2005-08-26 09:27
标题: [文章采集] 请问如何补全url?

  1. $strBaseUrl = "[当前页面的网页地址的路径部分(去掉最后的文件名成)]";
  2. $strDist = preg_replace('/([src|href])=([\'"])(?!http:\/\/)(.+?)(.+?)([\'"])/', '$1=$2'.$strBaseUrl.'$3$4', $strSource);
复制代码


以上针对:
src='xxxxx'
src="xxxxx"
href='xxxxx'
href="xxxxx"
且其中的网址,不以http://开头
作者: HonestQiao    时间: 2005-08-26 09:34
标题: [文章采集] 请问如何补全url?

  1. <?php
  2. $strSource = "src='../../../images/test.gif'";
  3. $strBaseUrl = "http://www.test.com/";
  4. $strDist = preg_replace('/([src|href])=([\'"])(?!http:\/\/)(.+?)(.+?)([\'"])/', '$1=$2'.$strBaseUrl.'$3$4', $strSource);
  5. echo $strDist;

  6. print "\n";

  7. $strSource = "src='http://www.test.com/images/test.gif'";
  8. $strBaseUrl = "http://www.test.com/";
  9. $strDist = preg_replace('/([src|href])=([\'"])(?!http:\/\/)(.+?)(.+?)([\'"])/', '$1=$2'.$strBaseUrl.'$3$4', $strSource);
  10. echo $strDist;
  11. ?>;
复制代码

----------php Complier ----------
Content-type: text/html
X-Powered-By: PHP/4.4.0

src='http://www.test.com/../../../images/test.gif
src='http://www.test.com/images/test.gif'
输出完成 (耗时 0 秒) - 正常终止

作者: powerpolly    时间: 2005-08-26 09:50
标题: [文章采集] 请问如何补全url?
相对路径有什么关系,比如现在http://www.a.com/b/c/index.html文件中有图片链接为<img src="../../imgs/a.gif">;,你要取图片是吗,你可能想方设法用绝对路径来表示:http://www.a.com/imgs/a.gif,其实可以直接在后面加,http://www.a.com/b/c/../../imgs/a.gif。这样有什么问题吗?
作者: hightman    时间: 2005-08-26 12:44
标题: [文章采集] 请问如何补全url?
还个应该试试用preg_replace 里 /x 修正符, 针对 ".../.../" 和当前的 URL 判断层次数, 然后再返回应有的URL
作者: YourEyes    时间: 2005-09-11 22:29
标题: [文章采集] 请问如何补全url?
版主:
如果它没有引号如何处理?

如:
<img src=a.gif>;
作者: HonestQiao    时间: 2005-09-12 08:57
标题: [文章采集] 请问如何补全url?
/<img src=(.+?)>;/i
作者: YourEyes    时间: 2005-09-12 09:58
标题: [文章采集] 请问如何补全url?
[quote]原帖由 "HonestQiao"]/<img src=(.+?)>;/i[/quote 发表:
我是指用一个正则取出三种情况的:单引号、双引号、无引号

正则没过关,在一段字符中要不包含某些字符怎么弄?
(?!http:\/\/)

这里的?是什么意思?
作者: HonestQiao    时间: 2005-09-12 11:47
标题: [文章采集] 请问如何补全url?
原帖由 "YourEyes" 发表:
沂侵赣靡桓稣?蛉〕鋈?智榭龅模旱ヒ?拧⑺??拧⑽抟??

正则没过关,在一段字符中要不包含某些字符怎么弄?
(?!http:\/\/)

这里的?是什么意思?


(?!http:\/\/)表示后面没有http://,不好细说,你要自己看资料体会。

你分三次来过滤不久可以了啊。
作者: YourEyes    时间: 2005-09-12 20:07
标题: [文章采集] 请问如何补全url?
嘿嘿
几次跟一次的效率哪个高?
如:
一个复杂的正则
三个简单的正则
作者: zairwolf    时间: 2006-04-11 20:05
一个实现的难度高。
作者: zairwolf    时间: 2006-04-11 20:09
乔版主,你的正则里面为什么要用.+?呢?直接用.+不就可以匹配了吗?




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2