这里以PHP版为例,尽量说得通俗点吧,水平实在有限,见谅。

目前我这里所有的获取全文输出的网站大概是三种情况:

  1. 要输出的内容集中在一页上,也就是看似列表页的页面里集中了你想要的所有内容,并不需要点击“更多”或“继续阅读”才能看到文章整体。比如糗事百科、wiki。
  2. 有列表页,要查看相应文章必须点击链接进入。
  3. json方式写入。特征就是查看源文件并不能找到你在浏览器中看到的内容。比如腾讯新闻图片(链接),它的真正内容在这(链接)。

第一种最省事,第二种最常见,第三种稍麻烦。

今天先讲第二种。

以国家地理中文网宇宙空间为例(链接),先看代码:(把下列源码存为space.php)

  1. <?php
  2. include "gethtml.php";
  3. $regex_link = '/(?<=<dt><a href=").+?(?=")/s';
  4. $regex_tit = '/(?<=<title>)(.+?)(?= -)/s';
  5. $regex_con = '/<div id="detailMain_box_img".*?(?=<div class="M-L-article-last-p" >)/s';
  6. $header='<?xml version="1.0" encoding="utf-8"?><rss version="2.0"><channel><title>国家地理中文网宇宙空间</title>';
  7. $footer='</channel></rss>';
  8. $html=gethtml('http://www.nationalgeographic.com.cn/science/space/');
  9. if(preg_match_all($regex_link, $html, $links)){
  10. $size=count($links[0]);
  11. for($i=0;$i<$size;$i++){
  12. $link=preg_replace('/(.+)/','http://www.nationalgeographic.com.cn$1',$links[0][$i]);
  13. $content=gethtml($link);
  14. preg_match($regex_con,$content,$article);
  15. preg_match($regex_tit,$content,$title);
  16. $rss.='<item><title>'.$title[0].'</title><link><![CDATA['.$link.']]></link><description><![CDATA['.$article[0].']]></description></item>';
  17. }
  18. file_put_contents('space.xml',$header.$rss.$footer);
  19. }
  20. ?>

重点是第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输出了,不过可选的参数就没有了,有的页面会抓取不到。

  1. <?php
  2. error_reporting(E_ERROR);
  3. function gethtml($url,$json){
  4. $args = json_decode($json,true);
  5. $useragent = $args["useragent"]?$args["useragent"]:'Mozilla/5.0';
  6. $timeout = $args["timeout"]?$args["timeout"]:9000;
  7. $ch = curl_init();
  8. $options = array(
  9. CURLOPT_URL => $url,
  10. CURLOPT_USERAGENT => $useragent,
  11. CURLOPT_TIMEOUT_MS => $timeout,
  12. CURLOPT_NOSIGNAL => 1,
  13. CURLOPT_HEADER => 0,
  14. CURLOPT_RETURNTRANSFER => 1,
  15. CURLOPT_FOLLOWLOCATION => 1
  16. );
  17. if($args["ip"]){
  18. $options[CURLOPT_HTTPHEADER] = array('CLIENT-IP:'.$args["ip"],'X-FORWARDED-FOR:'.$args["ip"]);
  19. }
  20. if (preg_match('/^https/',$url)){
  21. $options[CURLOPT_SSL_VERIFYHOST] = 1;
  22. $options[CURLOPT_SSL_VERIFYPEER] = 0;
  23. }
  24. curl_setopt_array($ch, $options);
  25. $data = curl_exec($ch);
  26. $curl_errno = curl_errno($ch);
  27. curl_close($ch);
  28. if($curl_errno>0){
  29. return 'error';
  30. }else{
  31. return $data;
  32. }
  33. }
  34. ?>

原文:http://www.rssfull.net/turorial160710

