qq分分彩app|qq分分彩开奖记录官网

不到100行(帶注釋)實現多線程自動翻頁采集

瀏覽:383 發布日期:2019/04/05 分類:功能實現 關鍵字: php curl composer 采集
采用了composer 安裝了兩個類庫php-curl-class 和medoo,一個是curl的操作庫,一個是支持多數據庫的類{ "require": {
"php-curl-class/php-curl-class":"dev-master",
"catfan/medoo": "1.6.*"}
}
自己新建一個composer.json,然后composer install,
代碼的主體如下,我的小站 http://3d5156.com ,目前采集超過10萬數據

效果圖如下:
-----------------------------------------




1、首先我們選定一個目標站,因為喜歡玩單機游戲,所以找個單機下載站99單機游1戲,網站在代碼里頭。
2、在剛剛composer的同一級目錄新建一個download.php,然后將下面的代碼復制進去,保存,
3、在瀏覽器輸入 http://你的網址/download.php?startnum=1&endnum=10&orders=1
其中startnum 是起始頁1,endnum 是結束頁,現在我們來采集1-10
orders=1 表示從1開始采集到第10頁,如果等于其他就是倒序從10到第1頁。<?php
set_time_limit(0);
require __DIR__ . '/vendor/autoload.php';
use \Curl\Curl;
use \Curl\MultiCurl;
use Medoo\Medoo;

if(intval($_REQUEST['startnum']) ==0) { echo '請輸入正確的URL 例如:http://127.0.0.1/dataget/download.php?startnum=1&endnum=10&orders=1' ; die();}

if($_REQUEST['orders'] =='1'){
    $page =$_REQUEST['startnum'];
}else{
    $page =$_REQUEST['endnum'];
}

$url ='http://www.99danji.com/gamelist/2_'.$page.'.html';

$curl = new Curl();
$curl->setUserAgent('MyUserAgent/0.0.1 (+https://www.baidu.com/bot.html)');
$curl->setReferrer('http://www.99danji.com/gamelist/2_2.html');
$data = $curl->get($url); //獲取列表頁
$list =data_cut('<ul class="mod-img-list games">' , '</ul>' , $data); //截取內容 
preg_match_all('|<a href=\"([^"]*)\" target="_blank" class="img-box">|', $list , $matches); //正則匹配url matches[1]

//開始進行多線程請求內容頁
$multi_curl = new MultiCurl();
$multi_curl->setUserAgent('MyUserAgent/0.0.1 (+https://www.baidu.com/bot.html)');
$multi_curl->setReferrer('http://www.99danji.com/gamelist/2_2.html');
foreach ($matches[1] as $k => $v) {
    $multi_curl->addGet($v);
}

$multi_curl->success(function($instance) {
    data_callback($instance->response); //處理數據的函數
    echo '<hr>';
});

$multi_curl->start(); //開始采集

if($_REQUEST['orders']=='1'){  //分頁跳轉
    $_REQUEST['startnum'] = $page+1;
}else{
    $_REQUEST['endnum'] = $page-1;
}   
if($_REQUEST['startnum'] > $_REQUEST['endnum']) { echo '采集完成<a href="download.php">點擊返回</a>'; die();}  //采集完成

$newUrl ='./download.php?startnum='.$_REQUEST['startnum'].'&endnum='.$_REQUEST['endnum'].'&orders='.$_REQUEST['orders'];  //跳轉地址
$str .='正在采集'.$page;
$str .='<script language="javascript" type="text/javascript">';
$str .='window.location.href="'.$newUrl.'"';
$str .='</script>';
echo $str;

//--------------數據處理的函數------------------
function data_cut($start,$end,$str){
    $temp=explode($start,$str,2);
    $content=explode($end,$temp[1],2);
    return $content[0];
}

function data_callback($content)
{
    global $database;
    if($content =='') return false;
    $data =[];
    $data['title'] =data_cut('<h1>' , '</h1>' , $content); //軟件名稱
    $data['catname'] =data_cut('<dd><span>游戲類型:</span>' , '</dd>' , $content); //類別
    //。。。。。更多操作,用正則,字符替換,字符截取,獲取軟件的內容,大小,圖片,地址等
    echo ($data['title'].'_'. $data['catname']); //數據測試
    return false;
    //插入數據
    $database->insert("soft", [  "title" => $data['title'],"catname" => $data['catname'] ]);
}

$database = new Medoo([
    'database_type' => 'mysql',
    'database_name' => 'gamesoft',  //數據庫
    'server' => '127.0.0.1',
    'username' => 'root',
    'password' => 'root',
    // [optional]
    'charset' => 'utf8',
    'port' => 3306,
     //表前綴
    'prefix' => '', 
    // 日志
    'logging' => true, 
    // [optional] driver_option for connection, read more from http://www.php.net/manual/en/pdo.setattribute.php
    'option' => [
        PDO::ATTR_CASE => PDO::CASE_NATURAL
    ],
    // [optional] Medoo will execute those commands after connected to the database for initialization
    'command' => [
        'SET SQL_MODE=ANSI_QUOTES'
    ]
]);

附件 1831854781.jpg ( 64.74 KB 下載:16 次 )

評論( 相關
后面還有條評論,點擊查看>>
qq分分彩app