利用Python正則匹配中文——爬取校園網公告欄中感興趣的內容


  寫這個程序是因為校園網公告欄時不時會有學術報告,講座之類的信息發布,但這類信息往往發布在講座的前一天,以至於丟失很多重要消息。同時公告欄里也會發布一些跟學生無關的內容,比如工會主席會議啥的。

  主要遇到的困難時對中文的正則匹配問題。(比如通過第一次正則可以提取到一個頁面內的所有中文標題,第二次正則從這些中文標題中將能匹配上“報告”兩個字的對象添加到結果list內)

  學校公告頁面是gb2312編碼。我使用的方式是,整個工程使用utf-8編碼,將需要匹配的關鍵字轉換成utf-8編碼格式,使用正則匹配utf-8的編碼即可,詳細解釋在代碼中。

  本來打算把這個放到微信公眾號服務器上每天推送來着,微信接入都寫好了,一直接入不成功,最后才發現,原來服務器域名要正式備案之后才可以,奈何我已經把備案這茬兒給忘了。退而求其次,暫時用163的郵件短信提醒功能每天推送了。

  

# -*- 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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM