python爬取百思不得姐视频
1 页面分析
百思不得姐视频地址http://www.budejie.com/video/
看到这个地址的时候我们首先分析,这个地址的多页是如何实现的?访问其他页面时链接是怎么样的?所以我们直接点击页面2,然后查看请求地址的变化如下
2 数据查找
2.1 页面结构分析
通过页面结构,我们可以看到每个视频部分都是结构相同的块组成的。
2.2 数据查找
我们使用Chrome浏览器查看每块数据的大致结构,也可以通过查看源码,搜索关键字来查看页面源码,找到我们需要使用的字段进行匹配解析。
2.2.1 开发工具查看元素
2.2.2 页面源码查看代码结构
Mac 用cmd+f命令进行搜索关键字,找到第一条数据,分析结构,准备取数据。
3 获取有效信息
3.1 获取页面源码
# 请求数据
def get_response(url):# 为了防止被网站禁止访问,携带浏览器参数,假装浏览器请求headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'}# 取出返回的数据response = requests.get(url=url,headers=headers).contentreturn response
3.2 通过bs4模块解析html数据
通过bs4模块进行数据匹配,解析出有效数据。
# 通过返回的网页数据,过滤出文件名称和MP4路径
def get_content(html):# 通过bs4框架进行解析,这里用内置的默认解析器html.parser,也可以使用lxml解析器,需要安装soup = BeautifulSoup(html,"html.parser")# 获取每块的数据cont = soup.select(".j-r-list-c")# 定义一个数组存放匹配出的名称和MP4地址urlList = []for item in cont:# 查找第一个a标签的内容,作为我们后面保存MP4的文件名name = item.find('a').text# 查找MP4连接所在位置,通过data-mp4属性值取出pmUrl = item.select('.j-video')[0].get('data-mp4')# 以元祖的形式添加到数组urlList.append((name,pmUrl))return urlList
3.3 通过threading模块,异步下载视频
# 拼接MP4保存的路径和文件名,这里用多线程的方法
def get_mp4_url(movieList):'''判断当前脚本所在路径是否存在picture文件夹,这里用os模块,os.getcwd()获取当前文件的绝对路径使用os模块的该方法不用考虑所在系统是Mac还是windows'''filePath = os.path.join(os.getcwd(),'picture')# 判断路径是否存在,不存在则创建路径if not os.path.exists(filePath):print '路径不存在'os.makedirs(filePath)# 取出每个MP4的名称和路径的元祖for item in movieList:# 判断路径是否存在,不存在则跳转到下一个if item[1] == None:continue# 判断要使用的名称是否过长,如果超过30的话,我们就截取,因为文件名过长保存的时候会报错nameStr = item[0].strip() if len(item[0]) < 30 else item[0].strip()[:27] + '...'# 拼接文件的绝对路径mvPath = os.path.join(filePath,'%s.%s' % (nameStr.strip(),item[1][-3:]))'''通过多线程的方式下载MP4文件,增加下载速度'''thr = threading.Thread(target=save_mp,args=(mvPath,item[1]))# 启动线程thr.start()def save_mp(mvPath,url):'''保存MP4文件'''response = get_response(url) #调用方法返回MP4文件的二进制流数据# 通过文件写入的方式保存成文件with open(mvPath,'wb') as fp:fp.write(response)
4 程序完成源码
'''
Created by swh on 2017.09.12
'''
#_*_coding:utf-8_*_import requests
import re
from bs4 import BeautifulSoup
import threading
import os# 请求数据
def get_response(url):# 为了防止被网站禁止访问,携带浏览器参数,假装浏览器请求headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'}# 取出返回的数据response = requests.get(url=url,headers=headers).contentreturn response# 通过返回的网页数据,过滤出文件名称和MP4路径
def get_content(html):# 通过bs4框架进行解析,这里用内置的默认解析器html.parser,也可以使用lxml解析器,需要安装soup = BeautifulSoup(html,"html.parser")# 获取每块的数据cont = soup.select(".j-r-list-c")# 定义一个数组存放匹配出的名称和MP4地址urlList = []for item in cont:# 查找第一个a标签的内容,作为我们后面保存MP4的文件名name = item.find('a').text# 查找MP4连接所在位置,通过data-mp4属性值取出pmUrl = item.select('.j-video')[0].get('data-mp4')# 以元祖的形式添加到数组urlList.append((name,pmUrl))return urlList# 拼接MP4保存的路径和文件名,这里用多线程的方法
def get_mp4_url(movieList):'''判断当前脚本所在路径是否存在picture文件夹,这里用os模块,os.getcwd()获取当前文件的绝对路径使用os模块的该方法不用考虑所在系统是Mac还是windows'''filePath = os.path.join(os.getcwd(),'picture')# 判断路径是否存在,不存在则创建路径if not os.path.exists(filePath):print '路径不存在'os.makedirs(filePath)# 取出每个MP4的名称和路径的元祖for item in movieList:# 判断路径是否存在,不存在则跳转到下一个if item[1] == None:continue# 判断要使用的名称是否过长,如果超过30的话,我们就截取,因为文件名过长保存的时候会报错nameStr = item[0].strip() if len(item[0]) < 30 else item[0].strip()[:27] + '...'# 拼接文件的绝对路径mvPath = os.path.join(filePath,'%s.%s' % (nameStr.strip(),item[1][-3:]))'''通过多线程的方式下载MP4文件,增加下载速度'''thr = threading.Thread(target=save_mp,args=(mvPath,item[1]))# 启动线程thr.start()def save_mp(mvPath,url):'''保存MP4文件'''response = get_response(url) #调用方法返回MP4文件的二进制流数据# 通过文件写入的方式保存成文件with open(mvPath,'wb') as fp:fp.write(response)if __name__ == '__main__':'''2017-09-12作者抓取数据的时候实测共有50页数据,下面是多页请求,'''# for i in range(1,51):# print i# urlStr = 'http://www.budejie.com/video/%s' % str(i)# html = get_response(urlStr)# ll = get_content(html)# get_mp4_url(ll)'''** 由于我们这里仅用于测试,所以我们之抓取一页** 链接最后的数字表示抓取的数据页码,由于首页的1可以不写,也可以写上** 为了大家更好的理解多页的表示,这里我们仅抓取一页,并且链接后面写有页码1'''urlStr = 'http://www.budejie.com/video/1'html = get_response(urlStr)ll = get_content(html)get_mp4_url(ll)
5 执行结果
python爬取百思不得姐视频相关推荐
- Python爬取百思不得姐的视频
本次使用Python爬取百思不得姐中的视频,虽然其中视频提供了下载,但作为程序猿,你懂的(本次使用的Python的版本为3.6.1). 其源码如下: #_*_ coding:utf-8 _*_ imp ...
- python爬取bilibili数据_如何使用Python爬取bilibili视频(详细教程)
Python爬取bilibili视频 摘要 为了解决PC端的bilibili无法下载视频的问题,使用python语言可以实现一个能够爬取bilibili某个视频资源(不包括会员视频)的程序.采用整个视 ...
- python如何爬取网页视频_快就完事了!10分钟用python爬取网站视频和图片
原标题:快就完事了!10分钟用python爬取网站视频和图片 话不多说,直接开讲!教你如何用Python爬虫爬取各大网站视频和图片. 638855753 网站分析: 我们点视频按钮,可以看到的链接是: ...
- 用Python爬取Bilibili视频,难吗?
作者:Mike_Shine 来源:https://urlify.cn/2qyMBb 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很 ...
- python爬取YB视频评论
python爬取评论 一.背景 二.整体思路 三.代码讲解 3.1 代码结构 3.2 核心代码 3.2.1 爬虫核心代码 3.2.2 界面核心代码 3.2.3 json转excel 四.爬取结果 五. ...
- Python爬取CCTV视频
文章目录 前言 一.需求 二.分析 微视频 长视频 三.处理 四.运行效果 前言 为了更好的掌握数据处理的能力,因而开启Python网络爬虫系列小项目文章. 小项目小需求驱动,每篇文章会使用两种以上的 ...
- python爬取小视频-今天给大家带来了python抓取b站小视频的小爬虫
首先打开小视频 的网页 url = http://vc.bilibili.com/p/eden/rank#/?tab=%E5%85%A8%E9%83%A8 然后我们来分析下url: 点击排行榜,默认全 ...
- python爬取快手视频 多线程下载
直接开始! 环境: python 2.7 + win10 工具:fiddler postman 安卓模拟器 首先,打开fiddler,fiddler作为http/https 抓包神器,这里就不多介绍. ...
- python爬取短视频,Python爬虫一键下载yy全站短视频详细步骤(附源码)
基本开发环境 Python 3.6 Pycharm 相关模块的使用 importosimport requests 安装Python并添加到环境变量,pip安装需要的相关模块即可. 一.确定目标需求 ...
最新文章
- 中国财团收购飞利浦照明业务遭美封杀
- DFS与BFS的总结
- gin获取post参数
- BUUCTF 新年快乐 内涵的软件 Java逆向解密 刮开有奖
- 终于,一键打通微信和QQ
- 删除所有的视图,存储过程
- wampserver 虚拟主机
- 数据卡片_VISA消息:关于VCPS 2.1卡片产品的性能和交叉测试的卡片个性化数据的更新...
- liferay 去掉 portlet:actionUrl 跳转时的message
- C# 曲线上的点(一) 获取指定横坐标对应的纵坐标值
- navicat+for+mysql10.0.11简体中文破解版
- guass法matlab
- 游戏引擎Flax Engine分析(八)渲染
- 基于 Robot Framework 实现网络自动化测试
- jcepolicy7.zip linux,HDP安全之集成kerberos/LDAP、ranger(knox自带LDAP)
- 打卡赠书 | 养成一个思考习惯
- CC2530入网流程
- 数据驱动的营销方式和加拿大禁止Clearview AI
- C语言beep中有什么作用,C++中发声函数Beep用法
- 网际协议IP(计算机网络)