最近挺闲的。看了不少Dota视频~ 我会经常关注那些知名解说或选手发出的视频(海涛,牛蛙……等)。涛哥在应该算是个公认的好解说的。看他的视频很有乐趣的……顺便吐槽下 ,个人觉得PIS的视频比较无聊,主要在于PIS的解说方式,情绪,声音等一些地方吧,也是由于是专业游戏选手,这方面并不是强项。

我并不想在gr里看到这些信息。所以每次要观看视频的时候就会进入到各个选手的主页去留意一下最新出的视频有没有自己爱看的~ 说起来这事也挺麻烦的。决定写个脚本把这些信息给抓出来,在想看的时候方便自己选择。

第一步是准备先把基本信息都给抓出来,然后预想是做些处理,例如观看过的视频以后就不在显示了,再然后可以做丰富些,多个分类等……再然后……越来越多的然后! 目前是准备放到sae上,担心的是视频的流量对于我那不到1W的豆来说,估计挺不了多久。

说再多都是预想~ 先从第一步开始吧,从涛哥入手:

涛哥的视频空间地址:http://i.youku.com/u/UMTcxMzI3OTE2/videos (个人空间下的videos频道页)

步骤很简单,主要分2步

1,抓取整个HTML页面代码

需要用到了urllib 包,分urllib 与 urllib2 两种,区别可以上自己看。总体来说urllib2比urllib要高一个层次(可以接受Request类的实例来设置URL请求的headers),HTTP访问大部分都会用urllib2。

ps:urllib 与 urllib2 是不能互相替代的,经常会同时被使用,urllib提供urlencode方法用来GET查询字符串的产生,而urllib2没有。

最基本的抓取:

import urllib2
content = urllib2.urlopen('http://XXXX').read()

这样就得到了整个页面的html代码

2,解析HTML

重要的就是这一步了,如何从一推HTML代码中获取我们想要的信息。这里又提及到了HTMLParser、SGMLParser。当然还有BeautifulSoup等其他一些好用的解析工具,各种优劣比较网上自己查。

这里使用SGMLParser,好处是比较简单,比较通用。另《Dive into Python》中例子用的是SGMLParser。

贴出两段目标HTML代码:

<ul class="v">

<li class="v_link"><a title="【海涛解说】nada卡尔大战精灵淡淡水人,无法预料的结局" target="_blank" href="http://v.youku.com/v_show/id_XMzk3MTg3MTI0.html"></a></li>

<li class="v_thumb"><img replace="false" id="PlaylistID_XMzk3MTg3MTI0" name="XMzk3MTg3MTI0" src="http://g2.ykimg.com/0100641F464FB2D27D28DE028D906B51504F96-E0BF-0E0A-4968-6551061E989A" alt="【海涛解说】nada卡尔大战精灵淡淡水人,无法预料的结局" title="【海涛解说】nada卡尔大战精灵淡淡水人,无法预料的结局"/></li>

<li class="v_ishd"><span class="ico__SD" title="超清"></span> </li>

<li class="v_menu" style="display: none;" id="PlayListFlag_XMzk3MTg3MTI0"></li>

<li class="v_time"><span class="num">57:32</span><span class="bg"></span></li>

<li class="v_title"><a title="【海涛解说】nada卡尔大战精灵淡淡水人,无法预料的结局" target="video" href="http://v.youku.com/v_show/id_XMzk3MTg3MTI0.html">【海涛解说】nada卡尔大战精灵淡淡水人</a></li>

<li class="v_pub"><label>发布时间:</label><span>1天前</span></li>

<li class="v_stat"><span title="播放" class="ico__statplay"></span><span class="num">118,929</span> <span class="ico__statcomment" title="评论"></span><span class="num">7,085</span></li>

</ul>

<ul class="v">

<li class="v_link"><a title="【海涛教你打DOTA】刚背兽第一视角解说" target="_blank" href="http://v.youku.com/v_show/id_XMzk0NjM1ODUy.html"></a></li>

<li class="v_thumb"><img replace="false" id="PlaylistID_XMzk0NjM1ODUy" name="XMzk0NjM1ODUy" src="http://g3.ykimg.com/0100641F464FACA216BBC7028D906B01385155-EA47-FB8B-3D04-4E526969BEB6" alt="【海涛教你打DOTA】刚背兽第一视角解说" title="【海涛教你打DOTA】刚背兽第一视角解说"/></li>

<li class="v_ishd"><span class="ico__SD" title="超清"></span> </li>

