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

「Weiku Electronic Market」サプライヤー プログラムのキャプチャ_PHP チュートリアル

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2016-07-13 17:48:55
オリジナル
917 人が閲覧しました

/**
*「Weiku Electronic Market」のサプライヤーメインプログラムをキャプチャ
*著者リー
* 最終変更 $Date: 2012-2-3 9:30:21 $
* 注: 「Weiku Electronic Market」の Web サイトは GB2312 でエンコードされており、データベースも一貫している必要があるため、このプログラムは GB2312 エンコードに従って実行されます
*/
クラスウェイク {
    プライベート$キー; // 型号
    プライベート $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; $ipageNum; $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 weiku(company,person,phone,fax,mobile,qq,msn,email,address,shopUrl) VALUES ('{$infoArr['company']}',' {$infoArr['person']}','{$infoArr['phone']}','{$infoArr['fax']}','{$infoArr['mobile']}','{$ infoArr['qq']}','{$infoArr['msn']}','{$infoArr['メール']}','{$infoArr['アドレス']}','{$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 weiku WHERE company = '{$infoArr['company']}'"); 
        if ($mysqli->affected_rows) {
            true を返します。 
        } その他 {
            false を返します。 
        }
    }
 
    /**
*情報を入手
* @param $url
* @return ArrayObject
​​*/
    プライベート関数 getInfoByShopUrl($url) {
        $re = $this->getUrlInfo($url); 
        preg_match_all('/公司名:(.*)/Usi', $re, $companyArr); 
        preg_match_all('/联系人:(.*)/Usi', $re, $personArr); 
        preg_match_all('/電话:(.*)/Usi', $re, $phoneArr); 
        preg_match_all('/传真:(.*)/Usi', $re, $faxArr); 
        preg_match_all('/手机:(.*)/Usi', $re, $mobileArr); 
        preg_match_all('/QQ:(.*)/Usi', $re, $qqArr); 
        preg_match_all('/MSN:(.*)/Usi', $re, $msnArr); 
        preg_match_all('/電子メール:(.*)/Usi', $re, $emailArr); 
        preg_match_all('/公司地址:(.*)/Usi', $re, $addressArr); 
        $infoArr = array(
            'company'=>$this->stripATags($companyArr[1][0])、
            'person'=>trim($personArr[1][0]),
            'phone'=>trim($phoneArr[1][0]),
            'fax'=>trim($faxArr[1][0]),
            'mobile'=>trim($mobileArr[1][0]),
            'qq'=>$this->formatQqMsn($qqArr[1][0]),
            'msn'=>$this->formatQqMsn($msnArr[1][0], 'MSN'),
            'email'=>$this->stripATags($emailArr[1][0]),
            'address'=>trim($addressArr[1][0]),
            'shopUrl'=>$url
        ); 
        $infoArr を返します。 
    }
 
    /**
* ページに基づいてサプライヤー URL 配列を取得します
* @param string $re
* @return ArrayObject
​​*/
    プライベート関数 shopUrlMatchReArr($re) {
        $re = preg_replace('/「Weiku Electronic Market」サプライヤー プログラムのキャプチャ_PHP チュートリアル/', '', $re); 
        $re = preg_replace('/「Weiku Electronic Market」サプライヤー プログラムのキャプチャ_PHP チュートリアル/', '', $re); 
        $re = preg_replace('/[A-Z]/', '', $re); 
        $re = preg_replace('/[0-9]/', '', $re); 
        $re = preg_replace('/.*/', '', $re); 
        $re = preg_replace('/.*/', '', $re); 
        $re = preg_replace('/营业执照/', '', $re); 
        $re = preg_replace('/该計画业更多资质>>/', '', $re); 
        $re = preg_replace('/点此反馈/', '', $re); 
        $re = preg_replace('/首页/', '', $re); 
        $re = preg_replace('/IC/', '', $re); 
        $re = preg_replace('/简洁/', '', $re); 
        $re = preg_replace('/信用/', '', $re); 
        $re = preg_replace('/.*更多报价情報>>/', '', $re); 
        $re = preg_replace('/.*/', '', $re); 
        $re = preg_replace('/

.*/', '', $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="「Weiku Electronic Market」サプライヤー プログラムのキャプチャ_PHP チュートリアル"/Usi', $str, $arr); 
        if (count($arr[1])==1) $arr[1][0] を返します。 
        $newStr = null; 
        foreach ($arr[1] as $value) {
            $newStr .= $value 。 ' '; 
        }
        return rtrim($newStr, ' '); 
    }
 
    /**
* サプライヤー ストアのリンク contact.html を追加しました
* @param 配列 $arr
* @return 文字列
​​*/
    プライベート関数 shopAddContact($arr) {
        foreach ($arr as $k=>$v) {
            $arr[$k] = $v 。 '/contact.html'; 
        }
        $arr を返します。 
    }
 
    /**
※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 = 1; 
        while (true) {
            $re = $this->getContent($i); 
            #处理单页回避处理死循環环
            if (!strstr($re, '下一页')) {
                壊す; 
                                                                                                                                                                                                                                                                                                                                ​ If (stristr($re, '次のページ'))
$i++;                                                                        }

$i を返します。 }

/**
* URLリンクを取得します
* @param 文字列 $str
* @param int $page ページ番号
* @戻り文字列
​​*/
プライベート関数 getUrl($str, $page=1) {
return "http://www.dzsc.com/ic/sell_search.html?keyword={$str}&ic_sel=supplygoods&Submit=%26%23160%3B&page={$page}";
/**
* ページのコンテンツを取得します
* @param string $url
* @戻り文字列
​​*/
プライベート関数 getUrlInfo($url) {
$re = file_get_contents($url);
$re を返します。 }
}

/*
プログラム実行アイデア: 「華強電子網」のIC検索機能に従って、モデル番号を入力して検索し、サプライヤー情報を取得します

データベース構造
CREATE TABLE `weiku` (
`id` mediaint(8) unsigned NOT NULL auto_increment COMMENT 'ID',
`company` varchar(300) デフォルト NULL コメント '会社名',
`person` varchar(200) デフォルト NULL コメント '連絡先',
`phone` varchar(300) デフォルト NULL コメント 'phone',
`fax` varchar(300) デフォルト NULL コメント 'FAX',
`mobile` varchar(300) デフォルト NULL コメント '携帯電話',
`qq` varchar(200) デフォルト NULL コメント 'QQ',
`msn` varchar(200) デフォルト NULL コメント 'MSN',
`email` varchar(300) デフォルト NULL コメント 'email',
`address` varchar(500) デフォルト NULL コメント '会社の住所',
`shopUrl` varchar(200) デフォルト NULL コメント 'Weiku.com ストアアドレス',
主キー (`id`)
) エンジン=InnoDB デフォルト文字セット=gb2312
*/

$k = 新しいweiku(); $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) {
$k->go($v); }
?>
/**
*「Weiku Electronic Market」のサプライヤーメインプログラムをキャプチャ
*著者リー
* 最終変更 $Date: 2012-2-3 9:30:21 $
* 注: 「Weiku Electronic Market」の Web サイトは GB2312 でエンコードされており、データベースも一貫している必要があるため、このプログラムは GB2312 エンコードに従って実行されます
*/
クラスウェイク{
プライベート $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; $ipageNum; $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 weiku(company,person,phone,fax,mobile,qq,msn,email,address,shopUrl) VALUES ('{$infoArr['company']}',' {$infoArr['person']}','{$infoArr['phone']}','{$infoArr['fax']}','{$infoArr['mobile']}','{$ infoArr['qq']}','{$infoArr['msn']}','{$infoArr['メール']}','{$infoArr['アドレス']}','{$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 weiku WHERE company = '{$infoArr['company']}'");
  if ($mysqli->affected_rows) {
   true を返します;
  } その他 {
   false を返します;
  }
 }

/**
*情報を入手
* @param $url
* @return ArrayObject
​*/
 プライベート関数 getInfoByShopUrl($url) {
  $re = $this->getUrlInfo($url);
  preg_match_all('/公司名:(.*)/Usi', $re, $companyArr);
  preg_match_all('/联系人:(.*)/Usi', $re, $personArr);
  preg_match_all('/電话:(.*)/Usi', $re, $phoneArr);
  preg_match_all('/传真:(.*)/Usi', $re, $faxArr);
  preg_match_all('/手机:(.*)/Usi', $re, $mobileArr);
  preg_match_all('/QQ:(.*)/Usi', $re, $qqArr);
  preg_match_all('/MSN:(.*)/Usi', $re, $msnArr);
  preg_match_all('/メール:(.*)/Usi', $re, $emailArr);
  preg_match_all('/公司地址:(.*)/Usi', $re, $addressArr);
  $infoArr = 配列(
   'company'=>$this->stripATags($companyArr[1][0]),
   'person'=>trim($personArr[1][0]),
   'phone'=>trim($phoneArr[1][0]),
   'fax'=>trim($faxArr[1][0]),
   'mobile'=>trim($mobileArr[1][0]),
   'qq'=>$this->formatQqMsn($qqArr[1][0]),
   'msn'=>$this->formatQqMsn($msnArr[1][0], 'MSN'),
   'email'=>$this->stripATags($emailArr[1][0]),
   'アドレス'=>trim($addressArr[1][0]),
   'shopUrl'=>$url
  );
  $infoArr;
を返します  }

/**
* ページに基づいてサプライヤー URL 配列を取得します
* @param string $re
* @return ArrayObject
​*/
 プライベート関数 shopUrlMatchReArr($re) {
  $re = preg_replace('/「Weiku Electronic Market」サプライヤー プログラムのキャプチャ_PHP チュートリアル/', '', $re);
  $re = preg_replace('/「Weiku Electronic Market」サプライヤー プログラムのキャプチャ_PHP チュートリアル/', '', $re);
  $re = preg_replace('/[A-Z]/', '', $re);
  $re = preg_replace('/[0-9]/', '', $re);
  $re = preg_replace('/.*/', '', $re);
  $re = preg_replace('/.*/', '', $re);
  $re = preg_replace('/营业执照/', '', $re);
  $re = preg_replace('/该計画业更多资质>>/', '', $re);
  $re = preg_replace('/点此反馈/', '', $re);
  $re = preg_replace('/首页/', '', $re);
  $re = preg_replace('/IC/', '', $re);
  $re = preg_replace('/简洁/', '', $re);
  $re = preg_replace('/信用/', '', $re);
  $re = preg_replace('/.*更多报价情報>>/', '', $re);
  $re = preg_replace('/.*/', '', $re);
  $re = preg_replace('/

.*/', '', $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="「Weiku Electronic Market」サプライヤー プログラムのキャプチャ_PHP チュートリアル"/Usi', $str, $arr);
  if (count($arr[1])==1) return $arr[1][0];
  $newStr = null;
  foreach ($arr[1] を $value) {
   $newStr .= $value 。 ' ';
  }
  return rtrim($newStr, ' ');
 }

/**
*サプライヤーストアリンク contact.html を追加
* @param 配列 $arr
* @return 文字列
​*/
 プライベート関数 shopAddContact($arr) {
  foreach ($arr as $k=>$v) {
   $arr[$k] = $v 。 '/contact.html';
  }
  $arr を返します;
 }

/**
※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 = 1;
while (true) {
$re = $this->getContent($i);
# 無限ループを避けるために単一ページを処理します
if (!strstr($re, '次のページ')) {
休憩
} その他 {
# 複数のページがある場合、ページ番号を計算します
If (stristr($re, '次のページ')) Break;
$i++;
}
}
$i を返します;
}

/**
* URLリンクを取得します
* @param 文字列 $str
* @param int $page ページ番号
* @戻り文字列
​*/
プライベート関数 getUrl($str, $page=1) {
retrn "http://www.dzsc.com/ic/sell_search.html?keyword={$str}&ic_sel=supplygoods&Submit=%26%23160%3B&page={$page}"u;


}

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

/*
プログラム実行アイデア: 「華強電子網」のIC検索機能に従って、モデル番号を入力して検索し、サプライヤー情報を取得します

データベース構造
CREATE TABLE `weiku` (
`id` mediaint(8) unsigned NOT NULL auto_increment COMMENT 'ID',
`company` varchar(300) デフォルト NULL コメント '会社名',
`person` varchar(200) デフォルト NULL コメント '連絡先',
`phone` varchar(300) デフォルト NULL コメント 'phone',
`fax` varchar(300) デフォルト NULL コメント 'FAX',
`mobile` varchar(300) デフォルト NULL コメント '携帯電話',
`qq` varchar(200) デフォルト NULL コメント 'QQ',
`msn` varchar(200) デフォルト NULL コメント 'MSN',
`email` varchar(300) デフォルト NULL コメント 'email',
`address` varchar(500) デフォルト NULL コメント '会社の住所',
`shopUrl` varchar(200) デフォルト NULL コメント 'Weiku.com ストアアドレス',
主キー (`id`)
) エンジン=InnoDB デフォルト文字セット=gb2312
*/

$k = 新しい weiku();
$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) {
$k->go($v);
}
?>


Lee.さんのコラムより抜粋

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/478400.html技術記事 ?php /** * Weiku 電子市場サプライヤーのメイン プログラムを取得します * 著者 Lee. * 最終変更 $Date: 2012-2-3 9:30:21 $ * 注: このプログラムはコード GB2312 に従って実行されます。 Weiku電子マーケットのウェブサイト...

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート