ホームページ >バックエンド開発 >PHPチュートリアル >「ICトレーディングネットワーク」サプライヤープログラムのキャプチャ_PHPチュートリアル

「ICトレーディングネットワーク」サプライヤープログラムのキャプチャ_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:48:531241ブラウズ

/**
*「ICトレーディングネットワーク」サプライヤーメインプログラムをキャプチャ
*著者リー
* 最終変更 $Date: 2012-2-6 10:44:32$
* 注: 「IC Trading Network」の Web サイトは GB2312 でエンコードされており、データベースは一貫している必要があるため、このプログラムは GB2312 エンコードに従って実行されます
*/
クラス ic {
    プライベート$キー; // 型号
    プライベート $pageNum; // 页码
 
    /**
※エントリー手順
​​*/
    パブリック関数 go($key) {
        $this->key = $key; 
        $this->pageNum = $this->getPageNum(); 
        $this->getInfo(); 
    }
 
    /**
* サプライヤーの URL リンク配列を取得します
* @return ArrayObject
​​*/
    プライベート関数 getInfo() {
        if ($this->pageNum==1) { # 处理只有一页的情况
            $arr = $this->shopUrlMatchReArr($this->getContent()); 
            $this->isAddSuccess($arr); 
        } elseif ($this->pageNum>1) { # 多页
            for ($i=1; $i<=$this->pageNum; $i++) {
                $arr = $this->shopUrlMatchReArr($this->getContent($i)); 
                $this->isAddSuccess($arr); 
            }
        }
    }
     
    /**
* 追加が成功したかどうかを出力します
* @param ArrayObject $arr
* @戻り文字列
​​*/
    プライベート関数 isAddSuccess($arr) {
        foreach ($arr as $k=>$v) {
            if ($this->execAdd($this->getInfoByShopUrl($v))) {
                echo '追加成功!!'; 
            } その他 {
                echo '追加に失敗しました!!'; 
            }
        }
    }
 
    /**
* データベースへの追加を実行
* @param ArrayObject $infoArr
* @return Number 影響を受ける行の数
​​*/
    プライベート関数 execAdd($infoArr) {
        $mysqli = $this->getDb(); 
        if (!emptyempty($infoArr['company'])) {
            if (!$this->isExists($mysqli, $infoArr)) {
                $num = $mysqli->query("INSERT INTO ic(company,address,phone,mobile,fax,zip,person,qq,msn,email,website,regDate,shopUrl) VALUES ('{$infoArr['company ']}'、'{$infoArr['アドレス']}'、'{$infoArr['電話']}'、'{$infoArr['モバイル']}'、'{$infoArr['ファックス'] }','{$infoArr['zip']}','{$infoArr['person']}','{$infoArr['qq']}','{$infoArr['msn']}' ,'{$infoArr['email']}','{$infoArr['website']}','{$infoArr['regDate']}','{$infoArr['shopUrl']}')" ); 
                $num を返します。 
            } その他 {
                false を返します。 #表示数据已经存在
            }
        } その他 {
            false を返します。 
        }
    }
 
    /**
* データベースに接続します
​​*/
    プライベート関数 getDb() {
        $mysqli = new mysqli('localhost', 'root', '1715544', 'weiku'); 
        $mysqli->query('SET NAMES GB2312'); 
        $mysqli を返します。 
    }
 
    /**
* 会社がすでに存在するかどうかを確認してください
* @param リソース $mysqli
* @param ArrayObject $infoArr
* @return bool
​​*/
    プライベート関数 isExists($mysqli, $infoArr) {
        $mysqli->query("SELECT company FROM ic WHERE company = '{$infoArr['company']}'"); 
        if ($mysqli->affected_rows) {
            true を返します。 
        } その他 {
            false を返します。 
        }
    }
 
    /**
* フォーマット文字列
* @param 文字列 $str
* @戻り文字列
​​*/
    プライベート関数 formatString($str) {
        トリム($str)を返します; 
    }
 
    /**
*情報を入手
* @param $url
* @return ArrayObject
​​*/
    プライベート関数 getInfoByShopUrl($url) {
        $re = $this->getUrlInfo($url); 
        if (stristr($re, '')) $re = preg_replace('/.*/Usi', ' '、$re); 
        preg_match_all('/(.+)/Usi', $re, $companyArr); 
        preg_match_all('/地址:(.*)/Usi', $re, $addressArr); 
        preg_match_all('/電话:(.*)/Usi', $re, $phoneArr); 
        preg_match_all('/手机:(.*)/Usi', $re, $mobileArr); 
        preg_match_all('/传真:(.*)/Usi', $re, $faxArr); 
        preg_match_all('/邮编:(.*)/Usi', $re, $zipArr); 
        preg_match_all('/联系人:(.*)/Usi', $re, $personArr); 
        preg_match_all('/QQ:(.*)/Usi', $re, $qqArr); 
        preg_match_all('/MSN:(.*)/Usi', $re, $msnArr); 
        preg_match_all('/Email:(.*)/Usi', $re, $emailArr); 
        preg_match_all('/网址:(.*)/Usi', $re, $websiteArr); 
        preg_match_all('/注册日期:(.*)/Usi', $re, $regDateArr); 
        $infoArr = array(
            'company'=>$this->formatString($companyArr[1][0]),
            'address'=>$this->formatString($addressArr[1][0]),
            'phone'=>$this->formatString($phoneArr[1][0]),
            'mobile'=>$this->formatString($mobileArr[1][0]),
            'fax'=>$this->formatString($faxArr[1][0]),
            'zip'=>$this->formatString($zipArr[1][0]),
            'person'=>$this->formatString($personArr[1][0]),
            'qq'=>$this->formatString($qqArr[1][0]),
            'msn'=>$this->formatString($msnArr[1][0]),
            'email'=>$this->formatString($emailArr[1][0]),
            'website'=>$this->stripATags($this->formatString($websiteArr[1][0])),
            'regDate'=>$this->formatString($regDateArr[1][0]),
            'shopUrl'=>$url
        ); 
        $infoArr を返します。 
    }
 
    /**
* ページに基づいてサプライヤー URL 配列を取得します
* @param string $re
* @return ArrayObject
​​*/
    プライベート関数 shopUrlMatchReArr($re) {
        preg_match_all('/.+/Usi', $re, $arr); 
        $arr = $this->formatUrlArr(array_unique($arr[1])); 
        $arr を返します。 
    }
     
    /**
* 配列のフォーマット
* @param 配列 $arr
* @return ArrayObject
​​*/
    プライベート関数 formatUrlArr($arr) {
        $newArr = 配列(); 
        foreach ($arr as $key=>$value) {
            if ($this->isExistsHttp($value)) {
                $newArr[$key] = $value; 
            }
        }
        $newArr を返します。 
    }
     
    /**
* QQ形式
* @param 文字列 $str
* @戻り文字列
​​*/
    プライベート関数 formatQqMsn($str, $e='QQ') {
        if (emptyempty($str)) は ''; を返します。 
        preg_match_all('/alt="'.$e.':(.+)"/Usi', $str, $arr); 
        if (count($arr[1])==1) $arr[1][0] を返します。 
        $newStr = null; 
        foreach ($arr[1] as $value) {
            $newStr .= $value 。 ' '; 
        }
        return rtrim($newStr, ' '); 
    }
 
    /**
     *去掉网址的A标签
     * @param string $site
     * @戻り文字列
     */
    プライベート関数stripATags($site) {
        $site = preg_replace('/(.+)/', '1', $site); 
        $site を返します。 
    }
 
    /**
* URLにhttp
が含まれているかどうかを確認してください * @param string $url
* @return bool
​​*/
    プライベート関数 isExistsHttp($url) {
        if (stristr($url, 'http://')) {
            true を返します。 
        } その他 {
            false を返します。 
        }
    }
     
    /**
* ページのコンテンツを取得します
* @param 番号 $page
* @戻り文字列
​​*/
    プライベート関数 getContent($page=1) {
        $re = file_get_contents($this->getUrl($this->key, $page)); 
        $re を返します。 
    }
     
    /**
* ページ番号を取得します
* @return 番号
​​*/
    プライベート関数 getPageNum() {
        $i = null; 
        $re = $this->getContent(); 
        preg_match_all('/共(.+)页/Usi', $re, $arr); 
        $i = $arr[1][0]; 
        $i を返します。 
    }
 
    /**
* URLリンクを取得します
* @param 文字列 $str
* @param int $page ページ番号
* @戻り文字列
​​*/
    プライベート関数 getUrl($str, $page=1) {
        return "http://www.ic.net.cn/partsearch/searchinstock.asp?newtype=1&area=&Page={$page}&partnumber={$str}&mfg=&DateCode=&QTY=&PRICE=&Exact=&orderby=inputdate&qty_filter= 50&usertype2=1&pack=; 
    }
 
    /**
* ページのコンテンツを取得します
* @param string $url
* @戻り文字列
​​*/
    プライベート関数 getUrlInfo($url) {
        $re = file_get_contents($url); 
        $re を返します。 
    }
}
 
