文档章节

十五行代码爬取百思不得姐网站数百视频

p
 popma
发布于 2017/07/23 18:33
字数 607
阅读 5
收藏 0

看完这个爬虫教学视频,亲自实验了一下,提取视频关键内容,得出此文。

用不超过15行代码爬取百思不得姐网站上的视频:

爬取地址:http://www.budejie.com/video/

我需要下载的视频就是如下图所示:

这是video页面的一部分,每一页有20个视频,准备以下载前20页为例:

先分析一下第一页网页源代码,ctrl+F搜索"骑摩托穿梭于越南街头是种什么感受?",找到第一个视频的下载地址:(如下图所示)

下面编写代码,下载这个页面的所有"data-mp4=..."的视频

 1 # -*- coding:utf-8 -*-
 2 import urllib
 3 import urllib2
 4 import re #正则
 5 req = urllib2.Request('http://www.budejie.com/video') #请求页面
 6 # 加一个键值对,针对服务器的反爬机制
 7 req.add_header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36")
 8 html = urllib2.urlopen(req).read()
 9 reg = r'data-mp4="(.*?)"'  #r目的是以原生字符串转义,不会改变类似于"\n"这样的字符串
10 for i in re.findall(reg, html):  #找到视频地址
11     filename = i.split("/")[-1]   #提取出文件名
12     print "正在下载%s" %filename
13     urllib.urlretrieve(i, "down_mp4/%s" %filename)  #下载
14     print filename+"下载成功"
15 print "下载完成"

运行代码结果如下图:

那么第一页的20个视频都下载完成了,但是我希望下载前20页视频,所以把上面代码写成一个函数,调用20次就行了,每一次给函数传递页码就行了,因为百思不得姐的视频第二页的网址是

http://www.budejie.com/video/2

所以每次改变1-20就行了。

 1 # -*- coding:utf-8 -*-
 2 import urllib
 3 import urllib2
 4 import re #正则
 5 def getVideo(page):
 6     req = urllib2.Request('http://www.budejie.com/video/%s' %page)  #请求页面
 7     req.add_header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36")
 8     html = urllib2.urlopen(req).read()
 9     reg = r'data-mp4="(.*?)"'  #正则表达式
10     for i in re.findall(reg, html):  #找到视频地址
11         filename = i.split("/")[-1]   #视频文件名
12         print "正在下载%s" %filename
13         urllib.urlretrieve(i, "down_mp4/%s" %filename)  #下载到与py文件同目录下的down_mp4文件夹
14 for i in range(1,21):  #以下载前20页为例
15     getVideo(i)

运行代码结果如下图:

PS:本文仅用于爬虫实验,不用于盗取该网站视频,下载之后即删除。

 

© 著作权归作者所有

p
粉丝 0
博文 16
码字总数 6632
作品 0
崇明
私信 提问
python爬虫:爬取网站视频

python爬取百思不得姐网站视频:http://www.budejie.com/video/ 新建一个py文件,代码如下: #!/usr/bin/python -- coding: UTF-8 -- import urllib,re,requestsimport sysreload(sys)sys.se......

M四月天
2017/05/23
0
0
SurfaceView周边淡出效果

请教个问题,点击视频播放,其他地方变黑(有点像变淡的效果),界面底下有评论栏 然后点击界面黑色的地方,又会显示出整个布局。 描述可能不清楚,效果就是百思不得姐里面点击视频播放的效果...

楠D枫
2016/12/01
132
0
Python3 发送邮件时,服务器认证失败,但是FireMail可以认证成功。求解。

我用python写发送邮件,账户密码填写的跟Firemail中的一毛一样,但是每次都是服务器认证失败。搞不懂哪里错了。FireMail 也是用的SMTP 协议,所以不存在我没有获得真正的授权码。同样SMTP,为...

晴天小猪is_me
2018/11/15
128
2
一个关于list的appen奇怪问题

在pydev环境下,流程是这样:从文件中pickle.load所有数据,数据本身应该是一个list,读取之后向list中append一行数据之后,再pickle.dump回文件。现在遇到的问题是,如果list是空的,当app...

WhatABigX
2016/09/13
167
3
Flask不能加载CSS样式文件

今天跟着Flask教程在学习,进行到“ 静态文件”部分,自己添加了一个简单的.css文件,但是浏览器却无法加载。 我的代码很简单,过程如下: 1.创建main.css 1.在页面中引用main.css 3.路由方法...

黃健民
2015/01/15
8.8K
1

没有更多内容

加载失败,请刷新页面

加载更多

全面兼容IE6/IE7/IE8/FF的CSS HACK写法

浏览器市场的混乱,给设计师造成很大的麻烦,设计的页面兼容完这个浏览器还得兼容那个浏览器,本来ie6跟ff之间的兼容是很容易解决的。加上个ie7会麻烦点,ie8的出现就更头疼了,原来hack ie...

前端老手
15分钟前
3
0
常用快递电子面单批量打印api接口对接demo-JAVA示例

目前有三种方式对接电子面单: 1.快递公司:各家快递公司逐一对接接口 2.菜鸟:支持常用15家快递电子面单打印 3.快递鸟:仅对接一次,支持常用30多家主流快递电子面单打印 目前也是支持批量打...

程序的小猿
18分钟前
6
0
Yii 框架中rule规则必须搭配验证函数才能使用

public $store_id;public $user_id;public $page;public $limit;public $list;public $mch_list;public $cart_id;public $is_community;public $shop_id;public $cart_typ......

chenhongjiang
20分钟前
4
0
Flutter使用Rammus实现阿里云推送

前言: 最近新的Flutter项目有“阿里云推送通知”的需求,就是Flutter的App启动后检测到有新的通知,点击通知栏然后跳转到指定的页面。在这里我使用的是第三方插件Rammus来实现通知的推送,之...

EmilyWu
21分钟前
41
0
Knative 实战:三步走!基于 Knative Serverless 技术实现一个短网址服务

短网址顾名思义就是使用比较短的网址代替很长的网址。维基百科上面的解释是这样的: 短网址又称网址缩短、缩短网址、URL 缩短等,指的是一种互联网上的技术与服务,此服务可以提供一个非常短...

阿里巴巴云原生
36分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部