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

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

WBOY
リリース: 2016-07-13 17:48:49
オリジナル
2612 人が閲覧しました

/**
*「中国ICネットワーク(http://www.ic37.com)」サプライヤーメインプログラムを入手してください
*著者リー
* 最終変更 $Date: 2012-2-9 9:32:21 $
* 注: 「中国 IC ネットワーク」の Web サイトは GB2312 でエンコードされており、データベースは一貫している必要があるため、このプログラムは GB2312 エンコードに従って実行されます
*/
クラス ic37 {
    プライベート$キー; // 型号
    プライベート $pageNum; // 页码
 
    /**
※エントリー手順
​​*/
    パブリック関数 go($key) {
        $this->key = $key; 
        $this->pageNum = $this->getPageNum(); 
        $this->getInfo(); 
    }
 
    /**
* サプライヤーの URL リンク配列を取得します
* @return ArrayObject
​​*/
    プライベート関数 getInfo() {
        if ($this->pageNum==1) { # 处理只有一页的情况
            $arr = $this->shopAddContact($this->gt;shopUrlMatchReArr($this->getContent())); 
            $this->isAddSuccess($arr); 
        } elseif ($this->pageNum>1) { # 多页
            for ($i=1; $i<=$this->pageNum; $i++) {
                $arr = $this->shopAddContact($this->gt;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 ic37(会社,個人,電話,モバイル,qq,msn,fax,電子メール,住所,国,地域,zip,web,shopUrl) VALUES ('{$infoArr[ '会社']}','{$infoArr['個人']}','{$infoArr['電話']}','{$infoArr['モバイル']}','{$infoArr['qq ']}','{$infoArr['msn']}','{$infoArr['fax']}','{$infoArr['email']}','{$infoArr['address'] }','{$infoArr['country']}','{$infoArr['region']}','{$infoArr['zip']}','{$infoArr['web']}' ,'{$infoArr['shopUrl']}')"); 
$num を返します。                                                                                            falseを返します。                                                                        } else {
false を返します
}
}

プライベート関数 formatStr($str) {
$str = トリム($str); $str = str_replace(' ', '', $str); $str = str_replace('==お問い合わせください', '', $str); 戻り $str; }

/**
* データベースに接続します
​​*/
プライベート関数 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 weiku WHERE company = '{$infoArr['company']}'"); If ($mysqli->affected_rows) {
true を返します。 } else {
false を返します
}
}

/**
*情報を入手
* @param $url
* @return ArrayObject
​​*/
プライベート関数 getInfoByShopUrl($url) {
$re = preg_replace('/(.*)/', '1', str_replace('', '', str_replace('<フォントの色) ="#000099">', '', $this->getUrlInfo($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('/QQ:s*(.*)/Usi', $re, $qqArr); preg_match_all('/MSN:s*(.*)/Usi', $re, $msnArr); preg_match_all('/Fax:s*(.*)/Usi', $re, $faxArr);        preg_match_all('/EMail:s*(.*)/Usi', $re, $emailArr); 
        preg_match_all('/司地址[:]*[]*[]*[:]*[]*s*         preg_match_all('/国家[:]*[]*[:]*[]*s*         preg_match_all('/地区:s*(.*)/Usi', $re, $regionArr); 
        preg_match_all('/邮政编码:s*(.*)/Usi', $re, $zipArr); 
        preg_match_all('/s*网址[1]*:s*(.*)/Usi', $re 、$webArr); 
        $infoArr = array(
            'company'=>$this->formatStr($companyArr[1][0]),
            'person'=>$this->formatStr($personArr[1][0]),
            'phone'=>$this->formatStr($phoneArr[1][0]),
            'mobile'=>$this->formatStr($mobileArr[1][0]),
            'qq'=>$this->formatStr($qqArr[1][0]),
            'msn'=>$this->formatStr($msnArr[1][0]),
            'fax'=>$this->formatStr($faxArr[1][0]),
            'email'=>$this->formatStr($emailArr[1][0]),
            'address'=>$this->formatStr($addressArr[1][0]),
            'country'=>$this->formatStr($countryArr[1][0]),
            'region'=>$this->formatStr($regionArr[1][0]),
            'zip'=>$this->formatStr($zipArr[1][0]),
            'web'=>$this->formatStr($webArr[1][0]),
            'shopUrl'=>$url
        ); 
        $infoArr を返します。 
    }
 
    /**
* ページに基づいてサプライヤー URL 配列を取得します
* @param string $re
* @return ArrayObject
​​*/
    プライベート関数 shopUrlMatchReArr($re) {
        preg_match_all('/

[]*.*[< /font>]*s*

/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, ' '); 
    }
 
    /**
* サプライヤーストアリンク contact.asp を追加しました
* @param 配列 $arr
* @return 文字列
​​*/
    プライベート関数 shopAddContact($arr) {
        foreach ($arr as $k=>$v) {
            if (stristr($v, 'contact.asp')===FALSE)
                $newArr[$k] = $this->addContact($v); 
            その他
                $newArr[$k] = $v; 
        }
        $newArr を返します。 
    }
     
    /**
* リンク contact.asp を追加
* @param 文字列 $str
* @return 文字列
​​*/
    プライベート関数 addContact($str) {
        $str を返します。 '/contact.asp'; 
    }
 
    /**
※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() {
Preg_match_all('/合計 .* レコードが (.*) ページに表示されます/Usi', $this->getContent(), $arr); $arr[1][0] を返します
}

/**
* URLリンクを取得します
* @param 文字列 $str
* @param int $page ページ番号
* @戻り文字列
​​*/
プライベート関数 getUrl($str, $page=1) {
「http://www.ic37.com/sell/search.asp?keyword={$str}&x=86&y=22&page={$page}」を返します
}

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

/*
プログラム実行アイデア:「中国ICネットワーク」のIC検索機能に従って、モデル番号を入力して検索し、サプライヤー情報を取得します

データベース構造
テーブル`ic37`を作成します(
`id` mediaint(8) unsigned NOT NULL auto_increment,
`company` varchar(500) デフォルト NULL,
`person` varchar(500) デフォルト NULL,
`phone` varchar(500) デフォルト NULL,
`mobile` varchar(500) デフォルト NULL,
`qq` varchar(500) デフォルト NULL,
`msn` varchar(500) デフォルト NULL,
`fax` varchar(500) デフォルト NULL,
`email` varchar(500) デフォルト NULL,
`address` varchar(1000) デフォルト NULL,
`country` varchar(500) デフォルト NULL,
`region` varchar(500) デフォルト NULL,
`zip` varchar(500) デフォルト NULL,
`web` varchar(500) デフォルト NULL,
`shopUrl` varchar(500) デフォルト NULL,
主キー (`id`)
) エンジン=InnoDB デフォルト文字セット=gb2312
*/

$k = 新しい ic37(); $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'、'NE555'、'78L05'、'LM324'、'TL431'、'PC817'、'7805'、'LM339'、'LM317 '、'46A-3GRI'、'モデル​​'、'78L05'、'93C46-3GRI'、'8050'、'DS18B20'、'TDA2030'、'LM393'、'74HC595'、'6N137'、'SN75176BDR') ); foreach ($arr as $v) {
$k->go($v); }
?>
/**
*「中国ICネットワーク(http://www.ic37.com)」サプライヤーメインプログラムを入手してください
*著者リー
* 最終変更 $Date: 2012-2-9 9:32:21 $
* 注: 「中国 IC ネットワーク」の Web サイトは GB2312 でエンコードされており、データベースは一貫している必要があるため、このプログラムは GB2312 エンコードに従って実行されます
*/
クラス ic37 {
プライベート $key // モデル
private $pageNum // ページ番号
;
/**
*エントリープログラム
​*/
パブリック関数 go($key) {
$this->key = $key;

$this->pageNum = $this->getPageNum();

$this->getInfo();
}

/**
* サプライヤーの URL リンク配列を取得します
* @return ArrayObject
​*/
 プライベート関数 getInfo() {
  if ($this->pageNum==1) { # 处理只有一页的情况
   $arr = $this->shopAddContact($this->gt;shopUrlMatchReArr($this->getContent()));
   $this->isAddSuccess($arr);
  } elseif ($this->pageNum>1) { # 多页
   for ($i=1; $i<=$this->pageNum; $i++) {
    $arr = $this->shopAddContact($this->gt;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 ic37(会社,個人,電話,モバイル,qq,msn,fax,電子メール,住所,国,地域,zip,web,shopUrl) VALUES ('{$infoArr[ '会社']}','{$infoArr['個人']}','{$infoArr['電話']}','{$infoArr['モバイル']}','{$infoArr['qq ']}','{$infoArr['msn']}','{$infoArr['fax']}','{$infoArr['email']}','{$infoArr['address'] }','{$infoArr['country']}','{$infoArr['region']}','{$infoArr['zip']}','{$infoArr['web']}' ,'{$infoArr['shopUrl']}')");
    $num を返します;
   } その他 {
    false を返します。 #表示データすでに存在
   }
  } その他 {
   false を返します;
  }
 }
 
 プライベート関数 formatStr($str) {
  $str = トリム($str);
  $str = str_replace(' ', '', $str);
  $str = str_replace('==联系我们', '', $str);
  $str;
を返します  }

/**
* データベースに接続します
​*/
 プライベート関数 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 weiku WHERE company = '{$infoArr['company']}'");
  if ($mysqli->affected_rows) {
   true を返します;
  } その他 {
   false を返します;
  }
 }

/**
*情報を入手
* @param $url
* @return ArrayObject
​*/
 プライベート関数 getInfoByShopUrl($url) {
  $re = preg_replace('/(.*)/', '1', str_replace('
', '', str_replace('<フォントの色) ="#000099">', '', $this->getUrlInfo($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('/QQ:s*(.*)/Usi', $re, $qqArr);
  preg_match_all('/MSN:s*(.*)/Usi', $re, $msnArr);
  preg_match_all('/传真:s*(.*)/Usi', $re, $faxArr);
  preg_match_all('/EMail:s*(.*)/Usi', $re, $emailArr);
  preg_match_all('/司地址[:]*[]*[]*[:]*[]*s*/Usi', $re, $addressArr);
  preg_match_all('/国家[:]*[]*[:]*[]*s*   preg_match_all('/地区:s*(.*)/Usi', $re, $regionArr);
  preg_match_all('/邮政编码:s*(.*)/Usi', $re, $zipArr);
  preg_match_all('/s*网址[1]*:s*(.*)/Usi', $re 、$webArr);
  $infoArr = 配列(
   'company'=>$this->formatStr($companyArr[1][0]),
   'person'=>$this->formatStr($personArr[1][0]),
   'phone'=>$this->formatStr($phoneArr[1][0]),
   'mobile'=>$this->formatStr($mobileArr[1][0]),
   'qq'=>$this->formatStr($qqArr[1][0]),
   'msn'=>$this->formatStr($msnArr[1][0]),
   'fax'=>$this->formatStr($faxArr[1][0]),
   'email'=>$this->formatStr($emailArr[1][0]),
   'address'=>$this->formatStr($addressArr[1][0]),
   'country'=>$this->formatStr($countryArr[1][0]),
   'region'=>$this->formatStr($regionArr[1][0]),
   'zip'=>$this->formatStr($zipArr[1][0]),
   'web'=>$this->formatStr($webArr[1][0]),
   'shopUrl'=>$url
  );
  $infoArr;
を返します  }

/**
* ページに基づいてサプライヤー URL 配列を取得します
* @param string $re
* @return ArrayObject
​*/
 プライベート関数 shopUrlMatchReArr($re) {
  preg_match_all('/

[]*.*[< /font>]*s*

/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, ' ');
 }

/**
*サプライヤーストアリンク contact.asp を追加
* @param 配列 $arr
* @return 文字列
​*/
 プライベート関数 shopAddContact($arr) {
  foreach ($arr as $k=>$v) {
   if (stristr($v, 'contact.asp')===FALSE)
    $newArr[$k] = $this->addContact($v);
   それ以外
    $newArr[$k] = $v;
  }
  $newArr;
を返します  }
 
 /**
* リンク contact.asp を追加
* @param 文字列 $str
* @return 文字列
​*/
 プライベート関数 addContact($str) {
  $str を返します。 '/contact.asp';
 }

/**
※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() {
  preg_match_all('/共.*条记录分(.*)页显示/Usi', $this->getContent(), $arr);
  $arr[1][0]を返します;
 }

/**
* URLリンクを取得します
* @param 文字列 $str
* @param int $page ページ番号
* @戻り文字列
​*/
 プライベート関数 getUrl($str, $page=1) {
  return "http://www.ic37.com/sell/search.asp?keyword={$str}&x=86&y=22&page={$page}";
 }

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

/*
程序行思路:「中国ICネット」のIC検索機能に基づいて入力型番号を検索し、提供販売情報を取得します

データ据库结构
テーブル`ic37`を作成します(
 `id` mediaint(8) unsigned NOT NULL auto_increment,
 `company` varchar(500) デフォルト NULL,
 `person` varchar(500) デフォルト NULL,
 `phone` varchar(500) デフォルト NULL,
 `mobile` varchar(500) デフォルト NULL,
 `qq` varchar(500) デフォルト NULL,
 `msn` varchar(500) デフォルト NULL,
 `fax` varchar(500) デフォルト NULL,
 `email` varchar(500) デフォルト NULL,
 `address` varchar(1000) デフォルト NULL,
 `country` varchar(500) デフォルト NULL,
 `region` varchar(500) デフォルト NULL,
 `zip` varchar(500) デフォルト NULL,
 `web` varchar(500) デフォルト NULL,
 `shopUrl` varchar(500) デフォルト NULL,
 主キー (`id`)
) エンジン=InnoDB デフォルト文字セット=gb2312
*/

$k = 新しい ic37();
$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'、'NE555'、'78L05'、'LM324'、'TL431'、'PC817'、'7805'、'LM339'、' LM317'、'46A-3GRI'、'モデル​​'、'78L05'、'93C46-3GRI'、'8050'、'DS18B20'、'TDA2030'、'LM393'、'74HC595'、'6N137'、'SN75176BDR' ));
foreach ($arr as $v) {
 $k->go($v);
}
?>


摘自 Lee.的专栏

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/478403.html技術記事 ?php /** * 抓取中国 IC 网(http://www.ic37.com)提供应商主程序 * 著者 Lee. * 最終変更 $Date: 2012-2-9 9:32:21 $ * 注:本程序按照编码 GB2312 执行,因為中...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート