python 是一门面向对象的脚本语言,其语法类似于英语语法的特性受很多人喜欢,简洁的编码风格不像java需要多行的代码申明。(片面之谈)
清明节假期的漫长时间,窝在寝室中,看着Python的教学视频,枯燥乏味,故而牛刀小试网络爬虫,有记得过年时期在知乎上有看到基于python的微信自动回复拜年问好,做了个自动回复糗事百科上小笑话的小脚本。
python 的类属性是定义在init方法里的,在类里调用 self.属性
类方法 里的第一个参数 为 对象自身。
对于函数里的变量,用global 修饰可以使其扩展作用域为全局变量。
# *-* coding:UTF-8 *-*
import itchat, time, re
from itchat.content import *
import urllib,re
from urllib.request import Request,urlopen,URLError
class WechatContent:
def __init__(self):
self.stories=[] #存放段子
self.pageIndex = 1
self.user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
self.headers={ 'User-Agent' : self.user_agent} #初始化headers
self.enable=True #程序是否运行的变量
#获取网页内容
def getWebPage(self):
url="http://www.qiushibaike.com/hot.page"+str(self.pageIndex)
request=Request(url,headers=self.headers)
try:
response=urlopen(request)
#print(response.read())
return response.read().decode('utf-8') #将页面转为utf-8
except URLError as e:
if hasattr(e,'reason'):
print(u"连接错误",e.reason)
return None
#获取段子
def getContent(self):
content=self.getWebPage()
if not content:
return 0;
else:
pattern=re.compile('<div class="content">\s*<span>\s*(\S*?)\s*</span>\s*</div>',re.S)
items=re.findall(pattern,content)
for item in items:
item.replace("\s*","")
self.stories.append(item)
#发送段子
def postContent(self):
story=self.stories.pop()
#print (story)
return story
def start(self):
if not self.stories:
self.pageIndex+=1
self.getContent()
wc=WechatContent()
wc.start()
#print(wc.postContent())
priortext='hello world'
@itchat.msg_register([TEXT])
def text_reply(msg):
if not wc.postContent():
wc.start()
text=wc.postContent()
friend=itchat.search_friends(userName=msg['FromUserName'])
print(friend['RemarkName'])
print(msg['Text'])
print("回复:\t",text)
itchat.send(text ,msg['FromUserName'])
@itchat.msg_register([PICTURE, RECORDING, VIDEO, SHARING])
def other_reply(msg):
itchat.send(priortext, msg['FromUserName'])
itchat.auto_login(enableCmdQR=True,hotReload=True)
itchat.run()
哈哈,自动回复中我后来加了,收到消息中有“什么”字样时,回复“我给找的段子搞笑吧,哈哈”,然后朋友以为我给他找了好多段子。