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 ...
随机推荐
- 关于java对Excel的读取
/*注意:读取的Excel文件 请另存为2003版本的Excel,否则可能会报错别忘记导入第三方的jar包*/package com.zzp.ExcelParse;import jxl.Cell;im ...
- blade and soul Group Combos
Group Combos A martial artist always make friends along their way. They learn how to work and fight ...
- node.js+socket.io安装
最近做安卓遇到一个网络包的bug,服务端使用node做的,通讯用socket.io,但是服务端没法调试,没办法,还是自己搭建一个服务器端吧,索性买了阿里云的ecs测试,之前也配置过node+socke ...
- [转载] linux查找目录下的所有文件中是否含有某个字符串
链接自 http://blog.sina.com.cn/s/blog_691a84f301015khx.html,并略加修订. 查找目录下的所有文件中是否含有某个字符串 find .|xargs gr ...
- 以软件周期C开发周期说明不同测试的使用情况
我们所使用的测试方法有以下几种 功能测试 单元测试(使用场景:在编码阶段,每完成一段相对完整的代码块时,单元测试几乎贯穿整个编码过程) 黑盒测试(使用场景:在编码阶段,没完成一各相对独立的模块时,例如 ...
- 对git的认识
对git这个词我听过但不了解,更谈不了认识.只能咨询百度了. Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理. Git 是 Linus Torvalds 为了帮 ...
- 利用WPS 2012/2013 0day针对中国政府部门的定向攻击
今天早上,我们捕获到一个利用wps 2012/2013 0day针对中国政府部门的钓鱼邮件定向攻击事件. 邮件发件人以2014中国经济形势解析高层报告组委会 标题发出,附件为包含wps2012 0da ...
- MFC之键盘和键盘消息处理
今天学习了最基本的MFC操作,键盘及键盘消息函数,跟着书中的内容自己编了个小程序.检测用户是否同时按下SHIFT和B键 第一步:先是建了一个单文档模式的MFC程序,添加了键盘消息及处理函数.键盘消息处 ...
- python网络编程【二】(使用UDP)
UDP通信几乎不使用文件对象,因为他们往往不能为数据如何发送和接受提供足够的控制.下面是一个基本的UPD客户端: #!/usr/bin/env python import socket,sys hos ...
- usb端口号绑定
由于ubuntu USB设备号为从零开始依次累加,所以多个设备每次开机后设备号不固定,机器人每次开机都要蛋疼的按顺序插, 在网上找到一种方法:udev的规则 udev的规则说明,可以参考博客说明:ht ...