使用DomCrawler抓取抖音美女小视频.

接上篇:使用DomCrawler抓取快手美女小视频

抖音小视频比快手小视频难抓很多,抖音用户主页的视频是通过异步请求加载出来的,请求的Json文件貌似是通过随机生成一个kye匹配得到一部分的视频的地址,每次请求的Json都有时效性,过了一段时间,便请求不到数据了.

2018-05-27 11-33-12屏幕截图.png

2018-05-27 11-33-46屏幕截图.png

于是便无法通过用户主页获取该用户所有URL视频链接.

但是我们可以通过单个小视频的链接.获取该视频的真实下载地址.

我们通过小视频URL:https://www.iesdouyin.com/share/video/6551873235305106695/

获得当前小视频页的HTML,发现并不存在相应的视频下载地址.

通过使用发现视频的链接是是通过点击play-btn组件再对视频引入播放.

未点击时:


2018-05-27 11-41-02屏幕截图.png

点击后:

2018-05-27 11-42-56屏幕截图.png

最后使用了一种非常难受的方式,最终得到了视频的下载链接.

首先我们使用正则表达式去匹配视频的Video_ID

$preg  = '/.*?video_id=(.*?)".*?/is';
        preg_match_all($preg, $html, $video_id);
        preg_match('/.*?uid":"([0-9]+)"/is', $html, $uid);

得到视频ID后,再使用拼接到抖音视频的URL上,便成功取到了完整的视频下载地址.

$video_url = "https://aweme.snssdk.com/aweme/v1/playwm/?video_id=$video_id";

最后我们再把视频通过写入文件的方式写入到我们的本地即可.

全部代码:

<?php
namespace App\Console\Commands\Crawlers;

use Goutte\Client;
use Illuminate\Console\Command;

class CrawlerDouYin extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'crawl:lxdy';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = '邻信抖音视频';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
        $this->client = new Client();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        //
        $this->client = new client();
        $this->client->setHeader('User-Agent', 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36');
        $this->getList();
    }

    public function getList()
    {
        //视频入口
        $url   = 'https://www.iesdouyin.com/share/video/6551873235305106695/';
        $Crawl = $this->client->request('GET', $url);
        $html=$Crawl->html();
        $preg  = '/.*?video_id=(.*?)".*?/is';
        preg_match_all($preg, $html, $video_id);
        preg_match('/.*?uid":"([0-9]+)"/is', $html, $uid);
        $video_id  = str_replace('\u0026', '&', $video_id[1][0]);
        $uid=$uid[1];
        $video_url = "https://aweme.snssdk.com/aweme/v1/playwm/?video_id=$video_id";
        $myfile    = fopen('storage/lxapp/' . 'dy-' . $uid . '-' . date('YmdHms'), "w") or die("Unable to open file!");
        $video     = file_get_contents($video_url);
        fwrite($myfile, $video);
        fclose($myfile);
        $this->info('url:' . $video_url . ' get success');
    }
}

日记本

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

赞赏支持
被以下专题收入,发现更多相似内容