BS4 find_all не соответствует классу mini_card-title от Genius Lyrics - PullRequest
0 голосов
/ 01 июня 2019

Я пытаюсь получить название песни из поиска песни гениальной лирики, однако, используя .find_all ("div", class _ = "mini_card-title"), чтобы попытаться получить название песни, нетработает, но .find_all ("div" class _ = "header") работает!

Это только для небольшого проекта, над которым я работаю, работающего на Visual Studio 2019, с Python 3.7.Я использую 2 модуля: запросы и BS4.Я попытался изменить парсер, изменить find_all, чтобы найти и выбрать, однако ничего из этого не помогло.

код, который не работает:

soup = bs4.BeautifulSoup(res.text, "html.parser")
a = soup.find_all("div", class_="mini_card-title")
print(a)

код, который работает:

soup = bs4.BeautifulSoup(res.text, "html.parser")
a = soup.find_all("div", class_="header")
print(a)

Я ожидаю получить название песни, даже получаяназвания всех песен на странице будут хорошими, однако в настоящее время я получаю только пустой список.

1 Ответ

0 голосов
/ 02 июня 2019

Вы можете получить всю информацию, используя API, который страница использует для динамического получения результатов.Я показываю распечатку некоторых заголовков, но изучаю ответ json, чтобы увидеть, что вы хотите.

import requests
from bs4 import BeautifulSoup as bs

r = requests.get('https://genius.com/api/search/multi?per_page=5&q=something').json()
for item in r['response']['sections']:
    for subitem in item['hits']:
        if 'title' in subitem['result']:
            print(subitem['result']['title'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...