zoukankan      html  css  js  c++  java
  • [python]re库(正则表达式)的小练习-抓取北航教务处通知列表

     今天想在北航教务网找找ACM的校内赛如何报名,结果发现校务处网站的搜索就是一个摆设。这就很尴尬了,难不成要我一页一页翻通知?刚好学了学re库,所以写一个简单的小爬虫来爬取北航的通知列表!


    1.分析

    北航教务网站上新闻的url是这个格式。显然通过修改xwid的值就可以访问所有的新闻了。

    http://jiaowu.buaa.edu.cn/bhjwc2.0/index/newsView.do?xwid=126

    分析一下页面的源码,可以看到发布信息存储在这里

    1    <div class="search_con mt20 text_cen font18 blue LH36 font_hei">关于2016-2017学年第一学期全校本科生课表确认的通知 </div>
    2 
    3               <span class="search_con mt10 text_cen  LH20" >
    4                       发布时间:2016-10-08 &nbsp;&nbsp;发布者:王晓飞 &nbsp;&nbsp;所属科室:教学运行服务中心
    5               </span>
    6    

    那思路就很清晰了。遍历xwid,然后用正则表达式过滤内容,存入文件即可.

    2.编码与调试

     主要的困难还是对于正则表达式掌握的不熟练

    import urllib
    import urllib2
    import re
    
    
    class BUAA_jiaowu:
        baseurl= 'http://jiaowu.buaa.edu.cn/bhjwc2.0/index/newsView.do?xwid='
        def get_HTML(self,xwid):
            try:
                url=self.baseurl+str(xwid)
                request = urllib2.Request(url)
                response = urllib2.urlopen(request)
                return response.read()
            except urllib2.URLError,e:
                print e.reason
                return None
        def get_title(self,xwid):
            page=self.get_HTML(xwid)
            P=re.compile('<div class="search_con mt20 text_cen font18 blue LH36 font_hei">(.*?)</div>',re.S)
            filter=re.search(P,page)
            return filter.group(1).strip()
        def get_data(self,xwid):
            page=self.get_HTML(xwid)
            P=re.compile(' <span class="search_con mt10 text_cen  LH20" >(.*?)&nbsp',re.S)
            filter=re.search(P,page)
            return filter.group(1).strip()
            
    ##################################################        
    catch=BUAA_jiaowu()
    file=open("result.txt","w")
    for xwid in range(0,1269):
        title=catch.get_title(xwid)
        data=catch.get_data(xwid)
        print 'Catching The Title Of No.'+str(xwid)
        if len(title)>1:
            print title
            file.write('xwid='+str(xwid)+'	'+data+'		'+title+'
    ')
        else:
            print 'Nothing Here'
    print 'down'
     

    3.后记

    没什么技术含量但是挺实用的小程序。主要目的是练习正则表达式,顺便娱乐一下。

    (ps:还抓到了若干条官网上没有列出的通知...Interesting)

  • 相关阅读:
    关于JS动态切换样式表
    关于header()函数重定向的问题
    微信团队讲课笔记 Android 开发(二)UI设计
    Effective C++ 笔记:4设计与声明
    某面试算法题_最短时间找出十包粉末中的两蓝粉末。
    VS2015 配置opengl的一些库
    URAL 1225 Flags 简单DP,一重循环
    POJ 1384 Piggy-Bank 完全背包分析
    POJ 1651 Multiplication Puzzle DP 类似矩阵链
    URAL 1183 Brackets Sequence DP 路径输出
  • 原文地址:https://www.cnblogs.com/cn-lhc/p/5998347.html
Copyright © 2011-2022 走看看