视频抓取原理:获取所有的知识类别id-》然后获取其子项-》根据子项链接分析获取该类课程数-》循环获取链接指向的视频。
需要安装python库:requests
python解析xml使用了网上找的代码。
本来可以再优化。但是懒!

 # coding: UTF-8
import os
import sys
import requests
import urllib.request,io
from html.parser import HTMLParser #全局变量 id_list = set() #保存视频ID的列表
id_dict = {} #保存id和对应子视频数目
cookies = {} #保存cookies #HTML解析类
class MyHTMLParser(HTMLParser):
def __init__(self, key, attr):
HTMLParser.__init__(self)
self.links = []
self.keys = key
self.attr = attr
def handle_starttag(self, tag, attrs):
#print "Encountered the beginning of a %s tag" % tag
#if tag == "source":
if tag == self.keys:
if len(attrs) == 0:
pass
else:
for (variable, value) in attrs:
#if variable == "src":
if variable == self.attr:
self.links.append(value) #解析cookies字典
def getCookies(cookies_str):
global cookies
for line in cookiesStr.split(';'):
#其设置为1就会把字符串拆分成2份
name, value = line.strip().split('=', 1)
cookies[name] = value def getHtml(url, key, value):
global cookies
r = requests.get(url, cookies=cookies)
content = r.content.decode('UTF-8')
hp = MyHTMLParser("source", "src")
hp.feed(content)
hp.close()
print(hp.links)
for link in hp.links:
link_str = str(link)
if link_str.find(".mp4") >= 0:
downloadFile(link, key, value)
else:
print("没有找到对应视频") #获取课程数目
def getCourseNum(url):
global cookies
url_list = set()
r = requests.get(url, cookies=cookies)
content = r.content.decode('UTF-8')
hp = MyHTMLParser("a", "href")
hp.feed(content)
hp.close()
for link in hp.links:
link_str = str(link)
if link_str.find("http://www.jikexueyuan.com/course/") >= 0 and link_str.find(".html?ss=1") >= 0:
url_list.add(link_str)
return url_list.__len__() #获取所有视频ID,根据目录网页
def getIdList(root):
global cookies
r = requests.get(root, cookies=cookies)
content = r.content.decode('UTF-8')
hp = MyHTMLParser("a", "href")
hp.feed(content)
hp.close()
#print(hp.links)
#声明引用全局id_list,在最上面定义
global id_list
global id_dict for link in hp.links:
link_str = str(link)
if link_str.find("http://www.jikexueyuan.com/course/") >= 0 and link_str.find(".html")>= 0:
#print(link)
c_id = link_str.lstrip("http://www.jikexueyuan.com/course/").rstrip(".html")
if c_id not in id_list:
id_dict[c_id] = getCourseNum(link_str)
print(c_id, id_dict[c_id])
id_list.add(c_id)
print(id_dict) def downloadFile(url, key, value):
#url = 'http://cv4.jikexueyuan.com/10de45bbf83e450ff5e11ff4599d7166/201603202253/cocos2d-x/course_712/01/video/c712b_01_h264_sd_960_540.mp4'
r = requests.get(url)
file_name = str(key)+"_"+str(value)+".mp4"
with open(file_name, "wb") as code:
code.write(r.content) if __name__=="__main__":
count = 0
#解析cookies 利用免费时间下载需要视频,需要账号的cookies
cookiesStr = "通过谷歌浏览器可以获取"
getCookies(cookiesStr) root = "http://ke.jikexueyuan.com/xilie/331?huodong=shequn_0307"
getIdList(root) head = "http://www.jikexueyuan.com/course/" for key in id_dict:
if id_dict[key] <= 0:
print(id_dict[key],"没有数据")
break
for i in range(1, id_dict[key]+1):
url = head+key+"_"+str(i)+".html?ss=1"
print("下载:")
print(url)
count += 1
getHtml(url, key, i)
print("视频总数:")
print(count)
可以优化的点:由于没有获取到每个视频的名字,看起来很不爽。可以获取视频的名字,然后根据类别建立文件夹。这样保存起来更方便观看。

cookies真的可以获取直接用。那么意味着如果截取用户浏览器登陆信息也可以直接登陆并获取有用的信息。哪些黑客获取cookies然后盗取用户信息原理就是这样的么?有意思。

