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爬取百思不得姐视频相关推荐

  1. Python爬取百思不得姐的视频

    本次使用Python爬取百思不得姐中的视频,虽然其中视频提供了下载,但作为程序猿,你懂的(本次使用的Python的版本为3.6.1). 其源码如下: #_*_ coding:utf-8 _*_ imp ...

  2. python爬取bilibili数据_如何使用Python爬取bilibili视频(详细教程)

    Python爬取bilibili视频 摘要 为了解决PC端的bilibili无法下载视频的问题,使用python语言可以实现一个能够爬取bilibili某个视频资源(不包括会员视频)的程序.采用整个视 ...

  3. python如何爬取网页视频_快就完事了!10分钟用python爬取网站视频和图片

    原标题:快就完事了!10分钟用python爬取网站视频和图片 话不多说,直接开讲!教你如何用Python爬虫爬取各大网站视频和图片. 638855753 网站分析: 我们点视频按钮,可以看到的链接是: ...

  4. 用Python爬取Bilibili视频,难吗?

    作者:Mike_Shine 来源:https://urlify.cn/2qyMBb 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很 ...

  5. python爬取YB视频评论

    python爬取评论 一.背景 二.整体思路 三.代码讲解 3.1 代码结构 3.2 核心代码 3.2.1 爬虫核心代码 3.2.2 界面核心代码 3.2.3 json转excel 四.爬取结果 五. ...

  6. Python爬取CCTV视频

    文章目录 前言 一.需求 二.分析 微视频 长视频 三.处理 四.运行效果 前言 为了更好的掌握数据处理的能力,因而开启Python网络爬虫系列小项目文章. 小项目小需求驱动,每篇文章会使用两种以上的 ...

  7. python爬取小视频-今天给大家带来了python抓取b站小视频的小爬虫

    首先打开小视频 的网页 url = http://vc.bilibili.com/p/eden/rank#/?tab=%E5%85%A8%E9%83%A8 然后我们来分析下url: 点击排行榜,默认全 ...

  8. python爬取快手视频 多线程下载

    直接开始! 环境: python 2.7 + win10 工具:fiddler postman 安卓模拟器 首先,打开fiddler,fiddler作为http/https 抓包神器,这里就不多介绍. ...

  9. python爬取短视频,Python爬虫一键下载yy全站短视频详细步骤(附源码)

    基本开发环境 Python 3.6 Pycharm 相关模块的使用 importosimport requests 安装Python并添加到环境变量,pip安装需要的相关模块即可. 一.确定目标需求 ...

最新文章

  1. 中国财团收购飞利浦照明业务遭美封杀
  2. DFS与BFS的总结
  3. gin获取post参数
  4. BUUCTF 新年快乐 内涵的软件 Java逆向解密 刮开有奖
  5. 终于,一键打通微信和QQ
  6. 删除所有的视图,存储过程
  7. wampserver 虚拟主机
  8. 数据卡片_VISA消息:关于VCPS 2.1卡片产品的性能和交叉测试的卡片个性化数据的更新...
  9. liferay 去掉 portlet:actionUrl 跳转时的message
  10. C# 曲线上的点(一) 获取指定横坐标对应的纵坐标值
  11. navicat+for+mysql10.0.11简体中文破解版
  12. guass法matlab
  13. 游戏引擎Flax Engine分析(八)渲染
  14. 基于 Robot Framework 实现网络自动化测试
  15. jcepolicy7.zip linux,HDP安全之集成kerberos/LDAP、ranger(knox自带LDAP)
  16. 打卡赠书 | 养成一个思考习惯
  17. CC2530入网流程
  18. 数据驱动的营销方式和加拿大禁止Clearview AI
  19. C语言beep中有什么作用,C++中发声函数Beep用法
  20. 网际协议IP(计算机网络)

热门文章

  1. 一款集多功能办公学习软件超强神器officeTools工具集,满足你大部分需求 !
  2. yii2 leftjoin问题
  3. Linux发展编年史
  4. 优秀Android开源项目大全
  5. Mac下为什么有的文件名后带一个* 星号?
  6. 如何 生成7位数随机数
  7. 优启通U盘安装原版Win xp系统教程
  8. 服务器托管比租用贵主要体现在哪些方面
  9. 关于大公司和小公司的选择
  10. 怎么样用计算机解锁密码忘了,电脑开机密码忘了怎么办_怎样跳过电脑开机密码...