百思不得其解——视频爬取
今天,小编学习了关于 百四不得其解 视频得爬取,该网站并没有采取Ajax请求或者 一些其他得 关于请求参数 加密得方法,所以是很好进行爬取得。
网址如下:
http://www.budejie.com/
打开 浏览器 得开发者工具,查看网页源代码,再对相应得 html进行分析,分析网址 所在。
本次,小编采用得是 正则表达式re,python中提供关于 正则 得入口。
首先,模块导入
import requests
# 正则表达式
import re
# 下载视频的工具包
import urllib.request
下面定义一个全局变量 用来存储 爬取后得 视频标题及 视频得连接。方便以后 进行索引。
'''
声明全局变量 除了视频资源后还有其他的数据,
选哟筛选数据,将筛选后的数据存储到全局变量中
'''
url_name = []
下面,获取数据:
def get_url():
url = 'http://www.budejie.com/'
# 利用requests请求数据
html = requests.get(url).text
# print(html)
# 数据筛选
url_content = re.compile(r'<div class="j-r-list-c">.*?</div>.*?/div>', re.S)
url_contents = re.findall(url_content, html)
for i in url_contents:
# 进一步提取数据,包括 视频标题 和视频连接
url_reg = r'data-original="(.*?)"'
url_items = re.findall(url_reg, i)
# print(url_items)
# 提取视频标题
if url_items:
name_reg = re.compile(r'a href="/detail-\d{8}\.html">(.*?)</a>')
name_items = re.findall(name_reg, i)
for a, b in zip(name_items, url_items):
url_name.append([a,b])
else:
pass
下面开始 进行下载 视频,并以 视频内容作为标题进行命名:
(当然也可以 用MD5加密,对视频得内容进行 定长输出)
def download():
# 异常
for i in url_name:
print(i[0], end='')
print(i[1])
try:
urllib.request.urlretrieve(i[1], './视频/%s.gif' % (i[0]))
except Exception as e:
print(e)
print("下载异常!!!")
pass
下面 是关于 MD5加密:
import hashlib
md5 = hashlib.md5()
md5.update('how to use md5 in python hashlib?')
print md5.hexdigest()
计算结果如下:
d26a53750bc40b38b65a520292f69306
对于中文格式得要进行 encode操作。
下面 是小编 修改后:
urllib.request.urlretrieve(i[1], './视频/%s.gif' %
(hashlib.md5(i[0].encode(encoding='UTF-8')).hexdigest()))
如图:
看上去 效果不太好😅😅😅😅😅😅😅
感觉还是 用中文命名方便
下面就是爬取得过程了: