• [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)

  • 相关阅读:
    微信小程序-上传多张图片加进度条(支持预览、删除)
    php中120个内置函数
    angular6 NgModule中定义模块module
    Aliasing input/output properties
    angular6 Can't bind to 'zzst' since it isn't a known property of
    [转]DOM 中 Property 和 Attribute 的区别
    Angular6
    [转]VirtualBox 修改UUID实现虚拟硬盘复制
    pthread_create如何传递两个参数以上的参数
    linux 线程操作问题undefined reference to 'pthread_create'的解决办法(cmake)
  • 原文地址:https://www.cnblogs.com/cn-lhc/p/5998347.html
Copyright © 2020-2023  润新知