[原创]图书网站采集实例教程

Filed under: Spider | 2 Comments »
Posted on

在网上看到很多简单的采集教程,尤其是针对图书网站的比较多,但附带实例的并不多,在看了一篇针对八路中文网的抓取分析后,决定针对这个网站,写一个简单的抓取教程,并附带实例。由于俺偷懒,文中很多分析都是来自《利用PHP制作简单的内容采集器》,俺只是进一步优化了他的流程,并完成了代码实例的编写。
采集程序其实并不难做,只要分析清楚流程,然后使用合适的正则来取到你想要的内容就可以了。废话不说了,教程开始:
1.分析入口:
多打开几本书后,可以发现书名的基本格式是:http://www.86zw.com/Book/书号/Index.aspx。于是得出:

  1. $BookId='1888';
  2. $index="http://www.86zw.com/Book/".$BookId."/Index.aspx";//组合书目首页URL

2.打开页面:

  1. $contents=file_get_contents($index);

3.抓取图书信息页:

  1. //抓取图书相关信息
  2. preg_match_all("/<div id=\"CrBookTitle\"><span class=\"booktitle\">(.*)<\/span><\/div>/is",$contents,$Arraytitle);
  3. preg_match_all("/【<a href=\"(.*)\"><font color=\"#CC0000\">点击阅读<\/font><\/a>】/is",$contents,$Arraylist);
  4. unset($contents);
  5. $title=$Arraytitle[1][0];//书名
  6. $list="http://www.86zw.com".trim($Arraylist[1][0]);//列表页URL

Read the rest of this entry »

大话URL映射之我见

Filed under: Other | No Comments »
Posted on

1、大家来说说URL映射吧
一般url映射有两种方式,一种是通过mod_rewrite实现,这种网上教材很多我也不多说了。另外一种是在程序中模拟,比如类似zend Framework中的那种方式/index.php/controller/action/var1/value1/var2/value2/。这里方式其实最主要是通过一个统一的输入接口,然后对url进行解析,最后转发到相应的controller中的module。
Read the rest of this entry »

用snoopy提交数据实现登陆

Filed under: Spider | 122 Comments »
Posted on

模拟登陆可以用curl或者socket来实现,当curl需要服务器相应的启用curl module,自己socket实现相对比较麻烦,使用snoopy就简单了很多啦。

在这里,我们使用喜悦国际村做为例子。(^_^,纯属研究)

首先,我们要获取到登陆需要发送什么字段,目标地址是什么。这里我们使用snoopy的fetchform来实现。

  1. <?php
  2. include "Snoopy.class.php";
  3. $snoopy = new Snoopy;
  4. $snoopy->fetchform("http://www.phpx.com/happy/logging.php?action=login");
  5. print $snoopy->results;
  6. ?>

当然你也可以直接查看http://www.phpx.com/happy/logging.php?action=login的源代码来实现,不过这样更加方便把。这里,我们获取到目标和提交的数据,下一步就可以实现模拟登陆了。代码如下:

  1. <?php
  2. include "Snoopy.class.php";
  3. $snoopy = new Snoopy;
  4. $submit_url = "http://www.phpx.com/happy/logging.php?action=login";
  5.  
  6.    $submit_vars["loginmode"] = "normal";
  7.    $submit_vars["styleid"] = "1";
  8.    $submit_vars["cookietime"] = "315360000";
  9.    $submit_vars["loginfield"] = "username";
  10.    $submit_vars["username"] = "********"; //你的用户名
  11.   $submit_vars["password"] = "*******"//你的密码
  12.   $submit_vars["questionid"] = "0";
  13.    $submit_vars["answer"] = "";
  14.    $submit_vars["loginsubmit"] = "提   交";
  15.    $snoopy->submit($submit_url,$submit_vars);
  16.    print $snoopy->results;
  17.  
  18. ?>

PDO函数库使用入门

Filed under: PHP&MySQL | No Comments »
Posted on

去年接触到PDO,也稍微了用了下。不过不熟悉,这次查看了手册,详细的看了看。手册上是英文的,顺便就翻译下。
PDO,全称PHP DATA OBJECTS,在PHP中定义了一个轻量级别的数据操作接口。在PHP5.1及其之后的版本中得到完全的支持。PDO,实现了事务、不同数据库之间的抽象。这是我最喜欢的原因。
安全PDO是非常简单的,也有很多文章,这里就不具体说了。
Read the rest of this entry »

Tags : , ,

PHP采集程序中常用的函数

Filed under: Spider | No Comments »
Posted on
  1. <?php
  2. //获得当前的脚本网址
  3. function get_php_url(){
  4.         if(!empty($_SERVER["REQUEST_URI"])){
  5.                 $scriptName = $_SERVER["REQUEST_URI"];
  6.                 $nowurl = $scriptName;
  7.         }else{
  8.                 $scriptName = $_SERVER["PHP_SELF"];
  9.                 if(empty($_SERVER["QUERY_STRING"])) $nowurl = $scriptName;
  10.                 else $nowurl = $scriptName."?".$_SERVER["QUERY_STRING"];
  11.         }
  12.         return $nowurl;
  13. }
  14. //把全角数字转为半角数字
  15. function GetAlabNum($fnum){
  16.         $nums = array("","","","","","","","","","");
  17.         $fnums = "0123456789";
  18.         for($i=0;$i<=9;$i++) $fnum = str_replace($nums[$i],$fnums[$i],$fnum);
  19.         $fnum = ereg_replace("[^0-9\.]|^0{1,}","",$fnum);
  20.         if($fnum=="") $fnum=0;
  21.         return $fnum;
  22. }

Read the rest of this entry »

Tags : , ,