簡易 抓取 省市 信息 導出 csv 文件 php 欄目 PHP 简体版
原文   原文鏈接

簡易抓取2018國家統計局的省市信息

注:代碼異常處理有待完善,不喜勿噴。感謝

header("Content-Type: text/html;charset=UTF-8");
// 超時設置
ini_set('max_execution_time', '0');
//抓取地址
$url = 'http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2018/';
$data = curlGet($url);
$data = iconv("GBK", "UTF-8//IGNORE",$data);
preg_match_all('/provincetr\'>(.*?)<\/tr>/', $data, $matches);
if (empty($matches)) {
    return '匹配異常';
}

$data2show = returnArr($matches[1]);

//獲得省份信息
foreach ($data2show as $key => $val) {
    preg_match('/=\'(\d{2}).html/', $val, $sz);
    preg_match('/\'>(.{1,30})<br/', $val, $hz);
    $provinceArr[$sz[1]] = $hz[1];
}

//獲取城市信息
// print_r($provinceArr);exit;
foreach ($provinceArr as $key => $val) {
    //拼湊城市信息請求地址
    $cityUrl = $url.$key.'.html';
    $data = curlGet($cityUrl);
    $data = iconv("GBK", "UTF-8//IGNORE",$data);

    preg_match_all('/citytr\'>(.*?)<\/tr>/', $data, $matches);

    foreach($matches[1] as $k => $v){
        // echo $v;exit;
        preg_match_all('/=\'(\d{2})\/(\d{4}).html\'>(.*?)<\/a>/', $v, $info);
        $city[$key][$k]['province_code'] = $info[1][1];
        $city[$key][$k]['province_name'] = $val;
        $city[$key][$k]['city_code'] = $info[2][1];
        $city[$key][$k]['city_name'] = ($info[3][1] === '市轄區') ? $val : $info[3][1];
        // print_r($city);exit;
    }
    // $cityData[$key] = $matches[1];
}
$cityArr = arr2ToArr1($city);
export_csv($cityArr);exit;


//curl get請求
function curlGet($url)
{
    $curl = curl_init();
    //設置抓取的url
    curl_setopt($curl, CURLOPT_URL, $url);
    //設置頭文件的信息做爲數據流輸出
    // curl_setopt($curl, CURLOPT_HEADER, 1);
    //設置獲取的信息以文件流的形式返回,而不是直接輸出。
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    //執行命令
    $data = curl_exec($curl);
    //關閉URL請求
    curl_close($curl);
    //顯示得到的數據
    return $data;
}

//傳入內容,返回數組
function returnArr($content)
{
    foreach ($content as $key => $val) {
        $arr[$key] = explode('<td>', '<' . trim($val, '<td>'));
    }
    $data2show = arr2ToArr1($arr);
    return $data2show;
}

//二維數組轉化成一維數組
function arr2ToArr1($arr)
{
    return array_reduce($arr, 'array_merge', array());
}

//數據導出到csv
function export_csv($data) {
    $path = $_SERVER['DOCUMENT_ROOT']."/csv/".date("Y-m-d",time())."/";
    if (!is_dir($path)){ //判斷目錄是否存在 不存在就建立
        mkdir($path,0777,true);
    }
    $filename = $path.time().'.csv'; //設置文件名

    header( "Content-Type: text/csv;charset=utf-8" );
    header( "Content-Disposition: attachment;filename=\"$filename\"" );
    header("Pragma: no-cache");
    header("Expires: 0");

    $fp= fopen($filename, 'w');
    // 對於用 wps 和編輯器打開無亂碼可是用 excel 打開出現亂碼的問題,能夠添加如下一行代碼解決問題
    fwrite($fp, chr(0xEF).chr(0xBB).chr(0xBF));
    foreach ($data as $fields) {
        fputcsv($fp, $fields);
    }
    fclose($fp);
}
相關文章
相關標籤/搜索
每日一句
    每一个你不满意的现在,都有一个你没有努力的曾经。
本站公眾號
   歡迎關注本站公眾號,獲取更多信息