【Python学习笔记】核弹新闻


这其实是QQ群机器人poi酱的一个功能,在调用这个函数的时候从机核或者VGTIME读取一条新闻并推送出来

import random
import urllib2
import re
import json
import sys
def readnews():
  webside=random.randint(1,2)
  if webside==1:
    weburl="http://www.vgtime.com/rss.jhtml"
    article=random.randint(1,15)
  else:
    weburl="https://www.g-cores.com/rss"
    article=random.randint(3,15)
  response = urllib2.urlopen(weburl)
  get=response.read()
  title=re.findall(r'<title>(.*)</title>',get)
  link=re.findall(r'<link>(.*)</link>',get)
  print title[article].strip('<![CDATA[').strip(']]>')
  print link[article]
  out='%s\n%s'%(str(title[article]).strip('<![CDATA[').strip(']]>'),str(link[article]))
  return out

这些新闻的来源其实是机核和VGTIME的RSS网页,研究对比了一下两个网站的RSS:

  • 两个网站的RSS的文章标题下一个<link>链接</link> 都恰好是该条新闻的链接
  • 两个网站的文章标题都写在<title>标题</title> 内
  • VGTIME标题包含在"<![CDATA[]"内,但是机核没有
  • 两个网站的RSS显示的条数不同

研究了数据之后,就要考虑怎么抓取分析这些数据了,抓取这里采用了urllib2的方法将网页保存到字符串中,分析通常采用的方法是正则。

之前在《夕立计划》中,就已经用过正则了(但是实际上核弹新闻是先写的)

python的正则需要包含import re

提取字符通常使用的有re.findall和re.search,findall返回的是一个列表,两个参数分别是正则表达式和要处理的字符串。

处理出来的字符串利用string.strip的方法去除多余的字符(<![CDATA[]),这个方法的功能即在字符串中删掉某些内容。

两个网站的显示条数不同,我这里就采用了不同的随机数范围来提取内容~

就这样~就能抓取出核弹新闻的标题和网址了~


想要成为自己的未来