视频抓取原理:获取所有的知识类别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. blade and soul pvp guide

    PvP PvP in Blade and Soul is categorized into two types, a personal PvP called Arena and a large-sca ...

  2. 【流程管理】【PCB】PCB设计流程

    添加封装 封装库用官方库,如没有添加补丁库,用原库或其他库中元件复制修改 调用封装时可先放置到PCB里进行测量 3D模型添加网站 封装库分类按厂商分类,常用器件按器件类型分类, 命名使用规范 导入PC ...

  3. 转: Rest简介及Spring实现

    一 Roy Fielding 2000年Rest被Roy Fielding提出来的,我对Roy Fielding的印象有以下几个. 一是RoyFielding做为Http协议的起草者,在Http协议发 ...

  4. MicroERP1.0简介及下载

    Micro ERP(蓝本)适用于中小微型企事业单位实施信息化管理.本系统研发初始即摒弃了传统ERP所众所周知的诸多繁琐功能,始终坚持以简化流程.平稳实施.快 速应用为切入点.在功能不断完善.健壮的同时 ...

  5. php 循环删除目录中的过期文件

            $savepath1 = 'Public/biaoqian/upload';         $path1 = dir($savepath1);           while (($ ...

  6. linux基本常用命令列举

    上回装完虚拟机中的linux系统了,进入找到terminal,打开命令行界面 pwd:展示目前为止绝对路径 cd cd~:跳转到/home/yy的位置 cd-:跳转到上一步的位置 cd path(绝对 ...

  7. asp.net错误页和asp.net mvc错误页设置

    asp.net错误页 在日常项目开发过程中,我们需要给网站设置错误页和记录错误日志. 首先,在项目中添加全局应用程序类 在Global.asax中 protected void Application ...

  8. c++ 之 编译期多态&运行期多态

    编译时多态:程序运行前发生的事件 —— 函数重载.运算符重载 .模板  ——静态绑定 运行时多态:程序运行时发生的事件 —— 虚函数机制——动态绑定 template<typename T> ...

  9. [linux-内核][转]内核日志及printk结构浅析

    这段时间复习了一下内核调试系统,注意看了一下printk的实现以及内核日志的相关知识,这里做一下总结. 1.问题的引出: 做DPDK项目时,调试rte_kni.ko时,发现printk并不会向我们想想 ...

  10. python获取指定时间段内的随机不重复的时间点

    上篇 <python时间时分秒与秒数的互相转换>http://www.cnblogs.com/gayhub/p/6154707.html 提到了把时间转成秒数的方法, 这篇写写转换成秒数后 ...