楼主: ZQZ520
6383 3

[其他] Python [推广有奖]

  • 2关注
  • 49粉丝

院士

17%

还不是VIP/贵宾

-

威望
4
论坛币
-1176554 个
通用积分
6481.7315
学术水平
99 点
热心指数
203 点
信用等级
94 点
经验
31773 点
帖子
656
精华
7
在线时间
2457 小时
注册时间
2014-5-7
最后登录
2021-8-4

楼主
ZQZ520 在职认证  发表于 2014-5-19 09:44:03 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
       之前一直使用flcvd下载优酷视频,这周看到老师讲的爬虫,手痒痒了。于是捣腾了下,从优酷页面爬取视频页面,访问flcvd 抓取下载地址,生成迅雷下载列表。
通过爬虫对正则有更深入的理解,尤其是在优酷分2种:
'http://v\.youku\.com这个为视频播放页面。例如http://v.youku.com/v_show/id_XNDkyODQwNjgw.html  《楚汉传奇 第40集》。单集下载抓取
'http://www\.youku\.com/show_page 为剧集页面。例如:http://www.youku.com/show_page/id_z70902150919c11e0a046.html 《楚汉传奇》,可以批量抓取剧集的下载地址哦!

欢迎大家拍砖,有哪些好的建议请指出!
#coding="utf-8"
import re
import urllib2
import threading
import Queue
class youku(threading.Thread):
    def __init__(self,baseUrl,youkuQueue):
        threading.Thread.__init__(self)
        self.baseUrl=baseUrl if self.hasHttp().match(baseUrl) else 'http://'+baseUrl
        self.youkuQueue=youkuQueue
        self.vshow=self.youku_v_show()
        self.showpage=self.youku_show_page()
        self.start()
    def hasHttp(self):
        return re.compile("^http://")

    def youku_v_show(self):
        return re.compile(r'http://v\.youku\.com/v_show/id_.+\.html')

    def youku_show_page(self):
        return re.compile(r'http://www\.youku\.com/show_page/id_.+\.html')

    def parseUrl(self):
        req=urllib2.urlopen(self.baseUrl)
        contet=req.read()


        if self.vshow.match(self.baseUrl):
            return set(self.vshow.findall(contet))
        else:
            return set(self.showpage.findall(contet))

    def run(self):
        print "start parse Youku "
        matches=self.parseUrl()
        print matches
        for matche in matches:
            print 'matches:%s'%matche
            self.youkuQueue.put(matche)
"""
if __name__=='__main__':
    Base_Url="http://www.youku.com/show_page/id_z70902150919c11e0a046.html"
    #Base_Url="http://tv.youku.com/search/"
    #Base_Url="http://v.youku.com/v_show/id_XNDkyODUyMTQ0.html"
    #Base_Url="http://www.baidu.com"
    youkuQueue=Queue.Queue()
    youku=youku(Base_Url,youkuQueue)
"""
复制代码

#coding="utf-8"
import re
import urllib
import urllib2
import threading
import Queue

class flcvd(threading.Thread):
    Bae_Url="http://www.flvcd.com/parse.php?"
    def __init__(self,worknum,form,downloadList,youkuQueue):
        threading.Thread.__init__(self)
        #self.url=youkuUrl
        self.showpage=self.hidentFileUrl()
        self.vshow=self.youku_v_show()
        self.herfshow=self.herfFileUrl()
        self.form=form
        self.downloadList=downloadList
        self.youkuQueue=youkuQueue
        self.worknum=worknum
        self.start()

    def hidentFileUrl(self):
        return re.compile('(http://f.youku.com/player/getFlvPath.+\s?)')

    def herfFileUrl(self):
        return re.compile(r'<a href=\"(http://f.youku.com/player/getFlvPath[^\"]+)')   

    def youku_v_show(self):
        return re.compile(r'http://v\.youku\.com/v_show/id_.+\.html')        

    def headers(self,url):
        heads={
            'Host':'www.flvcd.com',
            'Referer':url,
            'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 '
        }        
        return heads

    def compileUrl(self,youkuUrl):
        params={'kw':youkuUrl}
        encode=urllib.urlencode(params)
        form="&format=%s"%(self.form if self.form  else '')
        realUrl="%s%s%s"%(self.Bae_Url,encode,form)
        return realUrl

    def parseUrl(self,youkuUrl):
        targetUrl=self.compileUrl(youkuUrl)
        req=urllib2.Request(
            url =targetUrl,
            headers = self.headers(targetUrl)
        )
        resp=urllib2.urlopen(req)
        content=resp.read()
        if self.vshow.match(youkuUrl):
            return self.herfshow.findall(content)
        else:
            return self.showpage.findall(content)


    def run(self):
        while True:
            youkuUrl=self.youkuQueue.get()
            print '[No:%d] flvcd robot youku url>>%s'%(self.worknum,youkuUrl)
            matches=self.parseUrl(youkuUrl)
            #print matches
            for item in matches:
                #print item
                self.downloadList.append(item.rstrip())

            if self.youkuQueue.empty():
                print '[No:%d] flcvd no work ,bye bye...'%self.worknum
                break


"""   """   
if __name__=='__main__':
    youkuQueue=Queue.Queue()
    youkuQueue.put('http://v.youku.com/v_show/id_XNDkzNTk2NDQw.html')
    #youkuQueue.put('http://www.youku.com/show_page/id_z70902150919c11e0a046.html')
    downloadList=[]
    flcvd=flcvd(1,'super',downloadList,youkuQueue)

复制代码

01.jpg

02.jpg

03.jpg

04.jpg

06.jpg

07.jpg




二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:python download reading COMPILE thread 下载地址 迅雷下载 下载优酷 视频播放 youku




CDA数据分析交流群 217748971

沙发
gangsinli 发表于 2015-6-19 22:36:56
最近正在学习这个,参考一下

藤椅
self. 发表于 2015-7-1 16:33:10
我想请问下哪里能下载软件呢?

板凳
yunxiqin 发表于 2017-11-27 17:34:17
楼主在哪学的爬虫?

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-1 01:27