网页视频抓取脚本(爬虫测试样例序言)

优采云 发布时间: 2021-09-29 13:04

  网页视频抓取脚本(爬虫测试样例序言)

  pip3安装请求

  试样

  此外,序言中还有16段视频。我们使用Python爬虫技术在本地批量下载它们

  #/?vid=0

  ​

  直链

  首先,我们需要获得视频下载直链。右击选中,可以直接看到视频的直链

  ​

  再看一下页面的源代码,发现缺少视频直链。视频直链的原创位置已成为JS脚本

  ​

  如果我们直接使用请求库来请求URL,我们会得到源代码,但是源代码中没有视频直接链接,所以我们应该考虑改变我们的想法。为什么视频直链的位置被JS取代

  当有更多的爬虫程序时,您将知道这是网页的动态加载。必须有一个JS文件来存储视频的直链。然后,每次加载网页时,通过JS脚本将视频的直链动态加载到HTML中

  点击网络,过滤JS文件,找到三个JS文件。让我们看看第一个JS文件中是否有视频直链。搜索视频的标题,直接查找视频的直链,并找到视频的所有直链都保存到名为lesson_uuuList的文件中

  ​

  第一课所有视频名称和视频直接链接信息都保存在列表中。为统一起见,序言改为第0节

  #lesson_uuList.py

  课程列表=[{

  “名称”:“第0节vue.js简介”

  “url”:“

  “询问”:“77367”

  },{

  “名称”:“第1节安装和部署”

  “url”:“

  “询问”:“77369”

  },{

  “名称”:“第2节创建第一个Vue应用程序”

  “url”:“

  “询问”:“77370”

  },{

  “名称”:“第3节数据和方法”

  “url”:“

  “询问”:“77372”

  },{

  “名称”:“第4节生命周期”

  “url”:“

  “询问”:“77373”

  },{

  “名称”:“第5节模板语法-插值”

  “url”:“

  “询问”:“77375”

  },{

  “名称”:“第6节模板语法-说明”

  “url”:“

  “询问”:“77376”

  },{

  “名称”:“第7节装订类别和样式”

  “url”:“

  “询问”:“77377”

  },{

  “名称”:“第8节条件呈现”

  “url”:“

  “询问”:“77378”

  },{

  “名称”:“第9节列表呈现”

  “url”:“

  “询问”:“77380”

  },{

  “名称”:“第10节事件绑定”

  “url”:“

  “询问”:“77381”

  },{

  “名称”:“第11节表单输入绑定”

  “url”:“

  “询问”:“77382”

  },{

  “名称”:“第12节组件基础”

  “url”:“

  “询问”:“77383”

  },{

  “名称”:“第13节部件注册”

  “url”:“

  “询问”:“78520”

  },{

  “名称”:“第14节单文件组件”

  “url”:“

  “询问”:“78521”

  },{

  “名称”:“第15节无终端开发Vue应用程序”

  “url”:“

  “询问”:“81004”

  }]

  批量下载

  在这里,使用for循环遍历每个下载链接,然后使用之前编写的多线程下载程序进行下载

  从concurrent.futures导入ThreadPoolExecutor

  从课程列表导入课程列表

  从请求导入获取,头部

  导入时间

  类下载器:

  定义初始化(self,url,num,name):

  self.url=url

  self.num=num

  self.name=名称

  self.getsize=0

  r=头(self.url,allow_redirects=True)

  self.size=int(r.headers['Content-Length'])

  def下降(自身、开始、结束、块大小=10240):

  headers={'range':f'bytes={start}-{end}

  r=get(self.url,headers=headers,stream=True)

  将open(self.name,“rb+”)作为f:

  f、 搜索(开始)

  对于r.iter\u内容中的块(块大小):

  f、 写入(块)

  self.getsize+=块大小

  def主(自):

  开始时间=time.time()

  f=打开(self.name,“wb”)

  f、 截断(自身大小)

  f、 关闭()

  tp=线程池执行器(最大工作线程数=self.num)

  期货=[]

  开始=0

  对于范围内的i(self.num):

  end=int((i+1)/self.num*self.size)

  future=tp.submit(self.down、start、end)

  futures.append(未来)

  开始=结束+1

  尽管如此:

  进程=self.getsize/self.size*100

  last=self.getsize

  时间。睡眠(1)

  curr=self.getsize

  向下=(当前最后一次)/1024

  如果下降>1024:

  速度=f'{down/1024:6.2f}MB/s'

  其他:

  速度=f'{down:6.2f}KB/s'

  打印(f'process:{process:6.2f}%|速度:{speed}',end='r')

  如果流程>=100:

  打印(进程:{100.00:6}%|速度:00.00KB/s',结束=“|”)

  中断

  结束时间=time.time()

  总时间=结束时间-开始时间

  平均速度=自身大小/总时间/1024/1024

  打印(f'总时间:{总时间:{0f}s}平均速度:{平均速度:{2f}MB/s')

  如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':

  对于课程列表中的课程:

  url=课程['url']

  名称=课程['name']

  down=downloader(url,8,name+'.mp4')

  down.main()

  结果打印

  在56秒内下载了16个视频,总计339mb

  进程:100.0%|速度:00.00KB/s |总时间:2s |平均速度:47MB/s

  进程:100.0%|速度:00.00KB/s |总时间:3s |平均速度:6.62MB/s

  进程:100.0%|速度:00.00KB/s |总时间:3s |平均速度:72MB/s

  进程:100.0%|速度:00.00KB/s |总时间:4s |平均速度:72MB/s

  进程:100.0%|速度:00.00KB/s |总时间:4s |平均速度:85MB/s

  进程:100.0%|速度:00.00KB/s |总时间:7s |平均速度:7.01MB/s

  进程:100.0%|速度:00.00KB/s |总时间:3s |平均速度:4.65MB/s

  进程:100.0%|速度:00.00KB/s |总时间:4s |平均速度:69MB/s

  进程:100.0%|速度:00.00KB/s |总时间:3s |平均速度:88MB/s

  进程:100.0%|速度:00.00KB/s |总时间:4s |平均速度:5.01MB/s

  进程:100.0%|速度:00.00KB/s |总时间:3s |平均速度:6.60MB/s

  进程:100.0%|速度:00.00KB/s |总时间:4s |平均速度:6.20MB/s

  进程:100.0%|速度:00.00KB/s |总时间:3s |平均速度:96MB/s

  进程:100.0%|速度:00.00KB/s |总时间:2s |平均速度:64MB/s

  进程:100.0%|速度:00.00KB/s |总时间:3s |平均速度:6.02MB/s

  进程:100.0%|速度:00.00KB/s |总时间:4s |平均速度:80MB/s

  ​

  总结与展望

  有时候视频或图片的直接链接不一定需要爬网,可能在网页上加载的JS文件中就可以找到,既然可以直接找到,为什么要爬网呢?那么下载的时候一定要使用多线程,因为多线程可以占用宽带,全速下载

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线