一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Python爬蟲

 最初九月雪 2018-02-26

首先進(jìn)入今日頭條視頻首頁。

分析網(wǎng)頁

這里寫圖片描述
其中href屬性下的連接就是我們需要下載的視頻。

在下載全部視頻之前應(yīng)該分析一下單視頻下載的方法。

下載一個(gè)視頻

首先查看單個(gè)視頻的網(wǎng)頁頁面
這里寫圖片描述
我們需要獲取var mp4下的視頻。但是這個(gè)語句應(yīng)該是JS的?可以使用正則匹配到連接。

def get_video_url(url):
    try:
        res = requests.get(url)
        if res.status_code != 200:
            print('視頻詳情頁請求失敗')
            return None

        print('視頻詳情頁請求成功 : ' + video_title)
        res.encoding = 'utf-8'
        link = re.findall(r'var mp4 = "(.*.mp4?)";', res.text)[0]
        link = 'http:' + link
        return link

    except Exception:
        print('視頻詳情頁請求失敗')
        return None
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

這個(gè)函數(shù)的返回值就是需要下載的視頻連接。

    file_path = '{0}/{1}.{2}'.format('D:/1', video_title, 'mp4')

    with open(file_path, 'wb') as f: #必須是wb
            f.write(data)
            f.close()
  • 1
  • 2
  • 3
  • 4
  • 5

這樣就可以下載單個(gè)視頻了。

下載首頁全部視頻

具體正則方式,詳見網(wǎng)頁html格式。

#單進(jìn)程使用
def get_urls():
    try:
        res = requests.get('http://video.eastday.com/')
        if res.status_code != 200:
            print('視頻主頁請求失敗')
            return None

        print('獲取視頻主頁')
        res.encoding = 'utf-8'

        soup = BeautifulSoup(res.text, 'html.parser')
        links = soup.find_all('a', pdata=re.compile("index.*")) #所有帶視頻的標(biāo)簽  都帶index這些 例如pdata="index|jlp|12|0"

        for link in links:
            if not re.findall('.*/a/.*', link['href']): #頁面因?yàn)樽钌厦娴?是類型分類  不帶/a/  視頻全部帶
                continue

            # if re.compile(link['href'])
            if not re.findall('http://video.eastday.com/', link['href']):   #有一部分視頻沒有http://video.eastday.com/  只有后面一部分
                link['href'] = 'http://video.eastday.com/' + link['href']
            #對于每一個(gè)主頁的url都有一個(gè)具體頁面
            get_video_url(link['href'], link['title'])

    except Exception:
        print('視頻主頁請求失敗')
        return None
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

這樣下載的方式比較慢,按順序下載。
為了提高效率,可以考慮進(jìn)程池方式。

進(jìn)程池方式下載視頻

假如直接加上進(jìn)程池,相當(dāng)于每個(gè)進(jìn)程都同時(shí)開始下載同一個(gè)。。我們應(yīng)該根據(jù)pool.map傳入不同參數(shù)讓不同的進(jìn)程下載不同的部分。
我們觀察可以知道視頻主頁分為:主題部分、娛樂、記錄片等等。
比如這個(gè)輕松一刻的代碼部分:
這里寫圖片描述
我們可以定義一個(gè)字典類型,根據(jù)參數(shù)讓不同進(jìn)程完成不同部分下載。
還有一個(gè)比較重要的是。我們對于不同板塊需要重新獲取該板塊的所有url。
這里寫圖片描述

具體代碼如下:

#進(jìn)程池使用
def get_urls_(item_index):
    try:
        res = requests.get('http://video.eastday.com/')
        if res.status_code != 200:
            print('視頻主頁請求失敗')
            return None

        print('獲取視頻主頁')
        res.encoding = 'utf-8'

        soup = BeautifulSoup(res.text, 'html.parser')


        item_dict = {
            '1' : 'w100 clr pt25',   #6個(gè)板塊
            '2' : 'main funny mt10',
            '3' : 'main mt10 consult',
            '4' : 'main mt10 entertainment',
            '5' : 'main mt10 Blog',
            '6' : 'main mt10 record',
         }


        #這里就相當(dāng)于不同進(jìn)程(1-6號進(jìn)程) 執(zhí)行不同板塊的url下載工作
        html_all = soup.find_all('div', class_=re.compile(item_dict[str(item_index)]))

        soup_items = BeautifulSoup(str(html_all[0]), 'html.parser')  # 加上str!??! 還有它是列表!?。?        soup_items = soup_items.find_all('a', pdata=re.compile("index.*"))

        for item in soup_items:
            if not re.findall('.*/a/.*', item['href']):
                continue

            if not re.findall('http://video.eastday.com/', item['href']):
                item['href'] = 'http://video.eastday.com/' + item['href']

            get_video_url(item['href'], item['title'])
    except Exception:
        print('視頻主頁請求失敗')
        return None


if __name__=='__main__':

    groups = [x for x in range(0, 6)]
    pool = Pool()
    pool.map(get_urls_, groups) #需要執(zhí)行的 加上條件
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49

調(diào)試代碼
這里寫圖片描述

可以看到是同時(shí)執(zhí)行,而不是順序執(zhí)行。提高效率。

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    亚洲另类女同一二三区| 亚洲av专区在线观看| 国产伦精品一一区二区三区高清版 | 国产一区二区三区精品免费| 国产精品内射视频免费| 色婷婷在线视频免费播放| 老鸭窝精彩从这里蔓延| 99热在线精品视频观看| 亚洲午夜福利不卡片在线| 最好看的人妻中文字幕| 久久亚洲午夜精品毛片| 国产又大又黄又粗的黄色| 精品国产成人av一区二区三区| 97人摸人人澡人人人超碰| 日韩精品综合免费视频| 欧美日韩亚洲国产综合网| 午夜亚洲精品理论片在线观看| 欧美日韩无卡一区二区| 色无极东京热男人的天堂| 成年人免费看国产视频| 中文字幕日韩精品人一妻| 国产精品一区日韩欧美| 亚洲国产av在线视频| 亚洲高清欧美中文字幕| 亚洲国产综合久久天堂| 日本精品中文字幕在线视频| 在线免费不卡亚洲国产| 丰满少妇高潮一区二区| 国内胖女人做爰视频有没有| 国产传媒免费观看视频| 欧美精品二区中文乱码字幕高清| 欧美小黄片在线一级观看| 日韩免费成人福利在线| 福利视频一区二区三区| 精品老司机视频在线观看| 国产精品福利精品福利| 亚洲国产性感美女视频| 91亚洲人人在字幕国产| 成人国产激情在线视频| 精品国产亚洲一区二区三区| 日韩精品免费一区二区三区|