寫這個程序是由於校園網公告欄時不時會有學術報告,講座之類的信息發佈,但這類信息每每發佈在講座的前一天,以致於丟失不少重要消息。同時公告欄裏也會發布一些跟學生無關的內容,好比工會主席會議啥的。服務器
主要遇到的困難時對中文的正則匹配問題。(好比經過第一次正則能夠提取到一個頁面內的全部中文標題,第二次正則從這些中文標題中將能匹配上「報告」兩個字的對象添加到結果list內)微信
學校公告頁面是gb2312編碼。我使用的方式是,整個工程使用utf-8編碼,將須要匹配的關鍵字轉換成utf-8編碼格式,使用正則匹配utf-8的編碼便可,詳細解釋在代碼中。app
原本打算把這個放到微信公衆號服務器上天天推送來着,微信接入都寫好了,一直接入不成功,最後才發現,原來服務器域名要正式備案以後才能夠,奈何我已經把備案這茬兒給忘了。退而求其次,暫時用163的郵件短信提醒功能天天推送了。socket
# -*- coding: utf-8 -*- from bs4 import BeautifulSoup import urllib import Queue import urllib2 import re import os import socket import httplib import threading keyList = [u'報告',u'學術',u'講座',u'講堂',u'就業',u'項目',u'招聘'] keyResult = [] url = 'http://urp.tust.edu.cn/bulletinPageList.jsp?pageNum=1&groupIds=Nyw4' req = urllib2.Request(url) res = urllib2.urlopen(req) soup = BeautifulSoup(res.read()) lists = soup.select('.an-list') strLists = str(lists) #此時列表裏存儲的是utf-8的編碼 相似於 u1234\\u2312\\u8473 表示‘\’須要兩個\\才能夠 轉義字符 title = re.findall(r'title="(.*?)"',strLists) #匹配後也同樣 date = re.findall(r'<p>(.*?)<',strLists) herf = re.findall(r'href="(g.*?)"',strLists)for t in title: for key in keyList: tempkey = str(repr(key)) #正則常常用到的repr函數,要查看在Python內部究竟是怎麼表示的 相似於 u'\u5c31\u4e1a' tempkey = repr(tempkey) #這一步把轉義字符暴露出來,方便匹配 相似於 u'\\u5c31\\u4e1a' tempkey = tempkey[3:tempkey.__len__()-2] #這一步把前面的 u' 和後面的 ' 刪掉 if re.search(r''+tempkey+'',t): #開始匹配 keyResult.append(t) break for key in keyResult: s = "u'%s'" %(key) s = eval(s) print s