您的位置:首页 > 运维架构 > 网站架构

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

2017-02-06 10:33 417 查看
看完这个爬虫教学视频,亲自实验了一下,提取视频关键内容,得出此文。

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

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


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



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

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

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

# -*- coding:utf-8 -*-
import urllib
import urllib2
import re #正则
req = urllib2.Request('http://www.budejie.com/video') #请求页面
# 加一个键值对,针对服务器的反爬机制
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")
html = urllib2.urlopen(req).read()
reg = r'data-mp4="(.*?)"' #r目的是以原生字符串转义,不会改变类似于"\n"这样的字符串
for i in re.findall(reg, html): #找到视频地址
filename = i.split("/")[-1] #提取出文件名
print "正在下载%s" %filename
urllib.urlretrieve(i, "down_mp4/%s" %filename) #下载
print filename+"下载成功"
print "下载完成"

运行代码结果如下图:

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

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


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

# -*- coding:utf-8 -*-
import urllib
import urllib2
import re #正则
def getVideo(page):
req = urllib2.Request('http://www.budejie.com/video/%s' %page) #请求页面
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")
html = urllib2.urlopen(req).read()
reg = r'data-mp4="(.*?)"' #正则表达式
for i in re.findall(reg, html): #找到视频地址
filename = i.split("/")[-1] #视频文件名
print "正在下载%s" %filename
urllib.urlretrieve(i, "down_mp4/%s" %filename) #下载到与py文件同目录下的down_mp4文件夹
for i in range(1,21): #以下载前20页为例
getVideo(i)

运行代码结果如下图:

PS:本文仅用于爬虫实验,不用于盗取该网站视频,下载之后即删除。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  爬虫 python