python极客学院爬虫V1

  1. 定向爬取极客学院视频,原本只有年费VIP只能下载,经过分析,只要找个免费体验VIP即可爬取所有视频
  2. 涉及的基本技术:python xpath 正则 com+
  3. 通过python调用迅雷从组件,实现自动创建文件夹和自动添加批量下载任务,前提要成功安装迅雷和迅雷组件
  4. 思路:path路径爬取所有标签-》搜索页面所有该课程分类-》课程页面获取课程明细-》正则分析视频地址
  5. 极客学院的一直在改进,可能需要自己改进

import requests from lxml import etree import re import sys, os, glob,time import scrapy

reload(sys) sys.setdefaultencoding("utf-8")

#baesurl = "http://www.jikexueyuan.com/search/s/q_"
#base_path = "f:/jike/"

#heanders Cookie需要自己抓取,否则只能抓取到免费课程

headers = { "Host": "www.jikexueyuan.com", "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8", "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3", "Accept-Encoding": "gzip, deflate", "Cookie": "ga=GA1.2.1700377703.1438173034; Hmlvtf3c68d41bda15331608595c98e9c3915=1438173034; MECHATLVTime=1438179151498; MECHATCKID=cookieVal=006600143817303272961295; statssid=1438985023415; statuuid=1438173038588973692017; connect.sid=s%3AWt8IWWxkVZ6zlhop7HpbG-vtXqtwIAs.QC1tYy4qV1bHOMDN0UTUfScLKFncl4NY5zAk1SS17Kw; QINGCLOUDELB=37e16e60f0cd051b754b0acf9bdfd4b5d562b81daa2a899c46d3a1e304c7eb2b|VbjfT|VbjfT; Hmlpvtf3c68d41bda15331608595c98e9c3915=1438179151; statisNew=0; statfromWebUrl=; gat=1; uname=jike76; uid=2992598; code=SMapFI; authcode=d572TzIvHFXNIVNXcNf4vI5lv1tQlyEknAG4m0mDQmvMRPa4VhDOtJXOSfO%2BeVFVPzra8M1sEkEzxqLX9qRgS6nWhd5VMobbDpeqvJ726i54TqMoDo81P4OlhQ", "Connection": "keep-alive" }

class jikeautodown: basepath = "" baseurl = "" coursetag = "" courseid = ""

def __init__(self, base_path, base_url):
    if base_path and base_url:
        self.base_path = base_path
        self.base_url = base_url
        self.get_tags()
    else:
        print("base_path and base_url is all must needed!")
        return

def run(self):
    self.get_tags()

get_tags 获取所有便签

def get_tags(self):
    url = "http://www.jikexueyuan.com/path/"
    tag_html = requests.get(url).text.decode("utf-8").encode("GB18030")
    tag_etree = etree.HTML(tag_html)
    tag_lists = [str(tag).rstrip("/")[str(tag).rstrip("/").rindex("/") + 1:] for tag in
                 tag_etree.xpath(‘/html/body/div[1]/div[4]/div/div[3]/div/a/@href‘) if tag]
    if tag_lists:
        for tag in tag_lists:
            print(tag)
            self.course_tag = tag
            self.get_total_page(tag)

get_tags 获取课程所有页面 课程分页是js生成不好直接抓取,所以就暴力了

def get_total_page(self, tag):
    if tag:
        for page in range(1, 50):
            page_url = self.base_url + tag + "?pageNum=%d" % page
            # print(page_url)
            page_html = requests.get(page_url, headers=headers).text.decode("utf-8").encode("GB18030")
            # print(page_html)
            no_userMenu = re.search(r"userMenu", page_html, re.S)
            if no_userMenu is None:
                print("please check the cookies")
                return
            no_search = re.search(r"no-search", page_html, re.S)
            if no_search:
                print("the tag ;%s,%d is biggest page" % (tag, page - 1))
                # return page_url_lists
                break
            else:
                # page_url_lists.append(page_url)
                self.get_course_pages(page_url)
                # print(page_url)

getcoursepages 获取课程详细页面

