资讯专栏INFORMATION COLUMN

段友福利:Python爬取段友之家贴吧图片和小视频

singerye / 2924人阅读

摘要:由于最新的视频整顿风波,内涵段子被迫关闭,广大段友无家可归,但是最近发现了一个段友的,版本更新也挺快,正在号召广大段友回家,如下图,有兴趣的可以下载看看我不是打广告的,没收广告费的同时,之前同事也发了一个贴吧的段子聚居地,客官稍等,马上奉上

由于最新的视频整顿风波,内涵段子APP被迫关闭,广大段友无家可归,但是最近发现了一个“段友”的app,版本更新也挺快,正在号召广大段友回家,如下图,有兴趣的可以下载看看(ps:我不是打广告的,没收广告费的)

同时,之前同事也发了一个贴吧的段子聚居地,客官稍等,马上奉上连接:
段友之家 https://tieba.baidu.com/f?ie=...

然后呢,看到上面,确实好多段友在上面,于是乎,我就想爬取他们的图片和小视频,就有了这篇文章的主题:

其实吧,用Python爬取网站数据是最基础的东西,也不难,但是我还想分享给大家,一起学习和交流。

爬取这些网站里的数据主要用的模块是bs4、requests以及os,都是常用模块

大概思路就是通过requests模块请求网页html数据,然后通过bs4模块下的BeautifulSoup分析请求的网页,然后通过css查找器查找内涵段子的图片以及小视频的地址,主要实现代码如下:

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)

得到图片以及视频的地址之后,肯定还不够,还得把这些资源写入到本地,方式是通过二进制的方式来读取远程文件资源,然后分类写入到本地,实现的主要代码如下:

def write_file(file_url, file_type):
    """写入文件"""
    res = requests.get(file_url)
    res.raise_for_status()
    # 文件类型分文件夹写入
    if file_type == 1:
        file_folder = "nhdzjpg"
    elif file_type == 2:
        file_folder = "nhdzmp4"
    else:
        file_folder = "nhdzother"
    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("写入完成!")

最后,再奉上完整的代码吧。要不然,会被人说的,说话说一半,说福利,也不给全,这就太不够意思了。客官别急,马上奉上……

#!/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 = "nhdzjpg"
    elif file_type == 2:
        file_folder = "nhdzmp4"
    else:
        file_folder = "nhdzother"
    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("写入完成!")


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)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41818.html

相关文章

  • 首次公开,整理12年积累的博客收藏夹,零距离展示《收藏夹吃灰》系列博客

    摘要:时间永远都过得那么快,一晃从年注册,到现在已经过去了年那些被我藏在收藏夹吃灰的文章,已经太多了,是时候把他们整理一下了。那是因为收藏夹太乱,橡皮擦给设置私密了,不收拾不好看呀。 ...

    Harriet666 评论0 收藏0
  • 利用Python爬取百度贴吧图片

    摘要:背景介绍我大一的时候学校就开设了,但是并没有好好学,基本等于是什么也不会,最近才开始看,所以本身也是摸着石头过河,见谅心得讲真的,爬虫确实不像别人想象的那样简单,爬虫首先要静下心来,细心寻找目标网站的布局规律,最重要的是的变化,这是一个考验 背景介绍 我大一的时候学校就开设了 python,但是并没有好好学,基本等于是什么也不会,最近才开始看,所以本身也是摸着石头过河,见谅... 心得...

    YPHP 评论0 收藏0
  • 如何通过Python玩转小视

    摘要:网页都是来描述页面信息。网页都使用协议来传输数据。爬虫的设计思路获取视频拼接完整获取视频播放地址下载视频模块使用安装库的七个主要方法找到单个视频播放地址获取网页源代码获取播放地址下载视频实现效果 什么是爬虫? 就是抓取网页数据的程序 爬虫怎么抓取网页数据? 网页三大特征: 网页都有自己唯一的URL。 网页都是HTML来描述页面信息。 网页都使用http/https协议来传输HTML数...

    Charles 评论0 收藏0
  • 零基础如何学爬虫技术

    摘要:楚江数据是专业的互联网数据技术服务,现整理出零基础如何学爬虫技术以供学习,。本文来源知乎作者路人甲链接楚江数据提供网站数据采集和爬虫软件定制开发服务,服务范围涵盖社交网络电子商务分类信息学术研究等。 楚江数据是专业的互联网数据技术服务,现整理出零基础如何学爬虫技术以供学习,http://www.chujiangdata.com。 第一:Python爬虫学习系列教程(来源于某博主:htt...

    KunMinX 评论0 收藏0
  • 图片框住一个小视 谈css padding百分比自适应

    摘要:今天市场提出活动页,活动页有一块内容是在一个手机背景图框里播放视频,网页是适配的,设计师只给我一张带有手机壳的背景图。 今天市场提出活动页,活动页有一块内容是在一个手机背景图框里播放视频,网页是适配的,设计师只给我一张带有手机壳的背景图。 如果用JS画应该也是可以的,但一个简单的活动页没必要,快速实现用背景图调CSS最快。 showImg(https://segmentfault.c...

    jcc 评论0 收藏0

发表评论

0条评论

singerye

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<