php采集之效率最高的方法

2022-08-30 11:31:32 浏览数 (1)

前言

想要让网站稳定发展,优质的文章是必不可少的,那我们没有好文章怎么办,我们可以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

0 人点赞