python抓取某学院视频的更多相关文章

  1. 用python 抓取B站视频评论,制作词云

    python 作为爬虫利器,与其有很多强大的第三方库是分不开的,今天说的爬取B站的视频评论,其实重点在分析得到的评论化作嵌套的字典,在其中取出想要的内容.层层嵌套,眼花缭乱,分析时应细致!步骤分为以下 ...

  2. 用python实现的抓取腾讯视频所有电影的爬虫

    1. [代码]用python实现的抓取腾讯视频所有电影的爬虫    # -*- coding: utf-8 -*-# by awakenjoys. my site: www.dianying.atim ...

  3. Python抓取视频内容

    Python抓取视频内容 Python 是一种面向对象.解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年.Python语法简洁而清晰,具 ...

  4. Python爬虫实现抓取腾讯视频所有电影【实战必学】

    2019-06-27 23:51:51 阅读数 407  收藏 更多 分类专栏: python爬虫   前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问 ...

  5. python抓取网页例子

    python抓取网页例子 最近在学习python,刚刚完成了一个网页抓取的例子,通过python抓取全世界所有的学校以及学院的数据,并存为xml文件.数据源是人人网. 因为刚学习python,写的代码 ...

  6. Python 抓取网页并提取信息(程序详解)

    最近因项目需要用到python处理网页,因此学习相关知识.下面程序使用python抓取网页并提取信息,具体内容如下: #---------------------------------------- ...

  7. 使用 Python 抓取欧洲足球联赛数据

    Web Scraping在大数据时代,一切都要用数据来说话,大数据处理的过程一般需要经过以下的几个步骤    数据的采集和获取    数据的清洗,抽取,变形和装载    数据的分析,探索和预测    ...

  8. python抓取性感尤物美女图

    由于是只用标准库,装了python3运行本代码就能下载到多多的美女图... 写出代码前面部分的时候,我意识到自己的函数设计错了,强忍继续把代码写完. 测试发现速度一般,200K左右的下载速度,也没有很 ...

  9. Python抓取页面中超链接(URL)的三中方法比较(HTMLParser、pyquery、正则表达式) <转>

    Python抓取页面中超链接(URL)的3中方法比较(HTMLParser.pyquery.正则表达式) HTMLParser版: #!/usr/bin/python # -*- coding: UT ...

随机推荐

  1. yii2 配置文件加载顺序, 以及调用自定义配置信息。

    在配置上一般有以下问题: 每个团队成员都会有自己的配置项,提交这样的配置项将会影响其他团队成员: 生产库密码和API密钥不应该出现在代码库中: 有多个服务器环境的情况:开发.测试.生产:每一种环境应该 ...

  2. XmlHelper

    获取XML节点的值(http服务使用xml传输数据,节点名称唯一) /// <summary> /// 获取xml节点的值 /// </summary> /// <par ...

  3. 关于/usr/local/lib/libz.a(zutil.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC解决办法

    具体报错截图如下: 解决方法: 题外话,我对makefill cmake也是一窍不通因此本人也是不想去积极的解决这个问题,但是当你求助无缘的时候你才会静心去思考.读到这句话的时候也许你已经发现了问题所 ...

  4. kendo模板 Uncaught Error: Invalid template:' 报错

    I was having a problem with a grid toolbar template because of a # in a hrefWorked out that I needed ...

  5. 解决 git 提交文件提示 Filename too long 问题

    1.git config --system core.longpaths true 2.git config core.longpaths true

  6. C++中的数组越界

    C++中数组发生越界错误时, compiling过程不会报错, linking过程也不会报错, 会在executing过程中发生意想不到的错误或问题.

  7. HDFS读写数据块--${dfs.data.dir}选择策略

    最近工作需要,看了HDFS读写数据块这部分.不过可能跟网上大部分帖子不一样,本文主要写了${dfs.data.dir}的选择策略,也就是block在DataNode上的放置策略.我主要是从我们工作需要 ...

  8. Android扫盲教程大全经典教程全分享

    Android扫盲教程大全经典教程全分享,相当于android的简单用户手册下载路径 Android扫盲教程大全经典教程全分享.rar

  9. js生成[n,m]的随机数 以及实际运用

    Math.ceil();  //向上取整. Math.floor();  //向下取整. Math.round();  //四舍五入. Math.random();  //0.0 ~ 1.0 之间的一 ...

  10. Linux学习 :Uboot, Kernel, 根文件系统初步分析

    1.U-Boot启动内核的过程可以分为两个阶段: 1)第一阶段的功能 硬件设备初始化 加载U-Boot第二阶段代码到RAM空间 设置好栈 跳转到第二阶段代码入口 2)第二阶段的功能 初始化本阶段使用的 ...