ホームページ  >  記事  >  バックエンド開発  >  Python クローラービデオクローリングの詳細な紹介

Python クローラービデオクローリングの詳細な紹介

不言
不言オリジナル
2018-09-19 17:27:2022333ブラウズ

この記事では、Python クローラーのクローリング動画について詳しく紹介します。一定の参考価値があります。困っている友達は参考にしてください。お役に立てれば幸いです。

最近アプリケーションを作成しており、Weibo で人気のあるビデオをいくつか収集する必要があります。これらの短いビデオは通常、Miaopai、Weipai、Meipai、Sina Video から来ており、ダウンロード オプションがないため、使用できるのは解決策を考える脳。

最初のステップ

Web ページのソース コードを分析します。例: http://video.weibo.com/show?fid=1034:0988e59a12e5178acb7f23adc3fe5e97、右クリックしてソース コードを表示します。一般に、ビデオには mp4 という接尾辞が付いています。検索すると見つかりませんが、いくつかの接尾辞が付いています。 Meipaiビデオなどを直接見ることができます。

ステップ 2

パケットをキャプチャし、リクエストを分析して返します。これは、強力なクロム、または上記の例で右クリック -> [要素の検査] -> [ネットワーク] を選択し、F5 で Web ページを更新することによっても実現できます。リクエストが多くて一つ一つしかできません 解析した結果、実は動画形式はmp4、flv、aviです 一度に見ることができます ブラウザにコピーして開くとダウンロードです私たちが望むリンク。
Python クローラービデオクローリングの詳細な紹介

#第 3 ステップ


# ダウンロード リンクとビデオ リンクのルールを分析します。つまり、http://video.weibo.com/show?fid=1034:0988e59a12e5178acb7f23adc3fe5e97 と xxx.mp4 の関係です。これも Web ページのソース コードを分析する必要があります。実際、上記の .m3u8 接尾辞を持つリンクに注目してください。m3u8 はインデックス プレーン テキスト ファイルを記録します。これを開くと、再生ソフトウェアは再生しませんが、ファイルのネットワーク アドレスを使用してオンラインで再生し、ファイルを開いて、必要なダウンロード リンクが実際にそのファイルに記録されていることを確認します。さらに、.m3u8 接尾辞のリンクは Web ページのソース コード内にあります。 Python クローラービデオクローリングの詳細な紹介

概要


最初の 3 つのステップを分析した後、ビデオのダウンロード リンクを取得するという考えは、まず .m3u8 という形式のリンクを取得することです。 Web ページのソース コードからサフィックスを取得し、ファイルをダウンロードし、その中にあるビデオ ダウンロード リンクを取得して、最後にビデオをダウンロードします。 Python クローラービデオクローリングの詳細な紹介

ソース コード

#sinavideo.py
#coding=utf-8
import os
import re
import urllib2
import urllib 
from common import Common
class SinaVideo():

    URL_PIRFIX = "http://us.sinaimg.cn/"
    def getM3u8(self,html):
        reg = re.compile(r'list=([\s\S]*?)&fid')
        result = reg.findall(html)
        return result[0]


    def getName(self,url):
         return url.split('=')[1]

    def getSinavideoUrl(self,filepath):
        f = open(filepath,'r')
        lines = f.readlines()
        f.close()
        for line in lines:
            if line[0] !='#':
                return line

    def download(self,url,filepath):
        #获取名称
        name = self.getName(url)
        html = Common.getHtml(url)
        m3u8 = self.getM3u8(html)
        Common.download(urllib.unquote(m3u8),filepath,name + '.m3u8')
        url = self.URL_PIRFIX + self.getSinavideoUrl(filepath+name+'.m3u8')
        Common.download(url,filepath,name+'.mp4')
#common.py
#coding=utf-8
import urllib2
import os
import re


class Common():
    #  获取网页源码
    @staticmethod
    def getHtml(url):
        html = urllib2.urlopen(url).read()
        print  "[+]获取网页源码:"+url
        return html

    # 下载文件
    @staticmethod
    def download(url,filepath,filename):
        headers = {
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
            'Accept-Charset': 'UTF-8,*;q=0.5',
            'Accept-Encoding': 'gzip,deflate,sdch',
            'Accept-Language': 'en-US,en;q=0.8',
            'User-Agent': 'Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Mobile Safari/537.36'
        }
        request = urllib2.Request(url,headers = headers);
        response = urllib2.urlopen(request)
        path = filepath + filename
        with open(path,'wb') as output:
            while True:
                buffer = response.read(1024*256);
                if not buffer:
                    break
                # received += len(buffer)
                output.write(buffer)

        print "[+]下载文件成功:"+path

    @staticmethod
    def isExist(filepath):
        return os.path.exists(filepath)

    @staticmethod
    def createDir(filepath):
         os.makedirs(filepath,0777)

呼び出しメソッド:

 url = "http://video.weibo.com/show?fid=1034:0988e59a12e5178acb7f23adc3fe5e97"sinavideo = SinaVideo()         
 sinavideo.download(url,""/Users/cheng/Documents/PyScript/res/"")
結果############

以上がPython クローラービデオクローリングの詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。