教程:RSS全文输出,自己动手做。(一)的更多相关文章

  1. 微信小程序开发入门教程(四)---自己动手做个小程序

    前面已将基础知识准备的差不多了,下面实际做一个小程序. 一.目标 用于上传照片和文字. 2个主要页面:我me,设置set 二.开始制作 1.打开微信开发者工具(我用的1.02.1907160 Wind ...

  2. 线程安全使用(四) [.NET] 简单接入微信公众号开发:实现自动回复 [C#]C#中字符串的操作 自行实现比dotcore/dotnet更方便更高性能的对象二进制序列化 自已动手做高性能消息队列 自行实现高性能MVC WebAPI 面试题随笔 字符串反转

    线程安全使用(四)   这是时隔多年第四篇,主要是因为身在东软受内网限制,好多文章就只好发到东软内部网站,懒的发到外面,现在一点点把在东软写的文章给转移出来. 这里主要讲解下CancellationT ...

  3. 「雕爷学编程」Arduino动手做(9)——火焰传感器模块

    37款传感器和模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器与模块,依照实践出真知(动手试试)的理念,以学习和交流为目的,这里准备 ...

  4. 「雕爷学编程」Arduino动手做(10)——敲击传感器模块

    37款传感器和模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器与模块,依照实践出真知(动手试试)的理念,以学习和交流为目的,这里准备 ...

  5. 「雕爷学编程」Arduino动手做(15)——手指侦测心跳模块

    37款传感器和模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器与模块,依照实践出真知(动手试试)的理念,以学习和交流为目的,这里准备 ...

  6. 【雕爷学编程】Arduino动手做(16)---数字触摸传感器

    37款传感器和模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器与模块,依照实践出真知(动手试试)的理念,以学习和交流为目的,这里准备 ...

  7. 【雕爷学编程】MicroPython动手做(07)——零基础学MaixPy之机器视觉

    机器视觉 machine vision机器视觉是人工智能正在快速发展的一个分支.机器视觉作为生产过程中关键技术之一,在机器或者生产线上,机器视觉可以检测产品质量以便将不合格的产品剔除,或者指导机器人完 ...

  8. 【雕爷学编程】MicroPython动手做(06)——零基础学MaixPy之单目摄像头

    配套 OV2640摄像头:200W像素通用24P摄像头具有200万像素(1632x1232像素),其体积小.工作电压低,提供单片UXGA摄像和影像处理器的所有功能.通过SCCB总线控制,可以输出整帧. ...

  9. 【雕爷学编程】MicroPython动手做(04)——零基础学MaixPy之尝试运行

    1.hello micropython #MicroPython动手做(04)——零基础学MaixPy之基本示例 #程序之一:hello micropython #MicroPython动手做(04) ...

随机推荐

  1. 十分钟用 Node 命令行工具打造 react-cli 脚手架

    如果你有以下想法: 每次新开项目需要copy一堆文件/文件夹,太烦!想要快速建立工程 用了vue-cli.react-app,羡慕!想要自己做一个 你只需花十分钟时间,做一个Node命令行工具,打造属 ...

  2. SVN图形客户端上传静态库.a文件失败

    1.原因客户端未添加静态库 2.解决办法 到项目静态库所在目录用命令行添加静态库文件 svn add ****.a 3.可能存在问题 Mac OS的自带SVN版本过低不能添加,报错如下: svn: E ...

  3. Python小白学习之路(二十一)—【迭代器】

    迭代器 1.迭代器协议 对象必须提供一个 next 方法,执行该方法要么返回迭代中的下一项,要么就引起一个Stoplteration异常,以终止迭代(只能往后走不能往前退) 2.可迭代对象 实现了迭代 ...

  4. iOS(Swift)-Runtime之关于页面跳转的捷径【Runtime获取当前ViewController,很常用】

    写在前面 在我们操作页面跳转时,如果当前的类不是UIViewcontroller(下面用VC表示),你会不会写一个代理,或者block给VC传递信息,然后在VC里面进行 ///假如targetVc是将 ...

  5. 【NOIP2018】保卫王国 动态dp

    此题场上打了一个正确的$44pts$,接着看错题疯狂$rush$“正确”的$44pts$,后来没$rush$完没将之前的代码$copy$回去,直接变零分了..... 这一题我们显然有一种$O(nm)$ ...

  6. (转)MySQL字段类型详解

    MySQL字段类型详解 原文:http://www.cnblogs.com/100thMountain/p/4692842.html MySQL支持大量的列类型,它可以被分为3类:数字类型.日期和时间 ...

  7. 摘要:ASP.NET的路由

    原文:ASP.NET的路由系统:路由映射 对物理存在文件的路由 在成功注册路由的情况下,如果我们按照传统的方式访问一个物理文件(比如http://localhost:2738/Default.aspx ...

  8. android动态权限获取

    android动态权限获取 Android6.0采用新的权限模型,只有在需要权限的时候,才告知用户是否授权,是在runtime时候授权,而不是在原来安装的时候 ,同时默认情况下每次在运行时打开页面时候 ...

  9. HttpURLConnection解析

    请求响应流程 设置连接参数的方法 setAllowUserInteraction setDoInput setDoOutput setIfModifiedSince setUseCaches setD ...

  10. Filter应用之-自动登录

    自动登录,是为了帮助用户多次使用这个网页时,不用再次输入用户名和密码就可以登录. 是指用户将用户的登录信息,人,保存到本地的文件中Cookie中. Name,value – 声明时 new Cooki ...