91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用PHP蜘蛛爬蟲框架來爬取數據

發布時間:2022-03-14 16:39:14 來源:億速云 閱讀:171 作者:iii 欄目:web開發

這篇文章主要介紹了如何使用PHP蜘蛛爬蟲框架來爬取數據的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇如何使用PHP蜘蛛爬蟲框架來爬取數據文章都會有所收獲,下面我們一起來看看吧。

  我的環境是寶塔lnmp,php是5.4版本,不要用這個版本,缺各種擴展庫

  錯誤1:沒有該擴展,不需要再php.ini中配置

  錯誤2:缺這個擴展庫,不需要再php.ini中配置

  跑跑的報這個錯:PHP Fatal error:  Call to undefined function phpspider\core\mb_detect_encoding() in / on line 474

  解決方法:執行 yum install php-mbstring -y

  1、在linux上跑demo。

  條件:linux上要有php環境,代碼上傳上去,執行php -f demo.php

  想退出這個頁面執行quit 或 ctrl + c

  你可能會疑惑,這要跑,爬來的數據放到哪里了呢??

  2、需要在$configs中加這倆個配置(參考文檔configs詳解之成員):

  //日志存放的位置

  'log_file' => '',

  'export' => array(

  'type' => 'csv',

  'file' => '', //爬下來的數據放在data目錄下,目錄和文件要自己提前創建好

  )這里是存成了csv需要下載到本地電腦上看,因為這是個excel還是下載下來方便看

  當然你也可以存到數據庫等

  3、下面是一個完整的實例:

  3.1、思路 :具體還是要看代碼,思路只是方便理解和記憶

  //這個頁面是網站首頁

  //這個頁面是列表頁

  //這個頁面是列表頁下面的頁碼

  這回我們就清晰了,我們要爬取的是列表頁的數據:

  3.1.1、接下來設置爬取規則

  3.1.2、實例化,將配置傳給這個類的構造函數

  3.1.3、添加新的url到帶爬對列

  3.1.4、篩選爬到的數據,如標題弄出來,內容弄出來,并組裝好數據...

  3.1.5、進行入庫操作

  3.2、代碼

  <?php

  require '';

  use phpspider\core\phpspider;

  use phpspider\core\requests;    //請求類

  use phpspider\core\selector;    //選擇器類

  use phpspider\core\db;    //選擇器類

  use phpspider\core\log;    //選擇器類

  $configs=array(

  'name'=> '爬取新聞',

  //'log_show'=> true,

  //定義爬蟲爬取哪些域名下的網頁, 非域名下的url會被忽略以提高爬取速度

  'domains'=> array(

  ''    //寫域名

  ),

  //定義爬蟲的入口鏈接, 爬蟲從這些鏈接開始爬取,同時這些鏈接也是監控爬蟲所要監控的鏈接

  'scan_urls'=> array(

  ''

  ),

  //定義內容頁url的規則

  'content_url_regexes'=> array(

  ""

  ),

  //爬蟲爬取每個網頁失敗后嘗試次數

  'max_try'=> 5,

  //爬蟲爬取數據導出

  'export'=> array(

  'type'=> 'db',

  'table'=> 'pachong',    //表名

  ),

  'db_config'=> array(

  'host'=> 'localhost',

  'port'=> 3306,

  'user'=> '改成自己的',    //mysql的賬號

  'pass'=> '改成自己的',               //mysql的密碼

  'name'=> '改成自己的',   //庫名

  ),

  'fields'=> array(

  //從列表頁開始爬

  array(

  'name'=> "lists",

  'selector'=> "'container')]//ul//li[contains(@class,'item')]",

  'required'=> true,

  'repeated'=> true  //寫上是數組(抓的是整個列表頁),不寫是字符串(只抓第一個)

  ),

  ),

  //日志存放的位置

  'log_file'=> 'data/qiushibaike.log',

  //只記錄 錯誤和調試日志

  'log_type'=> 'error,debug,warn,error',

  //爬蟲爬取網頁所使用的瀏覽器類型.隨機瀏覽器類型,用于破解防采集

  'user_agent'=> array(

  "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36",

  "Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13G34 Safari/601.1",

  "Mozilla/5.0 (Linux; U; Android 6.0.1;zh_cn; Le X820 Build/FEXCNFN5801507014S) AppleWebKit/537.36 (KHTML, like Gecko)Version/4.0 Chrome/49.0.0.0 Mobile Safari/537.36 EUI Browser/5.8.015S",

  ),

  //爬蟲爬取網頁所使用的偽IP。隨機偽造IP,用于破解防采集

  'client_ip'=> array(

  '192.168.0.2',

  '192.168.0.3',

  '192.168.0.4',

  ),

  );

  $spider=new phpspider($configs);

  //爬蟲初始化時調用, 用來指定一些爬取前的操作

  $spider->on_start=function($spider)

  {

  requests::set_header("Referer", "");

  };

  //在爬取到入口url的內容之后, 添加新的url到待爬隊列之前調用. 主要用來發現新的待爬url, 并且能給新發現的url附加數據(點此查看“url附加數據”實例解析).

  $spider->on_scan_page=function($page,$content,$spider){

  //列表頁只采集3頁。

  for($i=0;$i<3;$i++){

  if($i==0){    //第一頁

  $url="";

  }else{          //之后的n頁

  $url="";

  }

  $options=[

  'method'=> 'get',

  'params'=> [

  'page'=> $i

  ],

  ];

  $spider->add_url($url,$options);    //添加新的url到待爬隊列

  }

  };

  $spider->on_extract_field=function($filename,$data,$page){

  $arr=[];

  //處理抽取到的fields中name==lists的數據

  if($filename=='lists'){

  if(is_array($data)){

  foreach($data as $k=>$v){

  $img=selector::select($v,"");

  //如果該新聞沒有圖片,就刪除這條數據

  if(empty($img)){

  unset($data[$k]);

  }else{

  $url="";

  $title=trim(selector::select($v,""));    //抓列表頁的標題

  //抓列表頁的圖片

  if(substr(selector::select($v,""),0,1)){

  $title_imgs=selector::select($v,"");

  }else{

  $title_imgs=$url . ltrim(selector::select($v,""),'.');

  }

  $title_desc=trim(selector::select($v,""));    //抓列表頁的新聞簡介

  //抓文章,跳轉到內容頁

  $p='/<h4><a[^<>]+href * \=*["\']?([^\'"\+]).*?/i';

  $title_url=selector::select($v,$p,'regex');

  if(substr($title_url,0,1)=='h'){

  $title_link=$title_url;

  }else{

  $title_link=$url . ltrim($title_url,'.');

  }

  $title_time=strip_tags(selector::select($v,""));  //抓列表頁的時間

  //組裝數據

  $arr[$k]=[

  'title'=> $title,

  'title_imgs'=> $title_imgs,

  'title_desc'=> $title_desc,

  'title_link'=> $title_link,    //前往內容頁的鏈接

  'title_time'=> $title_time,

  ];

  }

  }

  }

  }

  return $arr;

  };

  //入庫操作

  $spider->on_extract_page=function($page,$data){

  //    echo "<pre>";

  //    var_dump($data);

  //    die;

  //處理哪個數據

  if(isset($data['lists'])){

  foreach($data['lists'] as $v){

  $arr=[

  'title'=> trim($v['title']),

  'title_imgs'=> urlencode($v['title_imgs']),

  'title_desc'=> $v['title_desc'],

  'title_link'=> urlencode($v['title_link']),

  'title_time'=> $v['title_time']

  ];

  //標題重復就不入庫

  $sql="select count(*) as &mdash;&mdash;count&mdash;&mdash; from &mdash;&mdash;pachong&mdash;&mdash; where &mdash;&mdash;title&mdash;&mdash;".$v['title'];

  $row=db::get_one($sql);

  if(!$row['count']){

  db::insert('pachong',$arr);

  }

  }

  $data=$arr;

  }

  return $data;

  };

  $spider->start();

  3.3、表的結構

  4、按照作者的思想,每次爬取之前先要測試一下,該網站能不能爬到(參考文檔:如何進行運行前測試)

  注意:這是測試用的,該頁面請用瀏覽器直接訪問,方便查看

關于“如何使用PHP蜘蛛爬蟲框架來爬取數據”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“如何使用PHP蜘蛛爬蟲框架來爬取數據”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

永善县| 平昌县| 家居| 博爱县| 江达县| 石泉县| 屏南县| 盐亭县| 汉源县| 桐柏县| 淮滨县| 调兵山市| 苏尼特右旗| 清流县| 县级市| 黔西县| 云和县| 若尔盖县| 辽阳市| 乡城县| 邯郸市| 中阳县| 安陆市| 威信县| 普兰店市| 宁阳县| 托里县| 鄂托克旗| 永定县| 浏阳市| 祁东县| 饶平县| 柳州市| 宜春市| 莱州市| 新巴尔虎右旗| 应城市| 泰顺县| 哈尔滨市| 霍林郭勒市| 西城区|