Мой лирический бот не отправляет строки на сервер

Я создал текстового бота на python. Я удаляю тексты песен с сайта genius.com, используя robobrowser, но не отправляю тексты в группу.

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)

2 ответа

Чтобы избавиться от предупреждения, следуйте советам по обсуждению проблемы на github.

Передать парсер RoboBrowser конструктор:

browser = RoboBrowser(parser='html.parser')

Мое личное решение (хотя и подвержено ошибкам (если вы неправильно введете имя исполнителя или песню, вы не получите результата))

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)

В этом случае используется способ форматирования ссылок Genius: имя исполнителя, затем название песни, все связано с -. Входные данные запрашивают всю эту информацию, разделенную пробелами, которые затем заменяются.replaced() на - и вставляются в ссылку, которая затем анализируется на предмет текстов песен, которые всегда находятся под селектором css '.lyrics', затем он удаляет html-текст из теги и просто печатает текст как текст.

Это опечатка во второй строке? Это, вероятно, дает вам ошибку в коде Python.

form = browser.get_form(action='/search')
form                # <RoboForm q=>
form['q'].value = parser.getPayload().lower()[8:]
Другие вопросы по тегам