当前位置 博文首页 > python正则表达式抓取成语网站

    python正则表达式抓取成语网站

    作者:admin 时间:2021-02-17 12:40

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

    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文本中,还添加了一个后缀标签。
    最后注意,设计正则表达式时可能会出现明明认为是正确的,就是匹配不了,对空白字符要留意,比如说要解析:

    复制代码 代码如下:

    <div class="avatar_name">

                    <a href="/u/kkun/" title="kkun">kkun</a>

                </div>

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

    js
    下一篇:没有了