Feed Temper 用法求解

大家好,今天在用drupal进行信息采集的时候遇到了一个重大很难搞得问题,具体如下:

我用Feed相关的模组对目标网页进行抓取,其中在抓取这个URL的时候Xpath规则提取到了正确的内容,但是解析的时候出了问题:

<a href="https://www.zhi12.cn/index.php?item%2F14">Hsu Fu Chi candies</a>这个<a>标签中的"href"属性就是我要提取的内容,我用的Xpath规则书写时这样的:concat('http://classifieds.chineseculture.biz/index.php?item/',substring(td[2]/a/@href,16)),懂XPATH的人一看就知道我写的是什么,开始导入的时候显示内容中采集是正确的:http://classifieds.chineseculture.biz/index.php?item/14,但是在采集完之后,相应的Link解析出来就访问不了了,看了一下链接地址,发现解析完之后是这个:http://classifieds.chineseculture.biz/index.php?item%2F14,就是在Xpath解析的时候出了问题。于是我又查找了相关资料,发现了Feed Temper可以进行相应的解析替换,于是在Temper 中的LinkURL中"ADD"了一个"Plugin"选择了“Find Replace”,在Find Text里面输入了:“http://classifieds.chineseculture.biz/index.php?item%2F”,在Replace Text中输入了“http://classifieds.chineseculture.biz/index.php?item/”,但是还是没起作用。清理缓存也是一样都不起作用,然后我又换了,换成了只替换“%2F”,也不行。所以想问在座的信息采集大神有什么办法可以解决呢?

评论

问题内容的格式建议更新一下,现在这样读起来太费劲,很多人可能不会看完就关掉了,更别说解答了。

并不清楚具体要怎么操作来解决这个问题,以下是两点想法,仅供参考:

  1. 采集时URL的获取尽量采取相对路径转绝对路径的做法,而不是使用 concat() 进行拼接。例如 http://www.example.com/a/b/c?page=1 页面上的相对链接 ../b2/c2,应该通过 URL 和相对路径推导出绝对链接,而不是像文中固定写死。推导的办法可以适用于所有目标页面,而拼接需要基于不同的页面编写独立的规则,实用性和效率差得太多。
  2. 既然已经明确是采集链接中 / 被转换成了 %2F,那么正确处理好这个转换关系问题就能够得以解决。不论是保存入库前,将 %2F 转为 /,还是读取显示时将 %2F 转为 /,都可以实现URL的正确显示。至于是使用 Feed Temper 的替换功能,还是其它的方式,关键是找到对应的切入点。

如果没有时间研究或者不想研究URL中的替换,也可以适当考虑使用一些其它熟悉的办法来爬取URL,然后再将爬取的URL做为种子供Feed来进行采集也是可以的,毕竟办法总比问题多。