网络爬虫程序,可以爬取某些网站上的视频,音频,图片或其它文件,然后保存到本地电脑上;
有时在工作中非常有用,那在技术上如何进行爬取文件和保存到本地呢?下面以python语言为例,讲解python爬取视频文件保存到本地电脑的思路和简要过程;
一,Python安装,
python程序执行必须基于电脑中首先安装python;
python下载地址:https://www.python.org
python文档下载地址:https://www.python.org/doc/
python安装参考url:https://www.runoob.com/python3/python3-install.html
这个下载参考别人自行安装即可,不再过多讲解;
二,python IDE的安装,
python安装了之后,可以运行python程序了,但编写python程序还需要借助开发环境(IDE),
其中pycharm是非常好的python IDE,用来开发python程序非常方便好用;
PyCharm 下载地址 : https://www.jetbrains.com/pycharm/download/
PyCharm 安装地址:http://www.runoob.com/w3cnote/pycharm-windows-install.html
其安装过程自行参考网上教程;
三,爬虫程序开发的思路和简要过程,
1,安装必要的模块,
#更新pip版本,该功能用于安装其它模组
pip install --upgrade pip
#安装视频剪辑模组
pip install moviepy
#安装请求模块,一般已经安装
pip install requests
安装方法,winOS下是启动DOS窗口,分别执行上面命令,等待下载完成即可;
2,爬取原理,
如果我们知道某个视频的网址,直接使用python程序请求,返回的视频内容按一定格式存到本地电脑即可,对,原理就是这么简单;
(1)那如何知道视频的网址呢?注意这里说得是视频的网址,不是网页的网址,可以有有多种方式,可通过抓包工具获取视频网址,也可以通过按浏览器F12查看页面HTML的视频标签内容获得,但这种多数可能看不到,还可以浏览器F12切换到网络请求项,然后刷新有视频的页面,这个肯定会有视频请求的网址,然后观察分析获取对应视频url即可,这一步核心就是找视频URL,不管通过什么方式,找到视频链接即可;
音频,图片或其它文件的网址查找方法也是一样方式,其中图片还可以根据图片的html元素特征,使用正则方式提取出来;
(2)请求资源,找到视频网址后,就是请求对应的视频资源,python语言大致如下:
import requests
videoUrl = "http://www.xxx.com/xpath/yvideo"
videoRes = requests.get(videoUrl)
print(videoRes.status_code)
(3)权限和访问限制问题,当我们上面(2)请求后,发现返回请求状态码很可能是403,即禁止访问,主要是权限和访问限制相关问题,一般网站都有一定的权限和访问限制等问题,如有些必须登录访问,有些限制程序自动化访问,所以这个时候可以使用参数伪装请求头和referer信息,扮演模拟像是用户在浏览器发起的请求,对不须登录的到此即可,如果还有需要登录才能访问的页面,则首先需要真实注册登录之后,浏览器F12,观察获取登录关键信息,如token等信息,然后模拟真实请求,在python中设置登录信息到合适的参数或请求头位置,这一步关键是设置合理的请求头或登录信息模拟真实用户在浏览器发起的请求,目的解决权限和访问限制问题,例如下面:
import requests
"""
普及一下:
user-agent: 浏览器以及操作系统的一些信息,
referer:关联来源页,
cookie:用户标识,
在模拟用户浏览器请求一般需要前两个参数,登录再需要后一个参数,
注意:没有请求头和referer信息的请求一般被认定为程序化请求,
按浏览器F12再网络请求项的请求头可以看到,复制过来即可;
登录信息一般用到cookie或localstorage,同样浏览器F12再网络请求项的请求头或aplication项
"""
reqHeaders = {"user-agent":"...","referer":"..."}
reqCookies = {"token":"xxx","userName":"yyy"}
videoUrl = "http://www.xxx.com/xpath/yvideo"
videoRes = requests.get(videoUrl, headers = reqHeaders, cookies = reqCookies)
(4)保存资源,在上面第(3)步之后,一般都请求成功了,请求到的资源内容,使用python语言按某种格式文件写到本地某路径中保存起来,例如:
import requests
import os
"""
普及一下:
user-agent: 浏览器以及操作系统的一些信息,
referer:关联来源页,
cookie:用户标识,
在模拟用户浏览器请求一般需要前两个参数,登录再需要后一个参数,
注意:没有请求头和referer信息的请求一般被认定为程序化请求,
按浏览器F12再网络请求项的请求头可以看到,复制过来即可;
登录信息一般用到cookie或localstorage,同样浏览器F12再网络请求项的请求头或aplication项
"""
reqHeaders = {"user-agent":"...","referer":"..."}
reqCookies = {"token":"xxx","userName":"yyy"}
#建立存储路径,winOS系统下假设如下路径
savePath = "d:\\myTempFile"
if not os.path.exists(savePath):
os.makedirs(savePath)
# 视频文件(后缀名.mp4)的请求,下载和保存
videoUrl = "http://www.xxx.com/xpath/yvideo"
videoRes = requests.get(videoUrl, headers = reqHeaders, cookies = reqCookies)
videoPath = savePath + os.sep + "myVideo.mp4"
# 向打开的文件写入请求返回的视频数据二进制内容
open(videoPath,"wb").write(videoRes.content)
print(res.status_code)
到此视频文件已经下载下来;
(5)音频文件下载,上面下载的视频有时是没有声音的,主要是因为有些网站把视频内容和
音频内容分离成两个文件,所以还需要按上面的步骤找到音频文件的网址,然后请求下载音频资源,保存到本地电脑某路径中,例如下面:
import requests
import os
"""
普及一下:
user-agent: 浏览器以及操作系统的一些信息,
referer:关联来源页,
cookie:用户标识,
在模拟用户浏览器请求一般需要前两个参数,登录再需要后一个参数,
注意:没有请求头和referer信息的请求一般被认定为程序化请求,
按浏览器F12再网络请求项的请求头可以看到,复制过来即可;
登录信息一般用到cookie或localstorage,同样浏览器F12再网络请求项的请求头或aplication项
"""
reqHeaders = {"user-agent":"...","referer":"..."}
reqCookies = {"token":"xxx","userName":"yyy"}
#建立存储路径,winOS系统下假设如下路径
savePath = "d:\\myTempFile"
if not os.path.exists(savePath):
os.makedirs(savePath)
# 视频文件(后缀名.mp4)的请求,下载和保存
videoUrl = "http://www.xxx.com/xpath/yvideo"
videoRes = requests.get(videoUrl, headers = reqHeaders, cookies = reqCookies)
videoPath = savePath + os.sep + "myVideo.mp4"
# 向打开的文件写入请求返回的视频数据二进制内容
open(videoPath,"wb").write(videoRes.content)
# 音频文件(后缀名.mp3)的请求,下载和保存
audioUrl = "http://www.xxx.com/xpath/yaudio"
audioRes = requests.get(audioUrl, headers = reqHeaders, cookies = reqCookies)
audioPath = savePath + os.sep + "myAudio.mp3"
# 向打开的文件写入请求返回的音频数据二进制内容
open(audioPath,"wb").write(audioRes.content)
print(videoRes.status_code)
(6)视频音频合并成最终含有声音的视频文件,借助 moviepy 模块进行处理,完整示例代码参考如下:
from moviepy.editor impoprt *
import requests
import os
"""
普及一下:
user-agent: 浏览器以及操作系统的一些信息,
referer:关联来源页,
cookie:用户标识,
在模拟用户浏览器请求一般需要前两个参数,登录再需要后一个参数,
注意:没有请求头和referer信息的请求一般被认定为程序化请求,
按浏览器F12再网络请求项的请求头可以看到,复制过来即可;
登录信息一般用到cookie或localstorage,同样浏览器F12再网络请求项的请求头或aplication项
"""
reqHeaders = {"user-agent":"...","referer":"..."}
reqCookies = {"token":"xxx","userName":"yyy"}
#建立存储路径,winOS系统下假设如下路径
savePath = "d:\\myTempFile"
if not os.path.exists(savePath):
os.makedirs(savePath)
# 视频文件(后缀名.mp4)的请求,下载和保存
videoUrl = "http://www.xxx.com/xpath/yvideo"
videoRes = requests.get(videoUrl, headers = reqHeaders, cookies = reqCookies)
videoPath = savePath + os.sep + "myVideo.mp4"
# 向打开的文件写入请求返回的视频数据二进制内容
open(videoPath,"wb").write(videoRes.content)
print("视频请求下载状态码:" + videoRes.status_code)
# 音频文件(后缀名.mp3)的请求,下载和保存
audioUrl = "http://www.xxx.com/xpath/yaudio"
audioRes = requests.get(audioUrl, headers = reqHeaders, cookies = reqCookies)
audioPath = savePath + os.sep + "myAudio.mp3"
# 向打开的文件写入请求返回的音频数据二进制内容
open(audioPath,"wb").write(audioRes.content)
print("音频请求下载状态码:" + audioRes.status_code)
# 把视频音频文件合并成最终含有声音的视频文件
videoClip = VideoFileClip(videoPath)
audioClip = AudioFileClip(audioPath)
finaVideo = videoClip.set_audio(audioClip)
finaVideoPath = savePath + os.sep + "finaVideo.mp4"
finaVideo.write_videofile(finaVideoPath)
print("视频音频合并完成,路径为:" + finaVideoPath)
以上是使用python语言进行爬取合并同时保存视频频频的例子,对图片或其它文件估计还更简单,如果爬取网页的某些文本字符串内容,相似的,请求页面,返回html,然后分析目标文本字符所属html标签的特征,使用字符处理或正则匹配规则,提取出所需的文本文字内容,然后写入某文件即可;
设计爬取功能函数,使用定时任务,按一定合理频次调用爬取功能函数,即可工程化自动完成任务了;
需要注意的是,如果高频非法调用网络爬虫程序去爬取某些网站,这些可能涉及违法行为,也可能导致服务器瘫痪,所以在学习爬虫程序,仅建议合理使用,不能做违法的事,否则发现就被送去踩缝纫机了,切记;