Home  >  Article  >  php教程  >  抓取“全球 IC 采购网”供应商程序

抓取“全球 IC 采购网”供应商程序

WBOY
WBOYOriginal
2016-06-13 10:47:21785browse

/** 
* 抓取“全球 IC 采购网(http://www.qic.com.cn/)”供应商主程序 
* author Lee. 
* Last modify $Date: 2012-2-7 09:35:21 $ 
*/ 
require_once './config.inc.php'; 
class qic{ 
    private $startId; 
    private $endId; 
     
    public function __construct() { 
        $this->startId = 27688; 
        $this->endId = 55185; 
    } 
     
    public function go() { 
        for ($i=$this->startId; $iendId; $i++) { 
            $infoArr = $this->getInfoByUrl($this->getUrl($i)); 
            if (emptyempty($infoArr['company'])) continue; 
            $m = new Model(); 
            if ($m->isExists('qic', "company='{$infoArr['company']}'")) { 
                echo 'Data Exists!!'; continue; 
            } else { 
                if ($this->addInfoInDB($m, $infoArr)) { 
                    echo 'Add Success!!'; 
                } else { 
                    echo 'Add Faild!!'; 
                } 
            } 
        } 
    } 
     
    /**
     * 添加数据进数据库
     * @param Object $m
     * @param array $infoArr
     * @return Number
     */ 
    private function addInfoInDB($m ,$infoArr) { 
        $num = null; 
        $num = $m->insert('qic', array('company', 'person', 'phone', 'mobile', 'fax', 'qq', 'msn', 'email', 'address', 'website', 'shopUrl'), array($infoArr['company'], $infoArr['person'], $infoArr['phone'], $infoArr['mobile'], $infoArr['fax'], $infoArr['qq'], $infoArr['msn'], $infoArr['email'], $infoArr['address'], $infoArr['website'], $infoArr['shopUrl'])); 
        return $num; 
    } 
     
    /**
     * 根据供应商地址获取信息
     * @param string $re
     * @return ArrayObject
     */ 
    private function getInfoByUrl($url) { 
        $re = file_get_contents($url); 
        preg_match_all('/

(.*)/Usi', $re, $companyArr); 
        preg_match_all('/
  • \s*联 系 人:(.*)/Usi', $re, $personArr); 
            preg_match_all('/
  • \s*电 话:(.*)/Usi', $re, $phoneArr); 
            preg_match_all('/
  • \s*手 机:(.*)/Usi', $re, $mobileArr); 
            preg_match_all('/
  • \s*传 真:(.*)/Usi', $re, $faxArr); 
            preg_match_all('/
  • \s*QQ:(.*)/Usi', $re, $qqArr); 
            preg_match_all('/
  • \s*MSN:(.*)/Usi', $re, $msnArr); 
            preg_match_all('/
  • \s*邮 箱:(.*)/Usi', $re, $emailArr); 
            preg_match_all('/公司地址:(.*)/Usi', $re, $addressArr); 
            preg_match_all('/公司网址:(.*)/Usi', $re, $websiteArr); 
            $infoArr = array( 
                'company'=>$this->formatString($companyArr[1][0]), 
                'person'=>$this->formatString($personArr[1][0]), 
                'phone'=>$this->formatString($phoneArr[1][0]), 
                'mobile'=>$this->formatString($mobileArr[1][0]), 
                'fax'=>$this->formatString($faxArr[1][0]), 
                'qq'=>$this->formatString($qqArr[1][0], 'qm'), 
                'msn'=>$this->formatString($msnArr[1][0], 'qm'), 
                'email'=>$this->formatString($emailArr[1][0]), 
                'address'=>$this->formatString($addressArr[1][0]), 
                'website'=>$this->formatString($websiteArr[1][0], 'a'), 
                'shopUrl'=>$url 
            ); 
            return $infoArr; 
        } 
         
        /**
         * 获取页面内容
         * @param string $url
         * @return string
         */ 
        private function getContent($url) { 
            $re = file_get_contents($url); 
            return $re;  
        } 
         
        /**
         * 格式化字符串
         * @param string $str
         * @param string $type 类型
         * @return string
         */ 
        private function formatString($str, $type='default') { 
            $str = trim($str); 
            switch ($type) { 
                case 'default': 
                    return emptyempty($str) ? '' : $str;  
                    break; 
                case 'qm': # 处理QQ 
                    if (emptyempty($str)) return ''; 
                    preg_match_all('/\'(.+)\'/si', $str, $arr); 
                    return trim($arr[1][0]); 
                    break; 
                case 'a': 
                    $str = preg_replace('/(.+)/', '\1', $str); 
                    return $str; 
                    break; 
                default: 
                    return ''; 
                    break; 
            } 
        } 
         
        /**
         * 获取供应商页面地址 www.2cto.com
         * @param int $shopId
         * @return string
         */ 
        private function getUrl($shopId) { 
            return "http://www.qic.com.cn/specialstore/tsh_{$shopId}.html";  
        } 
         

     
    /*
     * 表结构
     CREATE TABLE `qic` (
        `id` mediumint(8) unsigned NOT NULL auto_increment,
        `company` varchar(500) NOT NULL,
        `person` varchar(500) NOT NULL,
        `phone` varchar(300) NOT NULL,
        `mobile` varchar(300) NOT NULL,
        `fax` varchar(300) NOT NULL,
        `qq` varchar(300) NOT NULL,
        `msn` varchar(500) NOT NULL,
        `email` varchar(500) NOT NULL,
        `address` varchar(500) NOT NULL,
        `website` varchar(500) NOT NULL,
        `shopUrl` varchar(200) NOT NULL,
        PRIMARY KEY  (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
     * */ 
     
    $q = new qic(); 
    $q->go(); 
    ?> 

    摘自 Lee.的专栏
  • Statement:
    The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
    Previous article:php 采集入库Next article:EE开发参考