在worldpress中使用php代码抓取图书馆书籍信息
2012-09-21 14:48
531 查看
最近在新浪SAE上用worldpress搭建了一个简单的个人博客,由于前端设计经验不足,css+div方面直接使用现有的inove主题。
但是自己想做一些个性化的设置,当然添加小工具之类的定制已经不能满足我的需求了。我已经添加了像3D标签云插件,百度地图的js API,以及音乐播放的插件,还有些前端代码添加都比较简单,在【外观->小工具】里面添加【文本】就可以了。本来想把首页的模板给换了,不知道为什么在SAE上鼓捣了一番没有成功。
于是有想添加一些其他的信息,比如自己读过的书籍。考虑到学校图书馆网站本身资源的丰富性,以及个人借阅的信息都保存在数据库中,心想可以借来一用。当然,最近和同学也有做一个书籍相关的网站的想法,于是趁此机会可以先一试。
首先svn将worldpress代码导出到本地(可以参考SAE开发文档)。
要利用图书馆数据,得先进行网页抓取,由于worldpress后台就是php写的,正好可以添加一些php代码实现此功能。
php进行网页抓取很简单,只需使用curl就行了。
这里是进行登陆后页面的抓取,因为要抓取的是我借阅过的书籍。所有要设置cookie,抓取到html内容之后,可以使用simple_html_dom获取节点内容,或者使用preg_match_all函数进行正则表达式匹配。
最后讲抓取的数据组合成自己想要的Html格式进行输出。
抓取到信息之后,要做的就是怎么放到worldpress里了。
这里参考了以下文章:
=============================================================================================================
地址: http://y234.cn/?p=4701 在WordPress上执行php代码
本来在做极光监测页面的时候就需要执行php代码,但最后还是给我用最土鳖的办法绕过去了(在别的地方cron一个php,定时生成几个gif图像,然后引用之)。结果今天折腾实验室的降雨预报页面的时候,总算绕不过去了。本来想着说这应该是个小意思,我装个exec-php不就可以了嘛。结果exec-php竟然还要折腾配套的各种东西,搞到最后竟然还不能用,真是郁闷。于是只好查查看有没有替代的方法。幸好万能的Wordpress还是可以用不太麻烦的方法解决这一难题的,这一方法就是shortcode,适用于规模不大的php程序。
简单地说就是把你的php程序植入到主题里面,然后在文章里用形如[my-shortcode type="dog"]的形式调用之。
首先修改一下主题里的function.php,在末尾添加这一行:
要把一个php程序写到shortcode里很容易,只要把它弄成一个函数(如果它还不是函数的话),然后注册这个函数即可。比如下面的shortcode.php
于是一个shortcode就做好了。如果我想让它返回Wang,只需要在写文章的时候用[my-shortcode type="dog"]
就可以了。
=============================================================================================================
我新建了一个Bookshelf的页面,打开就会自动抓取进行,由于图书馆那边的原因,抓取耗时较长,估计得几秒左右。
效果如下,其中图片是抓包分析到图书馆js代码调用一个url接口,返回json数据中提取到的,代码直接在Inove主题中修改:
![](http://img.my.csdn.net/uploads/201209/21/1348210277_9074.png)
抓取网页代码如下:
但是自己想做一些个性化的设置,当然添加小工具之类的定制已经不能满足我的需求了。我已经添加了像3D标签云插件,百度地图的js API,以及音乐播放的插件,还有些前端代码添加都比较简单,在【外观->小工具】里面添加【文本】就可以了。本来想把首页的模板给换了,不知道为什么在SAE上鼓捣了一番没有成功。
于是有想添加一些其他的信息,比如自己读过的书籍。考虑到学校图书馆网站本身资源的丰富性,以及个人借阅的信息都保存在数据库中,心想可以借来一用。当然,最近和同学也有做一个书籍相关的网站的想法,于是趁此机会可以先一试。
首先svn将worldpress代码导出到本地(可以参考SAE开发文档)。
要利用图书馆数据,得先进行网页抓取,由于worldpress后台就是php写的,正好可以添加一些php代码实现此功能。
php进行网页抓取很简单,只需使用curl就行了。
这里是进行登陆后页面的抓取,因为要抓取的是我借阅过的书籍。所有要设置cookie,抓取到html内容之后,可以使用simple_html_dom获取节点内容,或者使用preg_match_all函数进行正则表达式匹配。
最后讲抓取的数据组合成自己想要的Html格式进行输出。
抓取到信息之后,要做的就是怎么放到worldpress里了。
这里参考了以下文章:
=============================================================================================================
地址: http://y234.cn/?p=4701 在WordPress上执行php代码
本来在做极光监测页面的时候就需要执行php代码,但最后还是给我用最土鳖的办法绕过去了(在别的地方cron一个php,定时生成几个gif图像,然后引用之)。结果今天折腾实验室的降雨预报页面的时候,总算绕不过去了。本来想着说这应该是个小意思,我装个exec-php不就可以了嘛。结果exec-php竟然还要折腾配套的各种东西,搞到最后竟然还不能用,真是郁闷。于是只好查查看有没有替代的方法。幸好万能的Wordpress还是可以用不太麻烦的方法解决这一难题的,这一方法就是shortcode,适用于规模不大的php程序。
简单地说就是把你的php程序植入到主题里面,然后在文章里用形如[my-shortcode type="dog"]的形式调用之。
首先修改一下主题里的function.php,在末尾添加这一行:
include_once(“shortcode.php”);我们所有的代码就放在shortcode.php里面。当然你想全写在function.php里也没问题。
要把一个php程序写到shortcode里很容易,只要把它弄成一个函数(如果它还不是函数的话),然后注册这个函数即可。比如下面的shortcode.php
function my-shortcode-function($atts){ extract(shortcode_atts(array('type' => 'cat'),$atts)); // 设定参数type的默认值为cat if ($atts['type']=='cat') echo "Miao"; elseif ($atts['type']=='dog') echo "Wang"; // 函数其他部分 return; } add_shortcode('my-shortcode', 'my-shortcode-function'); // 注册my-shortcode-function到my-shortcode
于是一个shortcode就做好了。如果我想让它返回Wang,只需要在写文章的时候用[my-shortcode type="dog"]
就可以了。
=============================================================================================================
我新建了一个Bookshelf的页面,打开就会自动抓取进行,由于图书馆那边的原因,抓取耗时较长,估计得几秒左右。
效果如下,其中图片是抓包分析到图书馆js代码调用一个url接口,返回json数据中提取到的,代码直接在Inove主题中修改:
![](http://img.my.csdn.net/uploads/201209/21/1348210277_9074.png)
抓取网页代码如下:
//登陆页面 $login_url = 'http://opac.lib.xidian.edu.cn/patroninfo/'; //用户名和密码 $post_fields = 'code=【用户名】pin=【密码】&pat_submit=xxx'; //cookie文件存放在网站根目录的temp文件夹下 $cookie_file = tempnam('./temp','cookie'); //登陆并获取cookie $ch = curl_init($login_url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_MAXREDIRS, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_AUTOREFERER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file); curl_exec($ch); curl_close($ch); //访问借书的页面 $send_url='http://opac.lib.xidian.edu.cn/patroninfo~S0*chx/1075191/items'; $ch = curl_init($send_url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); $contents = curl_exec($ch); curl_close($ch); echo "<strong><font color=\"#ff0000\">注:以下书籍信息由DC的代码为您自动抓取--来源:西安电子科技大学 图书 馆 --请稍候......</font></strong><br />"; echo "<font color=\"#00c000\">------------------------------------------------Reading-----------------------------------------------------</font></strong></br>"; include_once('simple_html_dom.php'); $html= str_get_html($contents); $books=$html->find('label'); $dates= $html->find('.patFuncStatus'); preg_match_all("/\/record=b\d+~S0\*chx/",$contents,$arr); //echo $arr[0][0]; for($i=0;$i<count($books);$i++) { //echo $books[$i]->plaintext."【".$dates[$i]->plaintext.'】<br>' ; echo "<a href='http://opac.lib.xidian.edu.cn".$arr[0][$i]."'>"."◆".$books[$i]->plaintext."</a>"; $send_url="http://opac.lib.xidian.edu.cn".$arr[0][$i]; //echo $send_url; $ch = curl_init($send_url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); $contents = curl_exec($ch); curl_close($ch); $html= str_get_html($contents); //echo $html; preg_match_all("/\d{3}\-\d\-.*\-\d/",$html,$isbn); //var_dump($isbn[0][0]); $send_url="http://data.libtop.com/xopac/search?callback=jsonp1347852533232&isbn=".$isbn[0][0]."&library=244&media=0"; $ch = curl_init($send_url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $contents = curl_exec($ch); curl_close($ch); preg_match_all("/http.*jpg/",$contents,$img); echo "<img src=\"".$img[0][0]."\"/>"; echo "<a href='http://data.libtop.com/xopac/search?callback=jsonp1347852533232&isbn=".$isbn[0][0]."&library=244&media=0'>"."【获取本书信息:格式JSON】"."</a>"."</br>"; } $html->clear(); echo "<font color=\"#00c000\">------------------------------------------------Have Read-----------------------------------------------------</font></strong></br>"; $send_url='http://opac.lib.xidian.edu.cn/patroninfo~S0*chx/1075191/readinghistory'; $ch = curl_init($send_url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); $contents = curl_exec($ch); curl_close($ch); $html= str_get_html($contents); $books=$html->find('.patFuncTitle'); $dates= $html->find('.patFuncDate'); for($i=0;$i<count($books);$i++) { echo "◆".$books[$i]->plaintext."【".$dates[$i]->plaintext.'】<br>' ; } $html->clear(); return; }
相关文章推荐
- 在worldpress中使用php代码抓取图书馆书籍信息
- php同时使用session和cookie来保存用户登录信息的实现代码
- 网络爬虫:使用Scrapy框架编写一个抓取书籍信息的爬虫服务
- php使用curl抓取qq空间的访客信息示例_php技巧
- php 实现信息采集(网页内容抓取)程序代码
- 关于php抓取页面信息的简单代码
- php中使用cookie来保存用户登录信息的实现代码
- 关于php抓取页面信息的简单代码
- php使用pthreads v3多线程的抓取新浪新闻信息
- 使用php方法curl抓取AJAX异步内容思路分析及代码分享
- php使用curl抓取qq空间的访客信息示例
- php使用file_get_contents函数抓取页面信息
- python3.4学习笔记(十三) 网络爬虫实例代码,使用pyspider抓取多牛投资吧里面的文章信息,抓取政府网新闻内容
- php使用curl抓取qq空间的访客信息示例
- 使用php方法curl抓取AJAX异步内容思路分析及代码分享
- asp.net 初步入门使用正则抓取网页信息
- 小型网站使用高德地图开发定位模块需要的php代码
- 教您使用java爬虫gecco抓取JD全部商品信息
- C#使用正则表达式抓取网站信息示例