/*
手順実行思路:「IC取引ネット」のIC検索機能により、入力型番号を検索し、供給業者情報を取得します
 
データ库结构
テーブル「ic」を作成します (
    `id` mediaint(8) unsigned NOT NULL auto_increment,
    `会社` varchar(500) NOT NULL,
    `address` varchar(500) デフォルト NULL,
    `phone` varchar(500) デフォルト NULL,
    `mobile` varchar(500) デフォルト NULL,
    `fax` varchar(300) デフォルト NULL,
    `zip` varchar(300) デフォルト NULL,
    `person` varchar(500) デフォルト NULL,
    `qq` varchar(300) デフォルト NULL,
    `msn` varchar(300) デフォルト NULL,
    `email` varchar(500) デフォルト NULL,
    `website` varchar(300) デフォルト NULL,
    `regDate` varchar(500) デフォルト NULL,
    主キー (`id`)
) エンジン=InnoDB デフォルト文字セット=gb2312
*/
 
$i = 新しい ic(); 
$arr = array_unique(array('MAX3232', 'AML8613', 'MT6225A', 'OM8373PS/N3/A', 'PT7313', 'MAX8212ESA', 'TL431', 'S3C2440', 'TMS320F2812PGFA', 'PCM1704' 、「AN6717」、「CA3162E」、「CA3161E」、「LM393N」、「DS18B20」、「SHT10」、「AML8613」、「AN6717」、「LM393N」、「CA3161E」、「CA3162E」、「PCM1704」、 STK392-040'、'K1667'、'MAX232'、'STM32F103'、'LM358')); 
foreach ($arr as $v) {
    $i->go($v); 
}
?> 
/**
*「ICトレーディングネットワーク」サプライヤーメインプログラムをキャプチャ
*著者リー
* 最終変更 $Date: 2012-2-6 10:44:32$
* 注: 「IC Trading Network」の Web サイトは GB2312 でエンコードされており、データベースは一貫している必要があるため、このプログラムは GB2312 エンコードに従って実行されます
*/
クラス ic {
 プライベート$キー; // 型号
 プライベート $pageNum; // 页幣

/**
*エントリープログラム
​*/
 パブリック関数 go($key) {
  $this->key = $key;
  $this->pageNum = $this->getPageNum();
  $this->getInfo();
 }

/**
* サプライヤーの URL リンク配列を取得します
* @return ArrayObject
​*/
 プライベート関数 getInfo() {
  if ($this->pageNum==1) { # 处理只有一页的情况
   $arr = $this->shopUrlMatchReArr($this->getContent());
   $this->isAddSuccess($arr);
  } elseif ($this->pageNum>1) { # 多页
   for ($i=1; $i<=$this->pageNum; $i++) {
    $arr = $this->shopUrlMatchReArr($this->getContent($i));
    $this->isAddSuccess($arr);
   }
  }
 }
 
 /**
* 追加が成功したかどうかを出力します
* @param ArrayObject $arr
* @戻り文字列
​*/
 プライベート関数 isAddSuccess($arr) {
  foreach ($arr as $k=>$v) {
   if ($this->execAdd($this->getInfoByShopUrl($v))) {
    echo '追加成功!!';
   } その他 {
    echo '追加に失敗しました!!';
   }
  }
 }

/**
* データベースへの追加を実行
* @param ArrayObject $infoArr
* @return Number 影響を受ける行の数
​*/
 プライベート関数 execAdd($infoArr) {
  $mysqli = $this->getDb();
  if (!empty($infoArr['company'])) {
   if (!$this->isExists($mysqli, $infoArr)) {
    $num = $mysqli->query("INSERT INTO ic(company,address,phone,mobile,fax,zip,person,qq,msn,email,website,regDate,shopUrl) VALUES ('{$infoArr['company ']}'、'{$infoArr['アドレス']}'、'{$infoArr['電話']}'、'{$infoArr['モバイル']}'、'{$infoArr['ファックス'] }','{$infoArr['zip']}','{$infoArr['person']}','{$infoArr['qq']}','{$infoArr['msn']}' ,'{$infoArr['email']}','{$infoArr['website']}','{$infoArr['regDate']}','{$infoArr['shopUrl']}')" );
    $num を返します;
   } その他 {
    false を返します。 #表示データすでに存在
   }
  } その他 {
   false を返します;
  }
 }

/**
* データベースに接続します
​*/
 プライベート関数 getDb() {
  $mysqli = new mysqli('localhost', 'root', '1715544', 'weiku');
  $mysqli->query('SET NAMES GB2312');
  $mysqli を返します;
 }

/**
* 会社がすでに存在するかどうかを確認してください
* @param リソース $mysqli
* @param ArrayObject $infoArr
* @return bool
​*/
 プライベート関数 isExists($mysqli, $infoArr) {
  $mysqli->query("SELECT company FROM ic WHERE company = '{$infoArr['company']}'");
  if ($mysqli->affected_rows) {
   true を返します;
  } その他 {
   false を返します;
  }
 }

/**
* フォーマット文字列
* @param 文字列 $str
* @戻り文字列
​*/
 プライベート関数 formatString($str) {
  トリムを返す($str);
 }

/**
*情報を入手
* @param $url
* @return ArrayObject
​*/
 プライベート関数 getInfoByShopUrl($url) {
  $re = $this->getUrlInfo($url);
  if (stristr($re, '')) $re = preg_replace('/.*/Usi', ' '、$re);
  preg_match_all('/(.+)/Usi', $re, $companyArr);
  preg_match_all('/地址:(.*)/Usi', $re, $addressArr);
  preg_match_all('/電话:(.*)/Usi', $re, $phoneArr);
  preg_match_all('/手机:(.*)/Usi', $re, $mobileArr);
  preg_match_all('/传真:(.*)/Usi', $re, $faxArr);
  preg_match_all('/邮编:(.*)/Usi', $re, $zipArr);
  preg_match_all('/联系人:(.*)/Usi', $re, $personArr);
  preg_match_all('/QQ:(.*)/Usi', $re, $qqArr);
  preg_match_all('/MSN:(.*)/Usi', $re, $msnArr);
  preg_match_all('/Email:(.*)/Usi', $re, $emailArr);
  preg_match_all('/网址:(.*)/Usi', $re, $websiteArr);
  preg_match_all('/注册日期:(.*)/Usi', $re, $regDateArr);
  $infoArr = 配列(
   'company'=>$this->formatString($companyArr[1][0]),
   'address'=>$this->formatString($addressArr[1][0]),
   'phone'=>$this->formatString($phoneArr[1][0]),
   'mobile'=>$this->formatString($mobileArr[1][0]),
   'fax'=>$this->formatString($faxArr[1][0]),
   'zip'=>$this->formatString($zipArr[1][0]),
   'person'=>$this->formatString($personArr[1][0]),
   'qq'=>$this->formatString($qqArr[1][0]),
   'msn'=>$this->formatString($msnArr[1][0]),
   'email'=>$this->formatString($emailArr[1][0]),
   'website'=>$this->stripATags($this->formatString($websiteArr[1][0])),
   'regDate'=>$this->formatString($regDateArr[1][0]),
   'shopUrl'=>$url
  );
  $infoArr;
を返します  }

/**
* ページに基づいてサプライヤー URL 配列を取得します
* @param string $re
* @return ArrayObject
​*/
 プライベート関数 shopUrlMatchReArr($re) {
  preg_match_all('/.+/Usi', $re, $arr);
  $arr = $this->formatUrlArr(array_unique($arr[1]));
  $arr を返します;
 }
 
 /**
* 配列のフォーマット
* @param 配列 $arr
* @return ArrayObject
​*/
 プライベート関数 formatUrlArr($arr) {
  $newArr = array();
  foreach ($arr as $key=>$value) {
   if ($this->isExistsHttp($value)) {
    $newArr[$key] = $value;
   }
  }
  $newArr;
を返します  }
 
 /**
* QQ形式
* @param 文字列 $str
* @戻り文字列
​*/
 プライベート関数 formatQqMsn($str, $e='QQ') {
  if (empty($str)) return '';
  preg_match_all('/alt="'.$e.':(.+)"/Usi', $str, $arr);
  if (count($arr[1])==1) return $arr[1][0];
  $newStr = null;
  foreach ($arr[1] を $value) {
   $newStr .= $value 。 ' ';
  }
  return rtrim($newStr, ' ');
 }

/**
※URLからAタグを削除してください
* @param string $site
* @戻り文字列
​*/
 プライベート関数stripATags($site) {
  $site = preg_replace('/(.+)/', '1', $site);
  $site を返します;
 }

/**
* URLにhttp
が含まれているかどうかを確認してください * @param string $url
* @return bool
​*/
 プライベート関数 isExistsHttp($url) {
  if (stristr($url, 'http://')) {
   true を返します;
  } その他 {
   false を返します;
  }
 }
 
 /**
* ページのコンテンツを取得します
* @param 番号 $page
* @戻り文字列
​*/
 プライベート関数 getContent($page=1) {
  $re = file_get_contents($this->getUrl($this->key, $page));
  $re を返します;
 }
 
 /**
* ページ番号を取得します
* @return 番号
​*/
 プライベート関数 getPageNum() {
  $i = null;
  $re = $this->getContent();
  preg_match_all('/共(.+)页/Usi', $re, $arr);
  $i = $arr[1][0];
  $i を返します;
 }

/**
* URLリンクを取得します
* @param 文字列 $str
* @param int $page ページ番号
* @戻り文字列
​*/
 プライベート関数 getUrl($str, $page=1) {
  return "http://www.ic.net.cn/partsearch/searchinstock.asp?newtype=1&area=&Page={$page}&partnumber={$str}&mfg=&DateCode=&QTY=&PRICE=&Exact=&orderby=inputdate&qty_filter= 50&usertype2=1&pack=;
 }

/**
* ページのコンテンツを取得します
* @param string $url
* @戻り文字列
​*/
 プライベート関数 getUrlInfo($url) {
  $re = file_get_contents($url);
  $re を返します;
 }
}

/*
手順実行思路:「IC取引ネット」のIC検索機能により、入力型番号を検索し、供給業者情報を取得します

データ据库结构
テーブル「ic」を作成します (
 `id` mediaint(8) unsigned NOT NULL auto_increment,
 `会社` varchar(500) NOT NULL,
 `address` varchar(500) デフォルト NULL,
 `phone` varchar(500) デフォルト NULL,
 `mobile` varchar(500) デフォルト NULL,
 `fax` varchar(300) デフォルト NULL,
 `zip` varchar(300) デフォルト NULL,
 `person` varchar(500) デフォルト NULL,
 `qq` varchar(300) デフォルト NULL,
 `msn` varchar(300) デフォルト NULL,
 `email` varchar(500) デフォルト NULL,
 `website` varchar(300) デフォルト NULL,
 `regDate` varchar(500) デフォルト NULL,
 主キー (`id`)
) エンジン=InnoDB デフォルト文字セット=gb2312
*/

$i = 新しい ic();
$arr = array_unique(array('MAX3232', 'AML8613', 'MT6225A', 'OM8373PS/N3/A', 'PT7313', 'MAX8212ESA', 'TL431', 'S3C2440', 'TMS320F2812PGFA', 'PCM1704' 、「AN6717」、「CA3162E」、「CA3161E」、「LM393N」、「DS18B20」、「SHT10」、「AML8613」、「AN6717」、「LM393N」、「CA3161E」、「CA3162E」、「PCM1704」、 STK392-040'、'K1667'、'MAX232'、'STM32F103'、'LM358'));
foreach ($arr as $v) {
 $i->go($v);
}
?>


摘自 Lee.的专栏

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/478401.html技術記事 ?php /** * 抓取IC交易网供应商主程序 * 著者 Lee. * 最終変更 $Date: 2012-2-6 10:44:32$ * 注:本程序按照编码 GB2312 実行,故に IC 交易网网站是 GB231...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。