def get_course_pages(self, tag_url):
    if tag_url:
        print("the tag_url:%s " % tag_url)
        course_page_lists = self.get_xpath_lists(tag_url, headers,
                                                 ‘//*[@id="changeid"]/ul/li/div/div[2]/h5/a/@href‘)
        if course_page_lists:
            for course_page_url in course_page_lists:
                self.get_down_urls(course_page_url)

getdownurls通过正则获取视频下载地址

def get_down_urls(self, course_page_url):
    if course_page_url:
        self.course_id = course_page_url[course_page_url.rindex("/") + 1:course_page_url.rindex(".")]
        # print(course_page_url)
        print("             course_id:%s %s" % (self.course_id, course_page_url))
        course_down_lists = self.get_xpath_lists(course_page_url, headers,
                                                 ‘//*[@class="video-list"]/div[2]/ul/li/div/h2/a/@href‘)
        if course_down_lists:
            for course_down_url in course_down_lists:
                course_down_html = requests.get(course_down_url, headers=headers).text.decode("utf-8").encode(
                    "GB18030")
                course_down = re.findall(r‘source src="(.*?)"‘, course_down_html, re.S)
                if course_down:
                    print("                     %s" % course_down[0])
                    if self.addTasktoXunlei(course_down[0]):
                        # print("                     %s is add success!" % course_down[0])
                        print("                     is add success!")
                        time.sleep(5)

getfilelists创建文件夹

def get_file_lists(self, course_tag, course_id):
    course_path = ""
    if self.base_path and os.path.exists(self.base_path) == False:
        try:
            os.mkdir(self.base_path)
        except Exception:
            print("error :%s" % Exception.message)
            return
    if course_tag and os.path.exists(self.base_path + course_tag) == False:
        try:
            os.mkdir(self.base_path + course_tag)
            # print("%s dir is create success!" % (self.base_path + course_tag))
        except Exception:
            print("dir is create error,the error is %s" % Exception.message)

    tmp = self.base_path + course_tag + "\\" + str(course_id)
    if course_id and os.path.exists(tmp) == False:
        try:
            os.mkdir(tmp)
            course_path = tmp
            # print("%s dir is create success!" % tmp)
        except Exception:
            print("dir is create error,the error is %s" % Exception.message)
            return
    else:
        course_path = tmp
    return course_path

getxpathlists 专门解析xpath,不用每次都写

def get_xpath_lists(self, url, headers, xpath):
    try:
        html = requests.get(url, headers=headers).text.decode("utf-8").encode("GB18030")
        tree = etree.HTML(html)
        lists = [str(plist) for plist in tree.xpath(xpath) if plist]
    except Exception:
        print("get xpath list is error is :%s" % Exception.message)
        return
    return lists

addTasktoXunlei 添加迅雷任,必须安装迅雷,还需要对迅雷设置默认不提醒,否则就需要手动点击确定了

def addTasktoXunlei(self, down_url):
    flag = False
    from win32com.client import Dispatch
    o = Dispatch("ThunderAgent.Agent.1")
    # http: // cv3.jikexueyuan.com / 201508011650 / a396d5f2b9a19e8438da3ea888e4cc73 / python / course_776 / 01 / video / c776b_01_h264_sd_960_540.mp4
    if down_url:
        course_infos = str(down_url).replace(" ", "").replace("http://", "").split("/")
        course_path = self.get_file_lists(self.course_tag, self.course_id)
        try:
            o.AddTask(down_url, course_infos[len(course_infos)-1], course_path, "", "http://cv3.jikexueyuan.com", 1, 0, 5)
            o.CommitTasks()
            flag = True
        except Exception:
            print(Exception.message)
            print("                     AddTask is fail!")
    return flag

if __name__ == "__main__":
    myjike = jike_auto_down("f:\\jike\\", "http://www.jikexueyuan.com/search/s/q_")
    myjike.run()
时间: 2024-10-27 06:20:48

python极客学院爬虫V1的相关文章

基于requests实现极客学院课程爬虫

背景 本文主要是为了完成极客学院课程<Python 单线程爬虫>中讲师布置的实战作业. 开发环境 操作系统:windows 10 Python :Python 2.7 IDE:PyCharm 4.5.3 安装requests 在CMD命令提示窗口敲以下一行命令即可安装. pip install requests 实现代码 # coding=utf-8 __author__ = 'scaleworld' import requests import re import sys reload(sy

极客学院Web前端开发技术实战视频教程 初级入门+高级实战++专家课程+面试指导

===============课程目录=============== ├<初级中级>│  ├<1. HTML5开发前准备>│  │  ├1.HTML5开发前准备.mp4│  │  └2.开发前的准备-快捷键.mp4│  ├<10. React.js>│  │  ├React.js简介.txt│  │  ├<1.React 概述>│  │  │  ├React 开发环境搭建.mp4│  │  │  ├编写第一个 React 程序.mp4│  │  │  └什么

【极客学院出品】Cocos2d-X系列课程之九-BOX2D物理引擎

Cocos2d-x 是时下最热门的手游引擎,在国内和国外手机游戏开发使用的份额各自是70%和25%,在App Store的top10中,有7个是用它开发的. 本节课程为Cocos2d-x系列课程之九,学习BOX2D物理引擎! 学习路径图: 课程适合小白系统学习,仅需6个课时,在极客学院首席讲师风趣幽默的课程里轻松掌握BOX2D物理引擎.恭喜你也从此将走上为牛X程序员的不归路. 今年上午9点正式上线,请别再期待娱乐圈的新闻了,马上開始学习吧>>> 我们还有很多其它更新更实战的课程,登录极客

极客学院开源硬件视频教程 玩转Arduino

玩转Arduino 极客学院开源硬件视频教程玩转 Arduino --数据通信:串口通信玩转Arduino--周边模块:执行部件玩转Arduino-周边模块-传感器部件(1)玩转 Arduino --周边模块-传感器部件(2) 下载地址:http://www.feixueteam.net/thread-840-1-1.html

极客学院视频下载脚本

在极客学院充了三个月的会员,在线看视频,感觉有点卡,一级一级下载,又麻烦,于是写了个脚本.帮我下.呵呵. 请看截图.如果想要,留言哈.

极客学院年VIP卡原价260的F码,200出售

F码是中国最大的IT职业在线教育平台——极客学院推出的VIP时间兑换码,凭此可在极客学院官网兑换年VIP,畅享平台上所有IT技术课程. 购买请点击 http://www.bejson.com/other/jikefma/ 这个会员能做什么 观看全部课程 技术问答 资料下载 高清视频下载 优先提交课程需求 使用方法: 1.登陆极客学院官网:www.jikexueyuan.com 2.登陆会员账号\注册极客学院会员账号 3.点击主页右上角账户名,找到“我的F码”,输入获得的F码,畅享全部IT技术课程

Ubuntu linux下部署golang配置环境,极客学院 无闻讲的安装配置是错的,折腾我好几遍,真是有点坑

开始按极客学院无闻讲的做,弄了几遍都不行,最后发现是错的,别人告诉我这是mac下的virtualbox是这样的,不管怎样,被坑的不浅. 虽然sudo apt install golang-go 就能安装,但是不是最新版本.安装最新版本的正确步骤如下: 一.需要文件 golang:http://www.golangtc.com/download 二.安装golang 一)从上文给出的链接中选择所需要的版本的golang包(选linux-amd64.tar.gz版本,本人是64位系统,我安装时最新版

极客学院免费vip

[手快福利]用我的链接注册极客学院,你我都能免费得30天VIP!6500+编程开发视频教程随便学,还能下载资料和源码:http://e.jikexueyuan.com/invite/index.html?ZnJvbV9jb2RlPTZVWEVHSSZ1bmFtZT1qaWtlXzcyMzMwODImY2hhbm5lbD1pbnZpdGVfc2hhcmVidXR0b25fcXpvbmUwMw" target="_blank">http://e.jikexueyuan.co

[极客学院_滨院]-七月刷楼层专用贴

[关于极客学院_滨院] 答:这是一个群,这个群里都是“宝”,你懂得,欢迎你的加入:471647556 ----------------------------------------------------------------★疑问解答区★------------------------------------------------------------ 下面小编回答以下几个疑问: 1.如何刷楼? 答:刷楼很简单,你仅仅需要在评论里面pia pia pia即可 2.为什么要刷楼- -?