沒有內涵段子能夠刷了,利用Python爬取段友之家貼吧圖片和小視頻(含源碼)

因爲最新的視頻整頓風波,內涵段子APP被迫關閉,廣大段友無家可歸,可是最近發現了一個「段友」的app,版本更新也挺快,正在號召廣大段友回家,以下圖,有興趣的能夠下載看看(ps:我不是打廣告的,沒收廣告費的) css

同時,以前同事也發了一個貼吧的段子聚居地,客官稍等,立刻奉上鍊接: 段友之家 https://tieba.baidu.com/f?ie=...html

而後呢,看到上面,確實好多段友在上面,因而乎,我就想爬取他們的圖片和小視頻,就有了這篇文章的主題:python

其實吧,用Python爬取網站數據是最基礎的東西,也不難,可是我還想分享給你們,一塊兒學習和交流。web

爬取這些網站裏的數據主要用的模塊是bs四、requests以及os,都是經常使用模塊app

大概思路就是經過requests模塊請求網頁html數據,而後經過bs4模塊下的BeautifulSoup分析請求的網頁,而後經過css查找器查找內涵段子的圖片以及小視頻的地址,主要實現代碼以下:ide

def download_file(web_url):
    """獲取資源的url"""
    # 下載網頁
    print('正在下載網頁: %s...' % web_url)
    result = requests.get(web_url)
    soup = bs4.BeautifulSoup(result.text, "html.parser")
    # 查找圖片資源
    img_list = soup.select('.vpic_wrap img')
    if img_list == []:
        print('未發現圖片資源!')
    else:
        # 找到資源,開始寫入
        for img_info in img_list:
            file_url = img_info.get('bpic')
            write_file(file_url, 1)
    # 查找視頻資源
    video_list = soup.select('.threadlist_video a')
    if video_list == []:
        print('未發現視頻資源!')
    else:
        # 找到資源,開始寫入
        for video_info in video_list:
            file_url = video_info.get('data-video')
            write_file(file_url, 2)
    print('下載資源結束:', web_url)
    next_link = soup.select('#frs_list_pager .next')
    if next_link == []:
        print('下載資料結束!')
    else:
        url = next_link[0].get('href')
        download_file('https:' + url)

學習Python+  725479218

獲得圖片以及視頻的地址以後,確定還不夠,還得把這些資源寫入到本地,方式是經過二進制的方式來讀取遠程文件資源,而後分類寫入到本地,實現的主要代碼以下:學習

def write_file(file_url, file_type):
    """寫入文件"""
    res = requests.get(file_url)
    res.raise_for_status()
    # 文件類型分文件夾寫入
    if file_type == 1:
        file_folder = 'nhdz\\jpg'
    elif file_type == 2:
        file_folder = 'nhdz\\mp4'
    else:
        file_folder = 'nhdz\\other'
    folder = os.path.exists(file_folder)
    # 文件夾不存在,則建立文件夾
    if not folder:
        os.makedirs(file_folder)
    # 打開文件資源,並寫入
    file_name = os.path.basename(file_url)
    str_index = file_name.find('?')
    if str_index > 0:
        file_name = file_name[:str_index]
    file_path = os.path.join(file_folder, file_name)
    print('正在寫入資源文件:', file_path)
    image_file = open(file_path, 'wb')
    for chunk in res.iter_content(100000):
        image_file.write(chunk)
    image_file.close()
    print('寫入完成!')

學習Python+  725479218

最後,再奉上完整的代碼吧。要否則,會被人說的,說話說一半,說福利,也不給全,這就太不夠意思了。客官別急,立刻奉上……網站

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
爬取百度貼吧,段友之家的圖片和視頻
author: cuizy
time:2018-05-19
"""

import requests
import bs4
import os


def write_file(file_url, file_type):
    """寫入文件"""
    res = requests.get(file_url)
    res.raise_for_status()
    # 文件類型分文件夾寫入
    if file_type == 1:
        file_folder = 'nhdz\\jpg'
    elif file_type == 2:
        file_folder = 'nhdz\\mp4'
    else:
        file_folder = 'nhdz\\other'
    folder = os.path.exists(file_folder)
    # 文件夾不存在,則建立文件夾
    if not folder:
        os.makedirs(file_folder)
    # 打開文件資源,並寫入
    file_name = os.path.basename(file_url)
    str_index = file_name.find('?')
    if str_index > 0:
        file_name = file_name[:str_index]
    file_path = os.path.join(file_folder, file_name)
    print('正在寫入資源文件:', file_path)
    image_file = open(file_path, 'wb')
    for chunk in res.iter_content(100000):
        image_file.write(chunk)
    image_file.close()
    print('寫入完成!')

學習Python+  725479218

def download_file(web_url):
    """獲取資源的url"""
    # 下載網頁
    print('正在下載網頁: %s...' % web_url)
    result = requests.get(web_url)
    soup = bs4.BeautifulSoup(result.text, "html.parser")
    # 查找圖片資源
    img_list = soup.select('.vpic_wrap img')
    if img_list == []:
        print('未發現圖片資源!')
    else:
        # 找到資源,開始寫入
        for img_info in img_list:
            file_url = img_info.get('bpic')
            write_file(file_url, 1)
    # 查找視頻資源
    video_list = soup.select('.threadlist_video a')
    if video_list == []:
        print('未發現視頻資源!')
    else:
        # 找到資源,開始寫入
        for video_info in video_list:
            file_url = video_info.get('data-video')
            write_file(file_url, 2)
    print('下載資源結束:', web_url)
    next_link = soup.select('#frs_list_pager .next')
    if next_link == []:
        print('下載資料結束!')
    else:
        url = next_link[0].get('href')
        download_file('https:' + url)


# 主程序入口
if __name__ == '__main__':
    web_url = 'https://tieba.baidu.com/f?ie=utf-8&kw=段友之家'
    download_file(web_url)
相關文章
相關標籤/搜索