3

我在 python 中创建了一个歌词机器人。我正在使用 robobrowser 从genius.com 中删除歌词,但它不会将歌词发送给群组。

if ( parser.getCommand() == 'GroupMESG'):
    if(parser.getPayload().lower()[:7]=='!lyrics'):
        #Send wait message in the group
        parser.sendGroupMessage(parser.getTargetID(), "/me Please wait.. I am finding your song.")
        browser = RoboBrowser(history=True)
        browser.open('http://genius.com/')

        # Search for Porcupine Tree
        form = browser.get_form(action='/search')
        form                # <RoboForm q=>
        form['q'].value = parser.getPayload().lower()[8:]
        browser.submit_form(form)

        # Look up the first song
        songs = browser.select('.song_link')
        browser.follow_link(songs[0])
        lyrics = browser.select('.lyrics')
        lyrics[0].text

        print(lyrics[0].text) ## it prints the songs

        ##it is not sending lyrics in the group :(
        parser.sendGroupMessage(parser.getTargetID(), lyrics[0].text)
4

3 回答 3

2

要摆脱警告,请遵循github 上问题讨论的建议。

将解析器传递给RoboBrowser构造函数:

browser = RoboBrowser(parser='html.parser')
于 2016-11-15T08:41:34.970 回答
0

我个人的解决方案(虽然容易出错(如果你输入错误的艺术家姓名或歌曲,你将不会得到结果))

import bs4, requests

song = input('Input artist then song name\n')
website = requests.get(f'https://genius.com/{song.replace(" ", "-")}-lyrics')
websiteParser = bs4.BeautifulSoup(website.text, 'html.parser')
lyricSelect = websiteParser.select('.lyrics')
lyrics = lyricSelect[0].text.strip()
print(lyrics)

这使用了天才链接的格式化方式以发挥其优势:艺术家姓名,然后是歌曲名称,全部以 - 连接。输入要求所有这些信息除以空格,然后用 .replaced() 和 - 插入链接,然后解析该链接以查找始终位于 css 选择器“.lyrics”下的歌词,然后剥离 html 文本标签,只是将歌词打印为文本。

于 2019-12-01T03:49:30.493 回答
-1

这是第二行的错字吗?这可能会在 python 代码中给你一个错误。

form = browser.get_form(action='/search')
form                # <RoboForm q=>
form['q'].value = parser.getPayload().lower()[8:]
于 2016-11-15T08:36:18.577 回答