<li class="v_menu" style="display: none;" id="PlayListFlag_XMzk0NjM1ODUy"></li>

<li class="v_time"><span class="num">56:17</span><span class="bg"></span></li>

<li class="v_title"><a title="【海涛教你打DOTA】刚背兽第一视角解说" target="video" href="http://v.youku.com/v_show/id_XMzk0NjM1ODUy.html">【海涛教你打DOTA】刚背兽第一视角解说</a></li>

<li class="v_pub"><label>发布时间:</label><span>5天前</span></li>

<li class="v_stat"><span title="播放" class="ico__statplay"></span><span class="num">452,253</span> <span class="ico__statcomment" title="评论"></span><span class="num">1,313</span></li>

</ul>

上面2段html是我们想要的信息,可以看出每个视频都是用 ul 来表示的。信息都在 li 标签下。

这就很明了了,把我们需要的信息从li标签里抽出来即可, 既然是视频,那么URL、名称、发布时间必然是最重要的。

因为默认是按照时间的倒序来排的,这样连发布时间都可以省去,留下最关心的名称及URL。可以看到这两个信息都可以在

<li class="v_title"><a title="xxx" target="video" href="xxx">xxxx</a></li>

这么一个class 为v_title的

  • 标签里。 href指向的就是我们需要的URL,内是我们需要的名称。
  • 1.进到class=’v_title’的li标签

    2.找到标签的href地址放入urls列表中

    3.提取的text数据放入title列表中

    4.按<名称 URL>循环打印。

    简洁明了,直接上代码吧:

    #HTML解析类GetVideos
    import urllib2
    from sgmllib import SGMLParser
    
    class GetVideos(SGMLParser):
        def __init__(self):
            SGMLParser.__init__(self)
            self.titles = []
            self.hrefs = []
            self.flag = False    ##<li>标记
            self.data = False    ##<a>标记
    
        def start_li(self,attrs):
            for k,v in attrs:
                if k == 'class' and v == 'v_title':   ##进到<li class="v_title">
                    self.flag = True
                    return
    
        def end_li(self):
            self.flag = False
    
        def start_a(self,attrs):
            if self.flag == False:
                return
            self.data = True
            for k,v in attrs:    ##进入<a>,并把href标签数据保存
                if k  == 'href' and v:
                    self.hrefs.append(v)
    
        def end_a(self):
            if self.data:
                self.data = False
    
        def handle_data(self,text):
            if self.data:
                self.titles.append(text)
    
        def printInfo(self):    ##打印所获得的数据
            for title,item in map(None,self.titles,self.hrefs):
                print title.decode('gbk','ignore').encode('utf8'),item    ##将GBK转UTF8,遇特殊字符则ignore
    测试代码:
    
    ##格式化url
    url = "%s"%("http://i.youku.com/u/UMTcxMzI3OTE2/videos")
    
    content = urllib2.urlopen(url).read()
    
    videos = GetVideos()
    
    videos.feed(content)
    
    videos.printInfo()
    

    执行结果:

    【海涛解说】nada卡尔大战精灵淡淡水人 http://v.youku.com/v_show/id_XMzk3MTg3MTI0.html
    【海涛教你打DOTA】刚背兽第一视角解说 http://v.youku.com/v_show/id_XMzk0NjM1ODUy.html
    【海涛解说】凤舞婷婷暴力冰女大战超级 http://v.youku.com/v_show/id_XMzkxMTI0NTEy.html
    【海涛解说】吾有上将nada,善使暴走影 http://v.youku.com/v_show/id_XMzg2NTAxNTky.html
    【海涛解说】DK VS IG,NGF出线名额争 http://v.youku.com/v_show/id_XMzg0MDYxOTI4.html
    海涛2012.4.13中科大演讲 http://v.youku.com/v_show/id_XMzgxNDQ3Mzg0.html
    海涛4v5 超神食尸鬼第一视角解说 http://v.youku.com/v_show/id_XMzc5MzkwOTU2.html
    【海涛解说】430推荐:幻刺跳大,疯狂 http://v.youku.com/v_show/id_XMzc2OTU3MTIw.html
    【海涛解说】质量局海涛圣剑骷髅王大战 http://v.youku.com/v_show/id_XMzczMTA0NTA4.html
    【海涛教你打DOTA】冰女第一视角解说 http://v.youku.com/v_show/id_XMzcwMDAyMzg4.html
    海涛风行第一视角,与lgd姚德华同台飙 http://v.youku.com/v_show/id_XMzY4MjU1NjU2.html
    海涛第一视角之发条大牛两连发 http://v.youku.com/v_show/id_XMzY0OTkxNzcy.html
    【海涛教你打DOTA】卡尔第一视角解说 http://v.youku.com/v_show/id_XMzYxNjU2OTU2.html
    海涛香蕉neo天梯高分局八十分钟大翻盘 http://v.youku.com/v_show/id_XMzU4Mjk3NTI4.html
    海涛首次尝试DOTA2解说,暴走翻盘不是 http://v.youku.com/v_show/id_XMzU0MzQzMzE2.html
    海涛暗影恶魔第一视角,单杀无敌,团战 http://v.youku.com/v_show/id_XMzUzMjY5MzIw.html
    【海涛解说】队友全退,辉耀被A,船长 http://v.youku.com/v_show/id_XMzUyMjMyNjI4.html
    海涛凯文携手第一视角大战职业战队DT.L http://v.youku.com/v_show/id_XMzUwMTExNzQ0.html
    【海涛解说】双圣剑炸弹人的showtime http://v.youku.com/v_show/id_XMzQ4MjE5OTA4.html
    【海涛教你打DOTA】先知第一视角解说 http://v.youku.com/v_show/id_XMzQ2NDc4NzQ4.html
    

    取出的是第一页的20个视频名称及地址~ 当然第二页 三页 ……等相同原理。

    第一步到这里就差不多了,数据可以再处理的漂亮点~~~~

    很多朋友经常的问我关于iPhone的许多技巧,国内确实有很多玩不明白的小白~
    iPhone有很多实用的小技巧,还是值得一学的,如果你真的想做一个iPhone达人的话……

    技巧1:
    截屏功能,个人认为最实用的功能,以前用诺基亚都得下载各种截屏软件,挺麻烦,iphone默认提供了这个功能,在当前界面按HOME+开机键既可把当前屏幕截取下来,默认存在相册中

    技巧2:
    旋转屏幕,有时候躺在床上看书或者网页,屏幕会自动的随着旋转,有时候确实很烦人,这时候需要按HOME键2次,底部会出现一排图标,都是近期使用过的app,滑动东到第一页(手指向右侧滑动),点一下第一个图标,在电池左侧会出现一个小锁,代表了屏幕锁定,不会再随着重力感应旋转了

    技巧3:
    表情键盘,iPhone是可以默认打出各种表情图片的,相信很多人都见过,遇到新的表情甚至会问对方是打哪个词语而出现的表情,其实iPhone是带有一个表情键盘的,大约有450多种表情都在里面,在设置—通用—键盘—国际键盘—添加键盘—表情符号。添加完后在输入界面就可以切换到表情符号键盘(左下角的地球符号)。有人说要安装一个叫emoji的app,运行,然后才能添加,在我的4s下是可以直接添加的,其他的机型没有测试过。

    技巧4:
    编辑短信的时候如果想把所写的内容全部删掉,可以试着晃动几下手机,会弹出个窗口,选择“撤销键入”就可以把内容全部删除,如果删除错了想恢复,再次晃动手机,选择“重做键入”既可。如果是粘贴过来的内容,则会出现“撤销粘贴”。

    技巧5:
    摄氏度,在输入内容的时候如果想输入摄氏度这个符号“ °C ”,切换到数字输入界面,长按0会出现一排类似的符号哦,第一个就是摄氏度的°

    前段时间Android手机可以免费增加23G Dropbox容量,可以使用2年。
    很简单,直接删除目前android手机上的dropbox程序,
    下载 http://dl.dropbox.com/u/25054669/Dropbox.apk 程序到手机,安装,用dropbox帐号登录即可。

    由于自己是iPhone,只能羡慕嫉妒恨,现在有一个新方法来扩容(亲测有效):

    下载BlueStacks App Player
    下载地址: http://www.bluestacks.com/

    下载Dropbox.apk
    下载地址: http://dl.dropbox.com/u/25054669/Dropbox.apk

    安装BlueStacks App Player,双击Dropbox-23GB.apk安装,安装完成后,打开Dropbox程序,登录你的帐号。
    过一会会收到dropbox发来的邮件:

    Hi Zhou,

    Congrats on becoming a Dropbox Guru! We’ve awarded you 23 GB of bonus space for the next 24 months! You now have 25.75 GB on Dropbox. To get even more space, check out our upgrade options.

    Thanks again for supercharging your HTC device with Dropbox!

    Enjoy,

    • The Dropbox Team