利用Python正则匹配中文——爬取校园网公告栏中感兴趣的内容

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用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(rtitle="(.*?)",strLists) #匹配后也一样
date = re.findall(r<p>(.*?)<,strLists)
herf = re.findall(rhref="(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

 

以上是关于利用Python正则匹配中文——爬取校园网公告栏中感兴趣的内容的主要内容,如果未能解决你的问题,请参考以下文章

Python爬虫-利用正则表达式爬取猫眼电影

Python爬虫之利用正则表达式爬取内涵吧

爬取校园新闻首页的新闻的详情,使用正则表达式,函数抽离

爬取校园新闻首页的新闻的详情,使用正则表达式,函数抽离

爬取校园新闻首页的新闻的详情,使用正则表达式,函数抽离

爬取校园新闻首页的新闻的详情,使用正则表达式,函数抽离