php利用simple_html_dom类,获取页面内容,充当爬虫角色

PHP脚本扮演爬虫的角色,可能大家第一时间想到可能会是会正则,个人对正则的规则老是记不住,表示比较难下手,今天工作中有个需求需要爬取某个网站上的一些门店信息

无意间在网上看到一个比较好的类库叫:simple_html_dom

github下载地址:https://github.com/samacs/simple_html_dom

最重要的一步:你得先了解别人网站的结构,知道从哪个tab开始是你想要的数据

下面演示下过程吧

实现过程我分了三步

1、将门店信息的经纬度,名称等一些重要信息先插入本地表

[php] view plain copy
 
  1. set_time_limit(0);  
  2. $host = '127.0.0.1';  
  3. $user = 'root';  
  4. $user_pwd = '';  
  5. $database = 'dataname';  
  6. $conn = mysql_connect($host,$user,$user_pwd) or die('sss');  
  7. mysql_select_db($database,$conn) or die('dddd');  
  8. mysql_query('set names utf8');  
  9.   
  10.   
  11. include('./simple_html_dom-master/simple_html_dom.php');  
  12.   
  13. $url = '需要爬取的网站URL';  
  14. $html = file_get_html($url);  
  15. $n = 1;  
  16. foreach($html->find('li[data-counts=0]') as $e){  
  17.     $storeid = $e->storeid;  
  18.     $star = $e->level.'.0';  
  19.     $work_time = $e->time;  
  20.     $mapx = $e->mapx;  
  21.     $mapy = $e->mapy;  
  22.     $nickname = $e->mapname;  
  23.     $mapadd = $e->mapadd;  
  24.     $maptel = $e->maptel;  
  25.     $time = date('Y-m-d H:i:s');  
  26.     $query = "INSERT INTO `store` (`storeid`,`star`,`work_time`,`longitude`,`latitude`,`create_time`,`nickname`,`address`,`tel`)  
  27.               VALUES ($storeid,'".$star."','".$work_time."','".$mapx."','".$mapy."','".$time."','".$nickname."','".$mapadd."','".$maptel."')";  
  28.     $res = mysql_query($query);  
  29.     //echo $query;exit();  
  30.   
  31.     if($res){  
  32.         echo '成功导入第'.$n.'个门店<br>';  
  33.         $n++;  
  34.     }else{  
  35.         die('失败<br>');  
  36.     }  
  37. }  

2、跳入站点的另一个页面获取门店LOGO图片

[php] view plain copy
 
  1. $query = "SELECT storeid FROM store order by id desc";  
  2.   
  3. $row = mysql_query($query);  
  4.   
  5. while($rows = mysql_fetch_array($row)){  
  6.     $url = 'http://别人站点域名/'.$rows['storeid'].'.jhtml';  
  7.     $html = file_get_html($url);  
  8.     foreach($html->find('div.onlyOnePic') as $e){  
  9.         //获取img的src属性  
  10.         $img =  $e->firstChild()->src;  
  11.         //将远程图片保存到本地  
  12.         $content = file_get_contents($img);  
  13.         file_put_contents('./store/'.$rows['storeid'].'.jpeg', $content);  
  14.     }  
  15. }  

3、更新表中对应门店的LOGO字段

[php] view plain copy
 
  1. $query = "SELECT storeid FROM store order by id desc";  
  2. $row = mysql_query($query);  
  3. $n = 1;  
  4. while($rows = mysql_fetch_array($row)){  
  5.     $img = "https://我自己站点域名/".$rows['storeid'].".jpeg";  
  6.     $sql = "UPDATE store set img_url='".$img."' where storeid=".$rows['storeid'];  
  7.     $res = mysql_query($sql);  
  8.     if($res){  
  9.         echo '成功更新第'.$n.'个门店<br>';  
  10.         $n++;  
  11.     }else{  
  12.         echo '失败';  
  13.     }  
  14. }  


OK,功能实现了,不过还没有更深入的了解这个类库的其他功能,这里也只是做个记录,方便以后需要的时候用

原文地址:https://www.cnblogs.com/chenjian/p/7371327.html