教程:RSS全文输出,自己动手做。(一)
这里以PHP版为例,尽量说得通俗点吧,水平实在有限,见谅。
目前我这里所有的获取全文输出的网站大概是三种情况:
- 要输出的内容集中在一页上,也就是看似列表页的页面里集中了你想要的所有内容,并不需要点击“更多”或“继续阅读”才能看到文章整体。比如糗事百科、wiki。
- 有列表页,要查看相应文章必须点击链接进入。
- json方式写入。特征就是查看源文件并不能找到你在浏览器中看到的内容。比如腾讯新闻图片(链接),它的真正内容在这(链接)。
第一种最省事,第二种最常见,第三种稍麻烦。
今天先讲第二种。
以国家地理中文网宇宙空间为例(链接),先看代码:(把下列源码存为space.php)
- <?php
- include "gethtml.php";
- $regex_link = '/(?<=<dt><a href=").+?(?=")/s';
- $regex_tit = '/(?<=<title>)(.+?)(?= -)/s';
- $regex_con = '/<div id="detailMain_box_img".*?(?=<div class="M-L-article-last-p" >)/s';
- $header='<?xml version="1.0" encoding="utf-8"?><rss version="2.0"><channel><title>国家地理中文网宇宙空间</title>';
- $footer='</channel></rss>';
- $html=gethtml('http://www.nationalgeographic.com.cn/science/space/');
- if(preg_match_all($regex_link, $html, $links)){
- $size=count($links[0]);
- for($i=0;$i<$size;$i++){
- $link=preg_replace('/(.+)/','http://www.nationalgeographic.com.cn$1',$links[0][$i]);
- $content=gethtml($link);
- preg_match($regex_con,$content,$article);
- preg_match($regex_tit,$content,$title);
- $rss.='<item><title>'.$title[0].'</title><link><![CDATA['.$link.']]></link><description><![CDATA['.$article[0].']]></description></item>';
- }
- file_put_contents('space.xml',$header.$rss.$footer);
- }
- ?>
重点是第8行往后。只解释我认为重要的,不明白的可以讨论。
第2行,引入gethtml方法,来自下面的代码。
看一下第8行gethtml(‘http://www.nationalgeographic.com.cn/science/space/’)得到了什么(链接),虽然有点乱,但是目的达到了,http://www.nationalgeographic.com.cn/science/space/ 我已经抓到本地服务器上。
第9行是要挑出需要的链接 $links(链接)
第13行利用这些链接继续抓取页面 $content=gethtml($link)
第14、15行从$content里查找需要的$title(文章标题)和$article(文章内容)
后面就是按RSS要求的格式输出,并最终生成xml文件。
上面我说的查找、挑出都是用正则来实现的,此外最好对html特别熟悉,操作起来才能得心应手。
=================================================
下面是在别人的基础上自己总结的利用curl抓取页面的方法,把下面源码存为gethtml.php,我所有的抓取都是用的这个方法,当然,省事的话可以用 file_get_contents,那就是真正的20行代码完成全文RSS输出了,不过可选的参数就没有了,有的页面会抓取不到。
- <?php
- error_reporting(E_ERROR);
- function gethtml($url,$json){
- $args = json_decode($json,true);
- $useragent = $args["useragent"]?$args["useragent"]:'Mozilla/5.0';
- $timeout = $args["timeout"]?$args["timeout"]:9000;
- $ch = curl_init();
- $options = array(
- CURLOPT_URL => $url,
- CURLOPT_USERAGENT => $useragent,
- CURLOPT_TIMEOUT_MS => $timeout,
- CURLOPT_NOSIGNAL => 1,
- CURLOPT_HEADER => 0,
- CURLOPT_RETURNTRANSFER => 1,
- CURLOPT_FOLLOWLOCATION => 1
- );
- if($args["ip"]){
- $options[CURLOPT_HTTPHEADER] = array('CLIENT-IP:'.$args["ip"],'X-FORWARDED-FOR:'.$args["ip"]);
- }
- if (preg_match('/^https/',$url)){
- $options[CURLOPT_SSL_VERIFYHOST] = 1;
- $options[CURLOPT_SSL_VERIFYPEER] = 0;
- }
- curl_setopt_array($ch, $options);
- $data = curl_exec($ch);
- $curl_errno = curl_errno($ch);
- curl_close($ch);
- if($curl_errno>0){
- return 'error';
- }else{
- return $data;
- }
- }
- ?>
原文:http://www.rssfull.net/turorial160710
教程:RSS全文输出,自己动手做。(一)的更多相关文章
- 微信小程序开发入门教程(四)---自己动手做个小程序
前面已将基础知识准备的差不多了,下面实际做一个小程序. 一.目标 用于上传照片和文字. 2个主要页面:我me,设置set 二.开始制作 1.打开微信开发者工具(我用的1.02.1907160 Wind ...
- 线程安全使用(四) [.NET] 简单接入微信公众号开发:实现自动回复 [C#]C#中字符串的操作 自行实现比dotcore/dotnet更方便更高性能的对象二进制序列化 自已动手做高性能消息队列 自行实现高性能MVC WebAPI 面试题随笔 字符串反转
线程安全使用(四) 这是时隔多年第四篇,主要是因为身在东软受内网限制,好多文章就只好发到东软内部网站,懒的发到外面,现在一点点把在东软写的文章给转移出来. 这里主要讲解下CancellationT ...
- 「雕爷学编程」Arduino动手做(9)——火焰传感器模块
37款传感器和模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器与模块,依照实践出真知(动手试试)的理念,以学习和交流为目的,这里准备 ...
- 「雕爷学编程」Arduino动手做(10)——敲击传感器模块
37款传感器和模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器与模块,依照实践出真知(动手试试)的理念,以学习和交流为目的,这里准备 ...
- 「雕爷学编程」Arduino动手做(15)——手指侦测心跳模块
37款传感器和模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器与模块,依照实践出真知(动手试试)的理念,以学习和交流为目的,这里准备 ...
- 【雕爷学编程】Arduino动手做(16)---数字触摸传感器
37款传感器和模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器与模块,依照实践出真知(动手试试)的理念,以学习和交流为目的,这里准备 ...
- 【雕爷学编程】MicroPython动手做(07)——零基础学MaixPy之机器视觉
机器视觉 machine vision机器视觉是人工智能正在快速发展的一个分支.机器视觉作为生产过程中关键技术之一,在机器或者生产线上,机器视觉可以检测产品质量以便将不合格的产品剔除,或者指导机器人完 ...
- 【雕爷学编程】MicroPython动手做(06)——零基础学MaixPy之单目摄像头
配套 OV2640摄像头:200W像素通用24P摄像头具有200万像素(1632x1232像素),其体积小.工作电压低,提供单片UXGA摄像和影像处理器的所有功能.通过SCCB总线控制,可以输出整帧. ...
- 【雕爷学编程】MicroPython动手做(04)——零基础学MaixPy之尝试运行
1.hello micropython #MicroPython动手做(04)——零基础学MaixPy之基本示例 #程序之一:hello micropython #MicroPython动手做(04) ...
随机推荐
- SpringBoot入门之事件监听
spring boot在启动过程中增加事件监听机制,为用户功能拓展提供极大的便利,sptingboot支持的事件类型有以下五种: ApplicationStartingEvent Applicatio ...
- MySQL远程登陆解决
第一句:以权限用户root登录 第二句:选择mysql库 第三句:查看mysql库中的user表的host值(即可进行连接访问的主机/IP名称) 第四句:修改host值(以通配符%的内容增加主机/IP ...
- Optimizing Your App for Today’s Internet
这个 session 的主讲人感觉是一个很典型的美国人,年纪也不小. 网络现状 四十亿人在使用因特网,大概占有世界人口的一半.上网人数的增长在减缓. 但是网络仍然在增长.增长点主要在物联网.第三世界国 ...
- 解决后台json数据返回的字段需要替换的问题
有时候后台json数据返回的字段含有“id”,也有可能是有时候为了减少代码的冗余,两页面之间只是数据模型个别属性的区别,所以这时候最好是用到模型属性的替换,用新的属性替换返回的json数据的字段.这里 ...
- Android六大基本布局
一.基本理论Android六大基本布局分别是:线性布局LinearLayout.表格布局TableLayout.相对布局RelativeLayout.层布局FrameLayout.绝对布局Absolu ...
- tar 命令压缩时报错 tar: Removing leading `/' from member names
在使用tar命令进行压缩打包的时候我们常常会遇到下面的错误.虽然它不会影响我们最后的压缩打包,但是间接说明了我们的命令是有问题的.接下来我们来看看解决的方法. 报错内容: [root@haha ~]# ...
- Cookie文件说明及IE的Cookie文件格式
1.Cookie文件的实质 Cookie实际上是Web服务端与客户端(典型的是浏览器)交互时彼此传递的一部分内容,内容可以是任意的,但要在允许的长度范围之内.客户端会将它保存在本地机器上(如IE便会保 ...
- elasticSearch6源码分析(2)模块化管理
elasticsearch里面的组件基本都是用Guice的Injector进行注入与获取实例方式进行模块化管理. 在node的构造方法中 /** * Constructs a node * * @pa ...
- PHP初级篇
PHP初级篇 PHP环境搭建: 企业中常用到的环境是:Linux+Apache+MySQL+PHP 学习环境是:Windows+Apache+MySQL+PHP 工具 Apache 2.4.4 MyS ...
- autofac使用Common Serivce Locator跟随wcf,mvc,web api的实例控制
autofac本身只提供了基本的ioc容器的功能 要想在mvc,wcf,web api中使用,除了autofac本身,还需要引入对应的包(点击对应连接可查看文档) 除此之外,使用Common Serv ...