> 安裝 QueryList `composer require jaeger/querylist`
```
~~~
<?php
namespace app\common\service;
use QL\QueryList;
use think\Db;
use think\Exception;
class PaContent
{
/**
* @return array
* 獲取數據
*/
public static function save_data(){
$page=self::get_page();//獲取分頁
if ($page >27){
return ['code'=>0,'msg'=>'分頁數據最大27頁'];
}
ini_set('max_execution_time', 600);//秒為單位,自己根據需要定義
ini_set('memory_limit', '256M');//內存
$url = 'https://www.cbf.com.br/pelo-mundo/noticias/index?page='.$page;
// 采集規則
$rules = [
// 文章標題
'title' => ['div>h2>a','text'],
'img' => ['.pull-left>a>img','src'],
'link' => ['div>h2>a','href'],
];
// 切片選擇器
$range = '.news';
$data=QueryList::get($url)->rules($rules)->query()->range($range)->queryData();//多個數組
if (empty($data)){
return ['code'=>0,'msg'=>'未爬取到數據'];
}
$arr=[];
foreach ($data as $k=>$v){
$content=self::get_content_detail($v['link']);
if ($content['code']==0){
continue ;
}
$arr[$k]['content']=$content['data'];
$arr[$k]['title']=$v['title'];
$img=self::getImage($v['img']);
$arr[$k]['image']=$img['save_path'];
//$arr[$k]['link']='https://www.cbf.com.br'.$v['link'];
$arr[$k]['createtime']=time()-mt_rand(50,900);
}
return self::save_data_to_database($arr,$page);
}
protected static function set_page($page){
@file_put_contents('num.txt',$page+1);
return true;
}
protected static function get_page(){
$page=@file_get_contents('num.txt');
return intval($page);
}
/**
* @param $arr
* @param $page
* @return array
* 保存數據
*/
protected static function save_data_to_database($arr,$page){
if (empty($arr)) return ['code'=>0,'msg'=>'無數據可保存'];
$result=Db::name('content')->insertAll($arr);
if ($result){
self::set_page($page); //更新下次分頁次數
return ['code'=>1,'msg'=>'數據保存成功條數:'.$result];
}
return ['code'=>0,'msg'=>'數據保存失敗'];
}
/**
* @param $url
* @return string|string[]|null
* 獲取內容詳細html
*/
protected static function get_content_detail($url){
$url='https://www.cbf.com.br'.$url;
try {
$ql = QueryList::get($url, null, [
'headers' => [
'User-Agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36',
'Accept-Encoding' => 'gzip, deflate, br',
]
]);
}catch (Exception $exception){
return ['code'=>0,'msg'=>'獲取詳細內容異常'];
}
//獲取內容html
$da=$ql->find(".article-inner-content")->html();
//去掉圖片
$content= preg_replace('/<\s*img\s+[^>]*?src\s*=\s*(\'|\")(.*?)\\1[^>]*?\/?\s*>/i','',$da);
return ['code'=>1,'msg'=>'ok','data'=>$content];
}
/**
* @param $url
* @param string $save_dir
* @param int $type
* @return array
* 遠程圖片本地化
*/
public static function getImage($url,$save_dir='./content_img/',$type=0){
if(trim($url)==''){
return array('file_name'=>'','save_path'=>'','error'=>1);
}
$ext=strrchr($url,'.');
if($ext!='.gif'&&$ext!='.jpg'&&$ext!='.png'&&$ext!='.jpeg'){
return array('file_name'=>'','save_path'=>'','error'=>2);
}
$filename=time().$ext;
//創建保存目錄
if(!file_exists($save_dir)&&!mkdir($save_dir,0777,true)){
return array('file_name'=>'','save_path'=>'','error'=>3);
}
//獲取遠程文件所采用的方法
ob_start();
readfile($url);
$img=ob_get_contents();
ob_end_clean();
//$size=strlen($img);
//文件大小
$fp2=@fopen($save_dir.$filename,'a');
fwrite($fp2,$img);
fclose($fp2);
unset($img,$url);
return array('file_name'=>$filename,'save_path'=>'/content_img/'.$filename,'error'=>0);
}
}
~~~
```
- 空白目錄
- thinkphp5
- tools-常用類庫
- redis類庫
- Excel類庫
- File文件操作類庫
- Http請求類庫
- Maile郵件發送
- Hooks行為鉤子
- 七牛云
- 隨機數和字符串生成
- 字符串處理
- 時間類處理
- tree型轉換
- 工具類庫
- 文件打包下載
- 常用功能
- 文件上傳
- php生成word文檔
- elasticsearch 基本搜索
- 使用jwt開發API接口
- 安裝模及搭建
- ApiCheck.php
- ApiCheckLogin.php
- common.php
- Login.php
- Comment.php
- 漢字轉拼音
- 安裝使用
- Pinyin類
- elasticsearch操作
- 常用方法
- 數據源生成layui-select
- 獲取自定義配置項
- 百度編輯器
- 格式化文件大小
- 多語言設置
- hook監聽
- 域名綁定到模塊
- thinkphp6
- 文件上傳
- tp5totp6
- 創建路徑
- 獲取類所有方法
- password_hash加密驗證
- 生成 qrcode
- 郵件發送
- 獲取QQ信息
- GoogleAuthenticator
- redis限流
- redis 加鎖
- 百度翻譯
- QueryList爬取數據
- 獲取時間類
- 命令
- Git常用命令
- easyswoole
- pix_qrcode
- 驗證 cpf,cnpj
- php常用方法
- 日志
- 卡通頭像
- 兩位小數
- 圖片轉base64
- auth加密解密
- phpoffice/phpspreadsheet導入導出
- fastadmin
- 樹結構
- 單選框
- 復選框
- 二級搜索
- select選擇框
- selectpage選中回調事件
- 標簽添加
- 修改where條件
- 表格列表中添加input框
- selectpage事件
- fieldlist
- js操作
- test_js
- 多表格
- template模板