python抓取某学院视频
视频抓取原理:获取所有的知识类别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抓取某学院视频的更多相关文章
- 用python 抓取B站视频评论,制作词云
python 作为爬虫利器,与其有很多强大的第三方库是分不开的,今天说的爬取B站的视频评论,其实重点在分析得到的评论化作嵌套的字典,在其中取出想要的内容.层层嵌套,眼花缭乱,分析时应细致!步骤分为以下 ...
- 用python实现的抓取腾讯视频所有电影的爬虫
1. [代码]用python实现的抓取腾讯视频所有电影的爬虫 # -*- coding: utf-8 -*-# by awakenjoys. my site: www.dianying.atim ...
- Python抓取视频内容
Python抓取视频内容 Python 是一种面向对象.解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年.Python语法简洁而清晰,具 ...
- Python爬虫实现抓取腾讯视频所有电影【实战必学】
2019-06-27 23:51:51 阅读数 407 收藏 更多 分类专栏: python爬虫 前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问 ...
- python抓取网页例子
python抓取网页例子 最近在学习python,刚刚完成了一个网页抓取的例子,通过python抓取全世界所有的学校以及学院的数据,并存为xml文件.数据源是人人网. 因为刚学习python,写的代码 ...
- Python 抓取网页并提取信息(程序详解)
最近因项目需要用到python处理网页,因此学习相关知识.下面程序使用python抓取网页并提取信息,具体内容如下: #---------------------------------------- ...
- 使用 Python 抓取欧洲足球联赛数据
Web Scraping在大数据时代,一切都要用数据来说话,大数据处理的过程一般需要经过以下的几个步骤 数据的采集和获取 数据的清洗,抽取,变形和装载 数据的分析,探索和预测 ...
- python抓取性感尤物美女图
由于是只用标准库,装了python3运行本代码就能下载到多多的美女图... 写出代码前面部分的时候,我意识到自己的函数设计错了,强忍继续把代码写完. 测试发现速度一般,200K左右的下载速度,也没有很 ...
- Python抓取页面中超链接(URL)的三中方法比较(HTMLParser、pyquery、正则表达式) <转>
Python抓取页面中超链接(URL)的3中方法比较(HTMLParser.pyquery.正则表达式) HTMLParser版: #!/usr/bin/python # -*- coding: UT ...
随机推荐
- JVM 虚拟机 内存说明
Java虚拟机所管理的内存图: 1程序计数器: 该模块作用是记录线程执行字节码的位置,记录程序执行状态,以便该线程下次获得CPU时继续执行.程序里的每个线程程序计数器相互独立,互不影响,该内存区也称“ ...
- winform flash
1.开发工具:VS2013 2.开发环境:win 10 64位 3.添加控件: 打开VS,点击工具箱--常规--右键--“选择项”---“Com组件”--MacroMedia Flash Factor ...
- 一个crackme的分析
是看雪合集的一个,因为老师让我们多练习,所以我就找了个crackme来练习 http://images2015.cnblogs.com/blog/638600/201612/638600-201612 ...
- js小时分钟控件--
直接上代码: var str = ""; document.writeln("<div id=\"_contents\" tabindex=99 ...
- WireShark网络性能分析
最近生产上出现一个性能问题,表现为:行情延时5s左右.从log一路追查下去,发现是我们自己写的一个行情网关(部署在xx.xx.xx.132)<->第三方的中转网关(部署在xx.xx.xx. ...
- Coding源码学习第三部分(EaseStartView.m)
首先接上篇的要做一个NSEnumerator 类的延展阅读. 枚举(NSEnumerator) (1)依附于集合类(NSArray,NSSet,NSDictionary),没有用来创建实例的接口. ( ...
- 带转义符的json解释
1.json数组:jsonData.取json数组中message的appid的值.例子: var jsonData = { "code":"200", &qu ...
- C#数据库导出(入)TXT
导出: public void ExportTxt() { var file = System.IO.File.Open(path, System.IO.FileMode.Open); using ( ...
- 【JavaScript】固定布局轮播图特效
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- ssh 注解写法
弄了半天 (好久哦) 首先 applicationContext-db.xml <?xml version="1.0" encoding="UTF-8" ...