rss抓取实现相关技巧

好久没写点东西了,有点说不过去了。今天写点前段时间使用rss抓取文章的技术吧,有一些坑,供参考。

使用rss的原因主要是协议统一,各种博客,新闻站点,个人站点的文章内容格式千奇百怪,我无法为它们每个都定制接口进行文章的导入工作,使用rss也就是说这些站点提供统一的接口吐出文章列表,我根据这个接口的格式来抓取文章。

1.simplepie:项目时间有限,所以就没自己写一个rss抓取的工具,当然要写好也还是需要一些时间的。在github上找了半天,最后选择了simplepie,原因是更新比较频繁,最近都还有新的更新,一直都还有人维护。另外功能强大,编码处理啥的,便于应对之后可能遇到的各种新需求。

2.中文编码问题:使用simplepie导入的文章数据会做一个操作,就是将中文字符转成html实体,这样在显示上是没问题的,但是由于是以html实体存储的,导致从文章中抽取摘要信息时,抽取的就是html实体了,在分享到微信,微博的时候就不是中文字符了,所以不能将中文转化成html实体。在google上找了半天,发现是library/Sanitize.php文件中的两行代码的问题,具体说明见http://blog.webfuns.net/archives/1710.html,主要意思就是这两行代码的操作等同于将html代码做了一次重新load,导致中文编码成html实体了,直接注释掉这两句代码就好了。

3.simplepie确实挺好用的,初始化一个对象,设置几个参数,执行初始化函数,就可以获取到文章列表了,代码如下:

    //根据rss源初始化rss对象
    public static function init($rss_url) {
        $feed = new SimplePie();
        $feed->set_feed_url($rss_url);
        $feed->enable_cache(false);
        $feed->init();
        $feed->handle_content_type();
        return $feed->get_items();
    }

4.在获取的文章内容中,根据项目需求做了一些处理,主要抓取分段落的文字内容和图片内容,保存<p><br>标签,另外针对图片需要做特殊处理,保存<img>标签的同时,要通过图片链接地址抓取图片内容并存储。 还需要根据<img>标签进行html的分割处理,这里使用
$content_items = preg_split('/(<img[^>]*>)/i', $content, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
针对除<p><br>以外标签的过滤直接使用
$value = strip_tags($value, "<p><br>");

         差不多就这么多吧,项目中用到的就这么多了,基本上大多数对rss抓取的要求都可以满足了,有问题可以留言哈,看到了一定及时回复。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值