社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python抓取歌词自制FreeStyle

Python网络爬虫与数据挖掘 • 5 年前 • 319 次点击  

故事的起因是上周六看《中国好声音》,一个周杰伦战队的学员用人工智能写的歌词,于是乎,我也有了这个想法,代码的主题思路是看Crossin先生的文章,虽然最后不能写出一首歌,但是押韵脚这事情分分钟搞定了

主题的思路,就是先抓取很多首歌曲的歌词,利用jieba分词后,将分好的词按照押韵表进行分类,最后匹配查询就可以了

准备一:押韵表

这个地方可以去网上搜押韵表(温馨提示:代码可左右滑动)

#引用各种需要的库
import requests
import jieba
import re
from xpinyin import Pinyin
p = Pinyin()

RhymeIndex = [('1', ['a''ia''ua']), ('2', ['ai''uai']), ('3', ['an''ian''uan']),
              ('4', ['ang''iang''uang']), ('5', ['ao''iao']), ('6', ['e''o''uo']), ('7', ['ei''ui']),
              ('8', ['en''in''un']), ('9', ['eng''ing''ong''iong']), ('10', ['er']), ('11', ['i']),
              ('12', ['ie''ye']), ('13', ['ou''iu']), ('14', ['u']), ('16', ['ue']), ('15', ['qu''xu''yu' ])]

RhymeDct = {'ui''7''uan''3''ian''3''iu''13''en''8''ue''16''ing''9''a''1''ei''7',
            'eng''9''uo''6''ye''12''in''8''ou''13''ao''5''uang''4''ong''9''ang''4',
            'ai''2''ua''1''uai''2''an''3''iao''5''ia''1''ie''12''iong''9''i''11',
            'er''10''e''6''u''14''un''8''iang''4''o''6''qu''15''xu''15''yu' '15'}

准备二:分词对应押韵表编码

分好的词与押韵表对应起来,举个栗子,比如“没有”对应的是“7-13”,就等于你给每个词都贴了一个标签,这样你以后想搜索的时候,就可以根据标签找到这些词了

def _analysis_words(words):
        word_py =p.get_pinyin((u'{}'.format(words)))
        lst_words = word_py.split('-')
        r = []
        for i in lst_words:
            while True:
                if not i:
                    break
                token = RhymeDct.get(i, None)
                if token:
                    r.append(token)
                    break
                i = i[1:]
        if len(r) == len(words):
            return '-'.join(r)
   #print( analysis words('兄弟'))

第一步:爬虫抓取歌词信息

这个地方数据爬取的越多,肯定你的词库就越壮大,后面分词也越高,我这里只爬取了3首歌曲的歌词,并且最后是存储到txt中,当然,放数据库里就更好了

def GetKeyword():
    #歌曲列表
    # url = 'http://music.163.com/api/playlist/detail?id=808976784'
    # req = requests.get(url)
    # data = req.json()
    # print(data['result']['tracks'] )
    # tracks =data['result']['tracks']  #歌曲列表
    tracks=["431795900",'33850315','430053482']
    #写入记事本文件
    with open('keyword.txt','a'as f:
        f.write("[")
        for i in tracks:
            print(111)
            #歌词
            # lrcurl = "http://music.163.com/api/song/lyric?os=pc&id="+str(i['id'])+"&lv=-1&kv=-1&tv=-1"
            lrcurl = "http://music.163.com/api/song/lyric?os=pc&id="+str(i)+"&lv=-1&kv=-1&tv=-1"
            lrcreq = requests.get(lrcurl)
            dt = lrcreq.json()
            lrc=re.sub(u"\\[.*?]""", dt['lrc']['lyric'])
            #jieba分词
            seg_list = list(jieba.cut(lrc, cut_all=True))
            for i in seg_list:
                #加入判断,只写入2个字组成的词
                if len(i)==2:
                    #写入格式:{'7-13':'追求'}
                    if _analysis_words(i)!=None:
                        f.write("{'"+_analysis_words(i)+"':'"+i+"'},")
        f.write("]")
        f.close()

第二步:调用分词的方法

GetKeyword()

第三步:分析分词后的txt

def Findkey(str):
    result={}
    with open('keyword.txt''r'as f:

        list=eval(f.readlines()[0])
        for item in list:
            if item.get(str):
                key=item.get(str)
                number=result.get(key)

                if number !=None and number>=1:
                    result[key]=number+1
                else:
                    result.update({key:1})
        f.close()
        print(result) 

第四步:程序入口

key=input("请输入关键词:")
str=_analysis_words(key)
print("匹配押韵的词:")
Findkey(str)

第五步:创作自己的FreeStyle

# hello 大家好,我的名字叫离岛
# 没事爱在博客写写,这感觉让我惬惬
# 写代码不是男生的事,女生不是只能做测试
# 热爱编码,没有办法
# 他们都叫我是热爱编码的Coding女生

原文链接:https://segmentfault.com/a/1190000015932069

学习Python和网络爬虫,关注公众号:datanami

近期文章:

  1. 推荐一个爬虫神器:You-Get,小白也会用

  2. 这是一篇福利教程,用Python编写一个简单的爬虫

  3. 给Python新手的一道面试题:如何正确读写文件

  4. wtfPython—Python中一些奇妙的代码

  5. Python后端架构演进


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/JD36AxKkIC
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/22429
 
319 次点击