博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
没有内涵段子可以刷了,利用Python爬取段友之家贴吧图片和小视频(含源码)
阅读量:7172 次
发布时间:2019-06-29

本文共 4225 字,大约阅读时间需要 14 分钟。

hot3.png

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

同时,之前同事也发了一个贴吧的段子聚居地,客官稍等,马上奉上连接:  

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

其实吧,用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)学习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: cuizytime:2018-05-19"""import requestsimport bs4import osdef 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+  725479218def 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://my.oschina.net/u/3849319/blog/1824624

你可能感兴趣的文章
LAMP架构讲解(续一)
查看>>
51la图片做网店流量统计
查看>>
压力测试工具JMeter入门教程
查看>>
linux下查看文件编码及修改编码
查看>>
VC中的延时
查看>>
算法与数据结构知识点
查看>>
在单位成功实验的PIX配置
查看>>
centos6.x使用dd命令制作u盘启动
查看>>
如何使用Wireshark抓包
查看>>
mysql 时间函数用法 集合
查看>>
技术宅男既要提升编程技术也要加强沟通能力
查看>>
开源计划--格瓦拉梦想(GUEVARA‘S DREAM)
查看>>
show full columns 和 checking privileges的说明
查看>>
电信网络拓扑图自动布局之总线
查看>>
数据库启动时报ORA-00845错误解决方法
查看>>
查询阿里云存储文件并导出excle 保存到本地
查看>>
WebService-—调用第三方提供的webService服务
查看>>
LVM报错:resize2fs: Bad magic number in super-block
查看>>
从开发到部署会用到的 Docker 命令
查看>>
access数据库转mysql数据库
查看>>