用python关注dota视频更新

最近在实验室白天完全是不敢看dota视频,连dota视频网页都不敢打开,太显眼了,但是又想关注有没有精彩视频更新,怎么样才能在不打开网站的情况下知道视频情况呢?
想了想,还是尝试用python写个小助手。python以前只是简单的看过,小白阶段。但是python上手确实太快了。下面就是刚才利用2个小时写的脚本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import urllib
import re

def dotareplay(url):
  content = urllib.urlopen(url).read()
  content = content.decode('utf-8')
  matchtitle = re.findall(u'<li class="v_title"><a href=".*" charset="100344-18935-[1-9]-2" target="video" title=".*">', content)
  if matchtitle:
  for eachtitle in matchtitle:
  findeachtitle=re.search('<li class="v_title"><a href="(.*)" charset="100344-18935-[1-9]-2" target="video" title="(.*)">', eachtitle)
  print findeachtitle.group(2)
  print findeachtitle.group(1)

def main():
  dotareplay('http://game.youku.com/')

if __name__ == '__main__':
  main()
涉及到的知识有HTML基础知道,python的web解析,以及正则表达式
想法很简单,用chrome打开任何一个网页,右键->审查元素,我们就可以看到各种html标签,然后我们对html进行解码,解码之后就可以进行正则匹配。关于正则表达式唯一要说的是re.search()和re.findall的区别。re.search()只要匹配到就返回,也就是有且仅返回第一个匹配对象,而re.findall()是返回所有的匹配到的对象,存在序列中。我们只需要知道提取title信息,所以涉及到一个操作就是:将re.findall()得到的序列逐一用re.search()进行处理,这是又有一个group的概念,就是匹配pattern中有括号的部分,且第一项索引为1.对应到上例程序就是title是group(1), href是group(2)。

执行结果如下


有些人可以只对某些解说感兴趣,那我们只要稍作修改对解说的优酷空间进行监测就行了
下面是对大酒神的空间的关注,关注是视频子目录下的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import urllib
import re

def dotareplay(url):
  content = urllib.urlopen(url).read()
  content = content.decode('utf-8')
  matchtitle = re.findall(u'<li class="v_title"><a _hz="l_v_title" title=".*" target="video" href=".*">', content)
  if matchtitle:
  for eachtitle in matchtitle:
  findeachtitle=re.search('<li class="v_title"><a _hz="l_v_title" title="(.*)" target="video" href="(.*)">', eachtitle)
  print(findeachtitle.group(1))
  print(findeachtitle.group(2))

def main():
  dotareplay('http://i.youku.com/u/UMzE2OTY2NjUy/videos')

if __name__ == '__main__':
  main()