#python #web-scraping #beautifulsoup
#python #очистка веб-страниц #beautifulsoup
Вопрос:
Я пытаюсь получить таблицу в теге ul в следующем html-коде, который в основном выглядит так:
<ul class='list' id='js_list'>
<li class="first">
<div class="meta">
<div class="avatar">...</div>
<div class="name">黑崎一护</div>
<div class="type">...</div>
</div>
<div class="rates">
<div class="winrate">56.11%</div>
<div class="pickrate">7.44%</div>
</div>
</li>
</ul>
но только с большим количеством записей. Это с этого сайта.
Пока у меня есть это (специально для получения выигрышных ставок):
from bs4 import BeautifulSoup
import requests
r = requests.get("https://moba.163.com/m/wx/ss/")
soup = BeautifulSoup(r.content, 'html5lib')
win_rates = soup.find_all('div', class_ = "winrate")
Но это возвращает пустой, и кажется, что самым дальним, что удалось получить Beautiful Soup, был тег ul, но никакой информации под ним не было. Это проблема синтаксического анализа? Или есть исходный код JavaScript, который мне не хватает?
Ответ №1:
Я думаю, ваша проблема в том, что ваш формат неверен для извлечения div с атрибутом. Я смог извлечь раздел winrate с помощью этого:
soup.find('div',attrs={'class':'winrate'})
Комментарии:
1. Я думаю, что у меня все еще есть проблема с извлечением всех тегов, потому что, когда я заменяю свою строку на приведенную выше, я не получаю значений / пустой список (если я использую find_all ). HTML в моем исходном сообщении был тем, что я скопировал с веб-сайта. Но когда я печатаю свой запрос, я получаю только тег ul и ни один из div.
2. В коде есть класс js_list . Это заставило бы меня поверить, что это может быть динамически сгенерировано. Если это так, то BeautifulSoup не будет работать для вас. Один из способов тестирования — просто запросить страницу и распечатать содержимое. Если того, что вы ищете, там нет, вам нужно будет использовать другую библиотеку.