首頁 >後端開發 >php教程 >php正規抓取整個網域下的圖片

php正規抓取整個網域下的圖片

WBOY
WBOY原創
2016-07-25 08:50:051026瀏覽
程式碼來源:jUnion

適用平台:Windows, Linux(Ubuntu),php-5.2.5 ,Apache

功能:抓取整個網站的圖片,暫無借助php的curl外掛程式開發, 後製完善

設定:config目錄下
domain_name:網域名稱(預設:bizhibar.com)
request_site:網站網址(預設:http://www.bizhibar.com/)
request_url:從網站的哪個頁面開始(預設:http://www.bizhibar.com/)
accept_type: 圖片類型(預設:gif, bmp, png, ico, jpg, jpeg)
save_path:圖片儲存路徑(預設:savefiles/)
partition_name:圖片保存目錄名稱前綴(預設:img_)
dir_file_limit: 每個目錄容許多少個檔案(預設:100)
serialize_img_size: 當讀取了多少個圖片位址才會快取到cache目錄下的accompImg檔案當中,下次繼續抓取的時候會忽略這些位址。 (預設:30)
serialize_url_size:與serialize_url_size一樣,已讀取多少個連結位址才快取到cache目錄
下的overURL,下次繼續抓取的時候忽略這些位址。 (預設:10)

說明:歡迎諸君批評指教,有任何新問題或需要改進的地方,請您回饋給我
  1. set_time_limit(0);
  2. require dirname(__FILE__).DIRECTORY_SEPARATOR.'include'.DIRECTORY_SEPARATOR.'Capture; >require __Home__.'include'.__Os__.'Capture.class.php';
  3. $_cfg = array(
  4. 'site' => __Home__.'config'.__Os__.'capture.site. php',
  5. 'preg' => __Home__.'config'.__Os__.'capture.preg.php',
  6. 'accompImg' => __Home__.'cache'.__Os__.'accompImg',
  7. 'overURL' => __Home__.'cache'.__Os__.'overURL'
  8. );
  9. $_parse = new Capture( $_cfg );
  10. $_parse->parseQuestUrl();
  11. ?>
複製程式碼
  1. /**
  2. * 主班
  3. * @author pankai
  4. * @date 2013-08-10
  5. */
  6. class Capture {
  7. private static $_Config = array();
  8. private static $_CapSite = NULL;
  9. private static $_CapPreg = NULL;
  10. private static $_overURL = array();
  11. private $. _markTime = 1;
  12. /**
  13. * 初始化主類別:Capture
  14. * @param $_cfg array
  15. */
  16. public function __construct( &$_cfg ) {
  17. self::$_Config = &$_cfg;
  18. self:: _CapSite = 需要$_cfg['site'];
  19. self::$_CapPreg = 需要$_cfg['preg'];
  20. foreach( self::$_CapPreg as $_key => $ _value ) {
  21. self::$_CapPreg[$_key] = str_replace( '_request_site', self::$_CapSite['request_site'], $_value );
  22. }
  23. self::import( 'file.OperateFile' );
  24. if( file_exists( $_cfg['overURL'] ) && filesize( $_cfg['overURL'] ) > 0 ) {
  25. $_contents = OperateFile::readText ( $_cfgread ['overURL'], filesize( $_cfg['overURL'] ) );
  26. self::$_overURL = unserialize( $_contents );
  27. }
  28. self::import ('pivotal::import ('pivotal::import ('pivotal::import) .Pivotal');
  29. if( file_exists( $_cfg['accompImg'] ) && filesize( $_cfg['accompImg'] ) > 0 ) {
  30. $_contents = OperateFilereadreade( $cfg::read; accompImg'], 檔案大小( $_cfg['accompImg'] ) );
  31. Pivotal::$_accompImg = unserialize( $_contents );
  32. }
  33. }
  34. /*/
  35. public static function import( $_class ) {
  36. require_once __Home__.'include'.__Os__.str_replace( '.' , __Os__, $_class ).'.class.php';
  37. ; }
  38. /**
  39. * 載入類,遵循Java pragrammer(package): import com.jUnion.Capture
  40. * @param $_class
  41. */
  42. private function getCapInstance( &$_source ) {
  43. $this- >_mark = FALSE;
  44. $_Captal self ::$_Config, $_source );
  45. $_tagA = $_Captal->parseUrl();
  46. $ this->_mark = TRUE;
  47. return $_tagA;
  48. }
  49. /**
  50. * 建立 Pivotal 類別的實例
  51. * @param $_source
  52. */
  53. 私有函數roundTagA( &$_tagArr ) {
  54. if( $_tagArr == NULL ) {
  55. return;
  56. }
  57. $_tagArrLength = count( $_tagArr );
  58. for( $i = 0; $i if( is_array( $_tagArr[ $i ] ) ) {
  59. $this->roundTagA( $_tagArr[ $i ] );
  60. }
  61. else {
  62. if( stripos( $_tagArr[$i], self::$_CapSite['domain_name'] )
  63. === FALSE ) {
  64. 繼續;
  65. }
  66. if( in_array( $_tagArr[$i], self::$_overURL ) ) {
  67. 繼續;
  68. }
  69. self::$_overURL[] = $_tagArr[$i] ;
  70. if( count( self::$_overURL ) % self::$_CapSite['serialize_url_size'] == 0 ) {
  71. OperateFile::setText( self::$_Config['overURL'], 序列化( self::$_overURL ) );
  72. }
  73. 做{
  74. $_tagA = $this->getCapInstance( Http::get( $_tagArr[$i] ) );
  75. sleep( self::$_CapSite['preform_page_time'] * self::$_markTime );
  76. if( $this->_mark === TRUE ) {
  77. self::$_markTime = self::$_CapSite[ ' preform_page_time'];
  78. break;
  79. }
  80. self::$_markTime *= 2;
  81. } while( true );
  82. /* 解析首頁並傳回下一頁*/
  83. $this->roundTagA( $_tagA );
  84. }
  85. }
  86. }
  87. public function parseQuestUrl() {
  88. self::import('http.Http ');
  89. $_round_Arr = $this->getCapInstance( Http::get( self::$_CapSite['request_url'] ) );
  90. $this->roundTagA( $_round_Arr );
  91. }
  92. }
  93. ?>
  94. 複製程式碼
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn