ホームページ  >  記事  >  バックエンド開発  >  Python クローラーはビデオをクロールできますか?

Python クローラーはビデオをクロールできますか?

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼オリジナル
2019-06-19 10:16:085461ブラウズ

Web クローラーは Web スパイダーとも呼ばれ、特定のルールに従って Web 上の必要なコンテンツをクロールするスクリプト プログラムを指します。ご存知のとおり、各 Web ページには通常、他の Web ページへの入り口が含まれており、Web クローラーは 1 つの URL を使用して他の URL に順番に入力し、必要なコンテンツを取得します。

Python クローラーはビデオをクロールできますか?

##クローラの構造

クローラスケジューラ (入口)

url マネージャー (クロールされていない URL とクロールされた URL の管理に使用)

Web ページ ダウンローダー (分析用に Web ページ コンテンツをダウンロードするために使用)

Web ページ パーサー (ダウンロードされた Web ページを解析し、新しい URL と必要なコンテンツを取得するために使用)

#Web ページ出力ツール (取得したコンテンツをファイル形式で出力するために使用します)

#最初のステップ

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

関連する推奨事項: 「

Python ビデオ チュートリアル

2 番目のステップ

パケットをキャプチャし、リクエストを分析して返します。これは、強力なクロム、または上記の例で右クリック -> [要素の検査] -> [ネットワーク] を選択し、F5 キーで Web ページを更新することによっても実現できます

リクエストが多いことが分かりました リクエストは1つずつしか解析できません 実は動画形式はmp4、flv、aviです 一度に見ることができます ブラウザにコピーして開いてください 案の定、それが私たちが望むダウンロードリンクです。

#3 番目のステップ

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


概要

最初の 3 つのステップを分析した後、次のアイデアが得られました。ビデオ ダウンロード リンクの取得 Web ページのソース コードから .m3u8 サフィックスが付いたリンクを取得し、ファイルをダウンロードし、そこからビデオ ダウンロード リンクを取得して、最後にビデオをダウンロードします。

ソースコード

#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 までご連絡ください。