前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >php采集之效率最高的方法

php采集之效率最高的方法

作者头像
MoLeft
发布2022-08-30 11:31:32
7680
发布2022-08-30 11:31:32
举报
文章被收录于专栏:用砖头敲代码用砖头敲代码

前言

想要让网站稳定发展,优质的文章是必不可少的,那我们没有好文章怎么办,我们可以Ctrl+C来借(ban)鉴(zhuan)文章,但是这效率还是不够快,这时候我们就需要来采集文章了,下面给大家介绍一下我的思路。

思路

首先,一般的网站都会有Feed Rss地址,这是一个xml文件,功能我个人感觉和sitemap差不多,但是多了文章的链接的标题,所以说我们可以利用解析rss来达到我们实现采集文章的目的。

第一版代码

这里我们推荐使用simplexml来解析xml,别问我为什么,因为我用别的代码都失败了,下面这个代码我们采集成功了。但是file_get_contents这个函数是不支持https的,所以说我们只能开启OpenSSL拓展或者换用curl函数

代码语言:javascript
复制
$result = file_get_contents("http://www.moleft.cn/feed/");
$rss = simplexml_load_string($result);
$int = 0;
foreach ($rss->channel->item as $v) {
    $json[$int]['title']   = json_decode(json_encode($v->title), true)[0];
    $json[$int]['content'] = base64_encode($v->children('content', true)->encoded);
    $int++;
}
exit(json_encode($json));

第二版代码

以为我要换curl函数了?怎么可能,我就是改拓展累死,安装拓展麻烦死,卸载php,也不会用curl函数的。解决https的问题很简单,只要关掉https校验就可以了,于是拿某布好的博客做一下小白鼠。

代码语言:javascript
复制
<?php
$config = [
    "ssl" => [
        "verify_peer"      => false,
        "verify_peer_name" => false,
    ],
];
$result = file_get_contents("https://dwd.moe/feed/",false,stream_context_create($config));
$rss    = simplexml_load_string($result);
$int    = 0;
foreach ($rss->channel->item as $v) {
    $json[$int]['title']   = json_decode(json_encode($v->title), true)[0];
    $json[$int]['content'] = base64_encode($v->children('content', true)->encoded);
    $int++;
}
exit(json_encode($json));

结果还是失败,所以说我又去开启了OpenSSL拓展,然后用第一版代码,不加stream_context_create($config)也成功采集到了,开心的我屁颠颠的去拿某aide教程网试水,结果报错。显示状态码是403,我用接口调试的结果是200,右键查看源码也是可以获取到的,太坑了不用了,换curl去了。

不知名的网友 :说好的卸载php也不用呢 MoLeft :大家不要理他,他是杠精 不知名的网友 :......

第三版代码

换用了curl之后管他typecho还是WordPress,统统拿下。然后我说明一点,很多人好奇我为什么要把文章内容base64加密,因为这个文章内容含有html代码放在json里面会有可怕的现象发生。废话不多说上代码,curl函数别的文章里面有,我就不贴了

代码语言:javascript
复制
$result = get_curl("http://www.moleft.cn/feed/");
$rss    = simplexml_load_string($result);
$int    = 0;
foreach ($rss->channel->item as $v) {
    $json[$int]['title']   = json_decode(json_encode($v->title), true)[0];
    $json[$int]['content'] = base64_encode($v->children('content', true)->encoded);
    $int++;
}
exit(json_encode($json));

结尾

用这个代码,就可以把rss订阅转化成json的形式,方便入库,我只获取了tilte和content两个字段,别的字段可以根据自己的需要来添加。 欧耶~又水了一篇文章

如无特殊说明《php采集之效率最高的方法》为博主MoLeft原创,转载请注明原文链接为:https://moleft.cn/post-24.html

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 思路
  • 第一版代码
  • 第二版代码
    • 第三版代码
      • 结尾
      相关产品与服务
      命令行工具
      腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档