PHP採集商家資訊及採集方法概述(下)
下面我們來上程式碼
資料庫採用PDO 主要用到了預處理 關於預處理的內容
參考:PHP5中PDO(PHP DATA OBJECT)模組基礎詳解
還有一個phpquery 原始碼下載 這個稍後在給出具體的教程
第一步:
基本的配置 資料庫檔案在第一講裡面
資料庫連線:conn.php
- <?php
- define(`DB_USER`, `root`);
- define(`DB_PASSWORD`, “);
- define(`DB_CHARSET`, `utf8`);
- try {
- $DBH = new PDO(`mysql:host=localhost;dbname=shopyijia`, DB_USER, DB_PASSWORD);
- $DBH->exec(`SET CHARACTER SET `.DB_CHARSET);
- $DBH->exec(`SET NAMES `.DB_CHARSET);
- /*
- * 如果想要在指令碼結束的時候不釋放連結那麼在引數裡面加上array(PDO::ATTR_PERSISTENT => true)不過一般情況下可以不用常連結
- $dbh = new PDO(`mysql:host=localhost;dbname=test`, $user, $pass, array(
- PDO::ATTR_PERSISTENT => true
- ));
- */
- } catch (PDOException $e) {
- print “Error!: “ . $e->getMessage() . “<br/>”;
- die();
- }
第二步:
手動新增一級分類的資訊地址
第三步:
爬取二級分類
- <?php
- /*
- * 獲取所有商家目錄資訊
- */
- header(“Content-type:text/html;charset=utf8”);
- set_time_limit(0);
- define(`SHOP_BASE_URL`, `http://shop.yijia.com`);
- require_once `conn.php`; //資料庫初始化
- require(`phpQuery/phpQuery.php`); //採集器初始化
- $Sql = `SELECT * FROM yj_shop_category WHERE is_grab=`0` AND sc_parent_id=0`;
- $un_grab_cat = $DBH->query($Sql)->fetchAll(); //爬取一級分類下面的二級分類頁面
- //預處理SQL
- $stmt = $DBH->prepare(`INSERT INTO yj_shop_category(sc_name,sc_parent_id,sc_url,sc_add_time) VALUES (:sc_name,:sc_parent_id,:sc_url,:sc_add_time)`);
- $sc_name = $sc_parent_id = $sc_url = $sc_add_time = null;
- $stmt->bindParam(`:sc_name`, $sc_name); //
- $stmt->bindParam(`:sc_parent_id`, $sc_parent_id);
- $stmt->bindParam(`:sc_url`, $sc_url);
- $stmt->bindParam(`:sc_add_time`, $sc_add_time);
- foreach ($un_grab_cat as $_key => $_value){
- $sc_url = $_value[`sc_url`];
- $sc_parent_id = $_value[`sc_id`];//父分類id
- $file = file_get_contents($sc_url);
- $dom = phpQuery::newDocument($file); //初始化物件
- foreach(pq(“#dd_open_1 ul > li”) as $item){
- $sc_name = pq($item)->text();
- $sc_url = SHOP_BASE_URL.pq($item)->find(`a:first`)->attr(`href`);
- $sc_add_time = time();
- $stmt->execute();
- }
- phpQuery::$documents = array();
- }
- echo `over`;
- die();
第四步:
爬取二級分類的頁面更新對應的分頁
- <?php
- header(“Content-type:text/html;charset=utf8”);
- set_time_limit(0);
- define(`SHOP_BASE_URL`, `http://shop.yijia.com`);
- require_once `conn.php`; //資料庫初始化
- require(`phpQuery/phpQuery.php`); //採集器初始化
- $Sql = `SELECT sc_id,sc_url FROM yj_shop_category WHERE is_grab=`0` AND sc_parent_id!=0`;
- $un_grab_cat = $DBH->query($Sql)->fetchAll(); //爬取一級分類下面的二級分類頁面
- //預處理SQL
- $stmt = $DBH->prepare(`UPDATE yj_shop_category SET sc_page_num = :sc_page_num WHERE sc_id = :sc_id`);
- $sc_page_num = $sc_id = null;
- $stmt->bindParam(`:sc_page_num`, $sc_page_num); //
- $stmt->bindParam(`:sc_id`, $sc_id);
- foreach ($un_grab_cat as $_key => $_value){
- $sc_id = $_value[`sc_id`];
- $sc_url = $_value[`sc_url`];
- $file = file_get_contents($sc_url);
- $dom = phpQuery::newDocument($file); //初始化物件
- $last_a = pq(`div.pager > a:last`);
- $A_parm = explode(`_`, pq($last_a)->attr(`href`));
- $sc_page_num = intval($A_parm[5]);
- $stmt->execute();
- phpQuery::$documents = array();
- sleep(1);
- }
- echo `over`;
- die();
第五步:
爬取二級分類所有分頁的商家資訊
- <?php
- /*
- * 獲取所有商家資訊
- */
- header(“Content-type:text/html;charset=utf8”);
- set_time_limit(0);
- error_reporting(E_ALL);
- define(`SHOP_BASE_URL`, `http://shop.yijia.com`);
- require_once `conn.php`; //資料庫初始化
- require(`phpQuery/phpQuery.php`); //採集器初始化
- $Sql = `SELECT sc_id,sc_url,sc_page_num,sc_current_page_num FROM yj_shop_category WHERE is_grab=`0` AND sc_parent_id!=0`;
- $un_grab_cat = $DBH->query($Sql)->fetchAll(); //獲取所有的未被抓取的二級分類資訊
- foreach ($un_grab_cat as $_key => $_value){
- $sc_url = $_value[`sc_url`];
- $sc_id = $_value[`sc_id`];//父分類id
- if($_value[`sc_page_num`] == `0`){ //如果只有一頁
- $sc_tmp_url = $sc_url;
- if(getPageShopInfo($sc_tmp_url,$sc_id)){
- $DBH->exec(`UPDATE yj_shop_category SET is_grab=1 WHERE sc_id=`.$sc_id);
- }
- }else{ //如果有多頁
- for($i=$_value[`sc_current_page_num`];$i<=$_value[`sc_page_num`];$i++){
- $A_param = explode(`_`, $sc_url);
- $A_param[2] = intval($A_param[2]).`_0_0_`.$i.`/`;
- $sc_tmp_url = implode(`_`,$A_param);//拼接出來一個的url 要符合當前的規則哦 以後可能會有變動哦
- if(getPageShopInfo($sc_tmp_url, $sc_id)){
- $DBH->exec(`UPDATE yj_shop_category SET sc_current_page_num=`.$i.` WHERE sc_id=`.$sc_id);
- $last_page = $i;
- }
- }
- if($last_page == $_value[`sc_page_num`]){ //如果後一個分頁爬取完成 那麼更新當前 這個分類的狀態為已抓取
- $DBH->exec(`UPDATE yj_shop_category SET is_grab=1 WHERE sc_id=`.$sc_id);
- }
- }
- }
- function getPageShopInfo($url,$sc_parent_id){
- global $DBH;
- $stmt = $DBH->prepare(`INSERT INTO yj_shop_information(si_name,si_cat_id,si_yijia_url,si_logo_url,si_front_desc,si_add_time) VALUES (:si_name,:si_cat_id,:si_yijia_url,:si_logo_url,:si_front_desc,:si_add_time)`);
- $si_name = $si_cat_id = $si_yijia_url = $si_logo_url = $si_front_desc = $si_add_time = null;
- $stmt->bindParam(`:si_name`, $si_name);
- $stmt->bindParam(`:si_cat_id`, $si_cat_id);
- $stmt->bindParam(`:si_yijia_url`, $si_yijia_url);
- $stmt->bindParam(`:si_logo_url`, $si_logo_url);
- $stmt->bindParam(`:si_front_desc`, $si_front_desc);
- $stmt->bindParam(`:si_add_time`, $si_add_time);
- $file = file_get_contents($url);
- $dom = phpQuery::newDocument($file); //初始化物件
- foreach ($dom->find(`div.shopping_list`) as $item){ //迴圈節點
- $si_name = pq($item)->find(`h2:first > a:first`)->text(); //店鋪名稱
- $si_cat_id = $sc_parent_id; //分類名稱
- $si_yijia_url = SHOP_BASE_URL.pq($item)->find(`h2:first > a:first`)->attr(`href`); //一家網中商家介紹頁面
- $si_logo_url = pq($item)->find(`div.fl > a > img:first`)->attr(`src`);
- $si_front_desc = pq($item)->find(`div.shopping_description:first`)->text();
- $si_add_time = time();
- $stmt->execute();
- }
- phpQuery::$documents = array();
- sleep(1);//休息一秒 友情點 不要給他們太大壓力是吧
- return true;
- }
- echo `over`;
- die();
第六步:獲取商家的真實url 和具體的描述
- <?php
- /*
- * 獲取商家的具體資訊
- */
- header(“Content-type:text/html;charset=utf8”);
- set_time_limit(0);
- define(`SHOP_BASE_URL`, `http://shop.yijia.com`);
- require_once `conn.php`; //資料庫初始化
- require(`phpQuery/phpQuery.php`); //採集器初始化
- $Sql = `SELECT si_id,si_yijia_url FROM yj_shop_information WHERE si_shop_url =“ `;
- $un_grab_cat = $DBH->query($Sql)->fetchAll(); //所有的沒有被重新爬取的商家url
- //更新預處理SQL
- $stmt = $DBH->prepare(`UPDATE yj_shop_information SET si_shop_url=:si_shop_url,si_true_url=:si_true_url,si_desc=:si_desc WHERE si_id=:si_id`);
- $si_true_url = $si_shop_url = $si_desc = $si_id = $sc_add_time = null;
- $stmt->bindParam(`:si_true_url`, $si_true_url); //
- $stmt->bindParam(`:si_shop_url`, $si_shop_url); //
- $stmt->bindParam(`:si_desc`, $si_desc);
- $stmt->bindParam(`:si_id`, $si_id);
- $i=1;
- foreach ($un_grab_cat as $_key => $_value){
- $si_yijia_url = $_value[`si_yijia_url`];
- $si_id = $_value[`si_id`];//id
- $file = file_get_contents($si_yijia_url);
- $dom = phpQuery::newDocument($file); //初始化物件
- $si_shop_url = SHOP_BASE_URL.pq(`div.shop_logo > a:first`)->attr(`href`);
- $http_info = getContents($si_shop_url);
- $si_true_url = $http_info[`url`];
- $si_desc = pq(`div.shop_detailinfo > strong:first`)->text();
- $stmt->execute();
- if(fmod($i,3) == 0)
- sleep(1);
- $i++;
- phpQuery::$documents = array();
- }
- function getContents($url){
- $header = array(“Referer:http://www.tx29.com/”);
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, $url);
- curl_setopt($ch, CURLOPT_TIMEOUT, 30);
- curl_setopt($ch, CURLOPT_HTTPHEADER,$header);
- curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
- ob_start();
- curl_exec($ch);
- ob_end_clean();
- $x = curl_getinfo($ch);
- curl_close($ch);
- return $x;
- }
- echo `over`;
- die();
最後算了下時間 如果友情爬取的話需要48個小時。可以分幾個ip多個指令碼跑沒問題。 那個我 這裡爬取好的資料如果非同行需要的話 留言聯絡…..同行的就自己抓取把
這裡最後說下不要暴力爬取哦
本文轉自kefirking 51CTO部落格,原文連結:http://blog.51cto.com/phpzf/799555,如需轉載請自行聯絡原作者
相關文章
- 抖音商家資訊採集器,抖音小店採集 電話採集
- iOS視訊流採集概述(AVCaptureSession)iOSAPTSession
- 招聘資訊採集
- 淘寶商家電話採集,淘寶天貓商家號碼採集軟體
- 優惠券採集資訊
- 工商資訊資料採集思路
- .NET 音訊採集音訊
- PHP 資料採集的一種思路PHP
- 地圖資料採集,包括百度地圖採集,高德地圖採集,360地圖採集地圖
- 資料採集的方法有哪些
- 圖書網站資訊採集網站
- 人員基礎資訊採集
- [方法]需求挖掘採集的方法
- 抖店商家電話採集軟體 抖音小店店鋪電話批次採集工具
- vs聯合halcon——採集影像(實時採集與單次採集)
- 自媒體素材採集平臺,素材採集方法都有這些
- 阿里國際站商家採集軟體 實時匯出店鋪資訊阿里
- Prometheus採集Java程式指標資訊PrometheusJava指標
- 1688國際站商家電話採集工具分享
- 裝置採集及上報通訊範本
- 【資料分析】抖音商家電話採集軟體資料分析
- 資料採集知識分享|4大資料採集方式都有什麼?大資料
- PHP使用QueryList採集微信文章頁PHP
- PHP 採集程式中日常的引數PHP
- 高併發資料採集:Ebay商家資訊多程式爬蟲的進階實踐爬蟲
- 阿里巴巴商家電話採集軟體如何匯出資料阿里
- 阿里國際站店鋪採集軟體 實時匯出商家號碼資訊阿里
- API採集介面原始碼電商採集工具介面API原始碼
- 前端埋點資料採集(一)採集系統架構設計前端架構
- 【京東】商品list列表採集+類目下的商品列表資料採集
- 三菱數控採集方法
- 最新採集下載QQ空間相簿照片的方法
- iOS視訊採集實戰(AVCaptureSession)iOSAPTSession
- Audio Unit採集音訊實戰音訊
- Android 音視訊採集那些事Android
- 出行平臺採集機票價格資訊
- amazon產品採集資料
- phpQuery採集網站資料PHP網站
- 資料採集實驗四