python爬虫下载模块_python爬虫——下载ted视频

鄙人长期知乎潜水,这是我的第一篇知乎文章,如有不好的地方请多指教

自学爬虫一个月有余,又是一个英语学习爱好者,突然心血来朝想去ted上面看下如何爬视频

1.所用工具

requests模块 ——爬虫核心

urllib.request模块——爬虫核心

BeautifulSoup模块——parser分析模块

re模块——正则匹配

python版本3.6

2.网页分析

进入talks页面 我们所看见的页面是这样子的

talks一共有72页

并且发现它的url地址的规律是

所以我们可以很简单的拿到talks的所有(36*72)个视频了

3.进一步分析详细页

这个页面进去的分页就是我们所要下载的内容了

随意点击进入详细视频页面,分析talks页与详细页面的关联

我们可以发现详细页面的url地址是TED Talks加上作者名字加标题,中间用“_”来分割组合的

这样就可以很方便我们去talks页面爬去视频标题并将拼接成子页面进一步爬取

接下来在浏览器中按下F12 打开调试器可以发现所有的标题都在这个节点之内并且它的href属性提取出来

4.开始写爬虫

import requests

from bs4 import BeautifulSoup

import re

import urllib.request

num=input("输入要查找的ted的页码 1-72")

url_page='https://www.ted.com/talks?page=%s'%num

ted_page=requests.get(url_page).content

soup=BeautifulSoup(ted_page,"html.parser")

cont=soup.findAll(attrs={"data-ga-context":"talks"})

ted_page返回的就是我们所要爬去的内容了

通过BeautifulSoup解析内容解析的方式选择“html.parser”

通过标签的属性分析发现其含有url地址的属性为data-ga-context=“talks”

得到的cont就是所有含有url地址的节点

由于我们发现他的每个视频下面都含有2个相同的视频地址

所以我们先随机提取一个值来进行测试

page=2 #假设我们提取第二个视频

raw_url = cont[page * 2]['href']

url='https://www.ted.com%s'%(raw_url) #拼接视频页

response=requests.get(url)

cont=response.content

soup=BeautifulSoup(cont,"html.parser")

我们并没有在这个页面找到他的下载链接

通过测试发现原来下载链接藏在了右上角的share里面

通过浏览器调试器发现链接的地址是藏在了js标签中间 界面是通过js的鼠标点击后 渲染到div标签中的 这样我们可以直接读取他的js标签 而不用模拟鼠标点击等待渲染后再爬取

5.re模块的正则匹配

element=soup.findAll("script")

patter=re.compile('http.*?mp4.apikey=.*?"')

stre=patter.findall(str(element))

打印stre的内容我们发现他有很多的视频链接 我们依次点开发现内容的差别就是视频的分辨率不同而已 我个人比较喜欢看分辨率高的视频所以再一次进行过滤

donwload_url=''

for _ in stre:

if "1500k" in _:

_=_.split('"')

donwload_url=_[0]

这样 download_url就是我们要的视频链接了

6.下载视频

urllib.request.urlretrieve(donwload_url, filename="ted.mp4", reporthook=Schedule)

调用urllib.request.urlretreieve模块来下载mp4格式的视频,保存在当前目录下

其中reporthook看名字就知道是一个返回下载进度的hook勾子函数

7.查看下载进度

第一函数Schedule

pre=0

def Schedule(a,b,c):

global pre

per = 100.0 * a * b / c

if int(per)-pre>0:

print('%.2f%%' % per)

pre=int(per)

这样会在下载进度每增加1%的时候打印一下进度 以便我们了解

8.one more thing

完整的代码我已经git到我的github上面了 需要练习的小伙伴欢迎下载 如有不足请指出

github还有scrapy框架爬取动态网站unsplash下载图片

以及使用phantomJS+selenium模拟浏览器行为爬取吃鸡网站数据并且分析

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值