• python一步一步解析成语


    做NLPproject时需要一个成语库,我需要的是纯成语,网上找的都是有详细解释的。于是自己写了一个爬成语的python程序。

    1、首先找到一个在线成语网站

      我选的网站是http://chengyu.itlearner.com/,选择它的原因是它把不同开头字母的成语分开,不同的字母和页所在的URL不同,是静态网页,比如A开头的第一页的链接是:http://chengyu.itlearner.com/list/A_1.html,所以我只要遍历各个字母开头的每页就可以了。

    2、查看网页结构,定义正则式

      看一下要抓的成语的标签有什么特点,查看源码,可以发现要抓的成语都在<a>标签中,如:<a href="/cy0/93.html">安如磐石</a>,成语事实上就是一个瞄文本,不同成语指向的链接不同,其实也就"/cy0/93.html"中的数字不同,所以正则式里匹配两次数字就行了,定义正则式 reg =   "<a href=\"/cy(\d+)/(\d+).html\">(.*?)</a>"。

    3、上代码吧

    #anthor jiqunpeng
    #time 20121124
    import urllib
    import re
    
    def getHtml(url): #从URL中读取html内容
        page = urllib.urlopen(url) 
        html = page.read() 
        page.close() 
        return html
    
    def getDictionary(html): #匹配成语
        reg = "<a href=\"/cy(\d+)/(\d+).html\">(.*?)</a>"   
        dicList = re.compile(reg).findall(html)
        return dicList
    
    def getItemSite():#手工把每个字母开头的页面数统计下来
        itemSite = {}#申明为空字典
        itemSite["A"] = 3
        itemSite["B"] = 21
        itemSite["C"] = 19
        itemSite["D"] = 18
        itemSite["E"] = 2
        itemSite["F"] = 14
        itemSite["G"] = 13
        itemSite["H"] = 15
        itemSite["J"] = 23
        itemSite["K"] = 6
        itemSite["L"] = 15
        itemSite["M"] = 12
        itemSite["N"] = 5
        itemSite["O"] = 1
        itemSite["P"] = 6
        itemSite["Q"] = 16
        itemSite["R"] = 8
        itemSite["S"] = 26
        itemSite["T"] = 12
        itemSite["W"] = 13
        itemSite["X"] = 16
        itemSite["Y"] = 35
        itemSite["A"] = 21
        return itemSite
        
    
    if __name__== "__main__":
        dicFile = open("dic.txt","w+")#保存成语的文件
        domainsite = "http://chengyu.itlearner.com/list/"
        itemSite = getItemSite()
        for key,values in itemSite.items():
            for index in range(1,values+1):
                site = key +"_"+str(index)+".html"              
                dictionary = getDictionary(getHtml(domainsite+site))
                for dic in dictionary:
                    dicFile.write(dic[2]+"@@CY\n")#标记为成语,分词时使用
            print key+'字母成语抓取完毕'        
        dicFile.close()    
        print '全部成语抓取完毕'
            

    把成语保存在了txt文本中,还添加了一个后缀标签。这个方法太笨了,应该可以自动寻找下一页,而不是我先确定好页面数量。以后有时间再整,最近project+考试。

      最后注意,设计正则表达式时可能会出现明明认为是正确的,就是匹配不了,对空白字符要留意,比如说要解析:

    <div class="avatar_name">
    
                    <a href="/u/kkun/" title="kkun">kkun</a>
    
                </div>

    你看不出第一行与第二行的空白字符是什么,可以index = html.find('avatar_name'),html[4677:4677+100]看到非空白字符

  • 相关阅读:
    Vue.js 章6 v-model与表单
    Vue.js 简单购物车开发
    Vue.js实战 章五:内置指令
    Vue stage3
    Vue初接触 stage1
    前端代码的一些恶优化
    websocket介绍 以及 vue websocket使用案例
    回忆一下跨域
    如何使用Flexible这样的一库来完成H5页面的终端适配
    css 输入px单位的数值 直接转换为rem的插件
  • 原文地址:https://www.cnblogs.com/fengfenggirl/p/python_catch_html.html
Copyright © 2020-2023  润新知