IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> PHP爬取网站内容 -> 正文阅读

[PHP知识库]PHP爬取网站内容

最近公司需要存在阿里云对象存储(oss)里的视频文件,而且需要18套课程的视频源文件,这周就要,我想了一下这要是一个一个找那可就麻烦了。要想想一套课程有n个章节,每个章节有n个视频文件。所以我下定决心要写一个自动下载的程序。

废话不多说,先看效果

在这里插入图片描述

下面是代码

<?php 

class Request{

 public static function post($url, $post_data = '', $timeout = 5){//curl

  $ch = curl_init();

  curl_setopt ($ch, CURLOPT_URL, $url);

  curl_setopt ($ch, CURLOPT_POST, 1);

  if($post_data != ''){

   curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);

  }

  curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);

  curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);

  curl_setopt($ch, CURLOPT_HEADER, false);

  $file_contents = curl_exec($ch);

  curl_close($ch);

  return $file_contents;

 }

 public static function post2($url, $data=array()){//file_get_content

  $postdata = http_build_query(

   $data

  );  

  $opts = array('http' =>

      array(

       'method' => 'POST',

       'header' => 'Content-type: application/x-www-form-urlencoded',

       'content' => $postdata

      )

  );  

  $context = stream_context_create($opts);

  $result = file_get_contents($url, false, $context);

  return $result;

 }

 public static function post3($host,$path,$query,$others=''){//fsocket

  $post="POST $path HTTP/1.1\r\nHost: $host\r\n";

  $post.="Content-type: application/x-www-form-";

  $post.="urlencoded\r\n${others}";

  $post.="User-Agent: Mozilla 4.0\r\nContent-length: ";

  $post.=strlen($query)."\r\nConnection: close\r\n\r\n$query";

  $h=fsockopen($host,80);

  fwrite($h,$post);

  for($a=0,$r='';!$a;){

    $b=fread($h,8192);

    $r.=$b;

    $a=(($b=='')?1:0);

   }

  fclose($h);

  return $r;

 }

}

// 设置页面不超时
ini_set('max_execution_time', '0');
// 设置PHP存大小
@ini_set('memory_limit', '4048M');
// 抓取视频数据内容  21,30,132,9,77,128,129,133,130,134,7,16,135,29,31,92,146,147
// 失败的77 
$data = Request::post2('https://www.xxxx.cn/index/details_data',array('id'=>77));
echo '<pre>';
$data = json_decode($data,true);
foreach ($data as $k => &$v) {
    
   if(is_array($v)){
    // 创建文件夹
    $dir = iconv("UTF-8", "GBK", "Public/".$v['name']);

    mkdir ($dir,0777,true);
    $Catalogdata = $v['Catalogdata'];

    foreach ($Catalogdata as $kk => &$vv) {
        //遍历文件夹
        $hd = opendir($dir);
        $i = 0;
        // 读取
        while($f=readdir($hd)){
            // 创建文件夹
            $dir = iconv("UTF-8", "GBK","Public/".$v['name'].'/'.$vv['id'].$vv['name']);
            mkdir ($dir,0777,true);
            // 放入文件 
            $hd = opendir($dir);
            // 读取
            while($f=readdir($hd)){
                // 1.读取文件内容
                if(!empty($vv['video_url'])){
                    $mov = file_get_contents('http:'.$vv['video_url']);
                    file_put_contents($dir.'/'.$vv['name'].'.mov',$mov);
                }

                $chapter = $vv['chapter'];
                // 判断是否是数组
                if(is_array($chapter)){
                   foreach ($chapter as $key => $value) {
                        // 1.读取文件内容
                        $mov = file_get_contents('http:'.$value['vedio']);
                        file_put_contents($dir.'/'.$value['title'].'.mov',$mov);
                        echo ++$i;

                  }
            }
            }
        }
        // 关闭
        closedir($hd);
        }
    }
}
?>

由于有些特别大的文件下载还有点问题,所以我没有遍历循环,方便下载一套课程检查一套课程。

要是我一个一个手动下载那估计得需要两天多,写这个程序用了三个小时,下载文件大约两个小时,极大的缩短了工作时间,提高了工作效率。感谢大家观看,我们下次见。

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-08-28 08:48:43  更:2021-08-28 08:49:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 10:42:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码