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

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

Jul 13, 2016 pm 05:48 PM
modify php サプライヤー クロール プログラム

/**
*「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 までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

この章では、CakePHP の環境変数、一般設定、データベース設定、電子メール設定について理解します。

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

この章では、ルーティングに関連する次のトピックを学習します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

See all articles