没有内涵段子可以刷了,利用Python爬取段友之家贴吧图片和小视频(含源码)

时间:2022-08-30 13:39:11

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

没有内涵段子可以刷了,利用Python爬取段友之家贴吧图片和小视频(含源码)

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

段友之家 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) 学习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)

没有内涵段子可以刷了,利用Python爬取段友之家贴吧图片和小视频(含源码)的更多相关文章

  1. 利用python爬取58同城简历数据

    利用python爬取58同城简历数据 利用python爬取58同城简历数据 最近接到一个工作,需要获取58同城上面的简历信息(http://gz.58.com/qzyewu/).最开始想到是用pyth ...

  2. 利用python爬取城市公交站点

    利用python爬取城市公交站点 页面分析 https://guiyang.8684.cn/line1 爬虫 我们利用requests请求,利用BeautifulSoup来解析,获取我们的站点数据.得 ...

  3. 原创:用python把链接指向的网页直接生成图片的http服务及网站(含源码及思想)

    原创:用python把链接指向的网页直接生成图片的http服务及网站(含源码及思想) 总体思想:     希望让调用方通过 http调用传入一个需要生成图片的网页链接生成一个网页的图片并返回图片链接 ...

  4. 利用Python爬取豆瓣电影

    目标:使用Python爬取豆瓣电影并保存MongoDB数据库中 我们先来看一下通过浏览器的方式来筛选某些特定的电影: 我们把URL来复制出来分析分析: https://movie.douban.com ...

  5. 利用Python爬取朋友圈数据,爬到你开始怀疑人生

    人生最难的事是自我认知,用Python爬取朋友圈数据,让我们重新审视自己,审视我们周围的圈子. 文:朱元禄(@数据分析-jacky) 哲学的两大问题:1.我是谁?2.我们从哪里来? 本文 jacky试 ...

  6. 如何利用python爬取网易新闻

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: LSGOGroup PS:如有需要Python学习资料的小伙伴可以 ...

  7. 利用python爬取海量疾病名称百度搜索词条目数的爬虫实现

    实验原因: 目前有一个医疗百科检索项目,该项目中对关键词进行检索后,返回的结果很多,可惜结果的排序很不好,影响用户体验.简单来说,搜索出来的所有符合疾病中,有可能是最不常见的疾病是排在第一个的,而最有 ...

  8. 利用python爬取贝壳网租房信息

    最近准备换房子,在网站上寻找各种房源信息,看得眼花缭乱,于是想着能否将基本信息汇总起来便于查找,便用python将基本信息爬下来放到excel,这样一来就容易搜索了. 1. 利用lxml中的xpath ...

  9. 利用Python爬取可用的代理IP

    前言 就以最近发现的一个免费代理IP网站为例:http://www.xicidaili.com/nn/.在使用的时候发现很多IP都用不了. 所以用Python写了个脚本,该脚本可以把能用的代理IP检测 ...

随机推荐

  1. Android SharedPreferences存储

    原创文章,转载请注明出处:http://www.cnblogs.com/baipengzhan/p/Android_SharedPreferences.html 一 概念 SharedPreferen ...

  2. Lucene为不同字段指定不同分词器(转)

    在lucene使用过程中,如果要对同一IndexWriter中不同 Document,不同Field中使用不同的analyzer,我们该如何实现呢? 通过对<lucene in action&g ...

  3. 杭电 HDU ACM 1698 Just a Hook(线段树 区间更新 延迟标记)

    欢迎"热爱编程"的高考少年--报考杭州电子科技大学计算机学院 Just a Hook Time Limit: 4000/2000 MS (Java/Others)    Memor ...

  4. vim中使用gdb。

    引用文章A:http://easwy.com/blog/archives/advanced-vim-skills-vim-gdb-vimgdb/ 引用介绍:使用vimgdb来完成gdb的嵌入. 需要的 ...

  5. MUD教程--巫师入门教程3

    1. 指令格式为:edit <档名>,只加文件名,默认为当前目录,加here,表示编辑你当前所处的房间, 回车后即进入线上编辑系统. 2. 如果这是一个已经有的档案,你可以使用 z 或 Z ...

  6. 手把手教你用Mysql-Cluster-7&period;5搭建数据库集群

    前言 当你的业务到达一定的当量,肯定需要一定数量的数据库来负载均衡你的数据库请求,我在之前的博客中已经说明了,如何实现负载均衡,但是还有一个问题就是数据同步,因为负载均衡的前提就是,各个服务器的数据库 ...

  7. 关于python编译的一点小结

    大家都知道python是脚本语言,源码可以直接执行,有时需要提高执行效率或者保密(因为有时候不想让使用人看到源码文件),那就涉及到python编译了,那么该如何做呢? 有两种方法可以做到. 1.一种是 ...

  8. Effective C&plus;&plus; 第0章 explicit构造函数

    按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,将该构造函数对应数据类型的数据转换为该类对象,如下面所示: class String { String ( const char* p ); ...

  9. Jquery autocomplete&period;js输入框联想补全功能

    Jquery autocomplete.js插件下载地址:http://files.cnblogs.com/files/jinzhiming/autocomplete.rar 有两种用法,一种是直接使 ...

  10. uva-10815-字符串排序

    又偷懒了,字符串排序,贱贱的用了std:map #include <iostream> #include <sstream> #include<algorithm> ...