Как получить значение из куска HTML-кода с BeautifulSoup? - PullRequest
2 голосов
/ 09 марта 2019

Я только начал использовать python для некоторой очистки веб-страницы, и BeautifulSoup , кажется, рекомендуется везде.

У меня есть содержимое, как показано ниже:

<table class="table with-row-highlight table-archive">
  <tbody>
    <tr>
      <td>
        <div class="user-tagline ">
          <span class="username " data-avatar="aaaaaaa">player1</span>
          <span class="user-rating">(1357)</span>
          <span class="country-flag-small flag-113" tip="Portugal"></span>
        </div>
        <div class="user-tagline ">
          <span class="username " data-avatar="bbbbbbb">player2</span>
          <span class="user-rating">(1387)</span>
          <span class="country-flag-small flag-70" tip="Indonesia"></span>
        </div>
      </td>
      <td>
        <a class="clickable-link text-middle" href="https://www.chess.com/live/game/2249663029?username=belemnarmada" target="_self">
          <div class="pull-left">
            <span class="game-result">1</span>
            <span class="game-result">0</span>
          </div>
          <div class="result">
            <i class="icon-square-minus loss" tip="Lost"></i>
          </div>
        </a>
      </td>
      <td class="text-center">
        <a class="clickable-link" href="https://www.chess.com/live/game/2249663029?username=belemnarmada" target="_self">30 min</a>
      </td>
      <td class="text-right">
        <a class="clickable-link text-middle moves" href="https://www.chess.com/live/game/2249663029?username=belemnarmada" target="_self">25</a>
      </td>
      <td class="text-right miniboard">
        <a class="clickable-link archive-date" href="https://www.chess.com/live/game/2249663029?username=belemnarmada" target="_self">Aug 9, 2017</a>
      </td>
    </tr>
    100 <tr></tr> here
  </tbody>
</table>

Мой код на этом останавливается, как мне написать код Python для зацикливания всей пары <tr></tr> и извлечения всего класса для каждой пары <span> в каждой паре <td>?

редактировать

Я думаю, что, возможно, я не объяснил здесь четко, что ваш код возвращает имя класса в этом HTML, в то время как я ищу соответствующие значения, например. есть класс username, я хочу получить его значение player1 и player2; есть класс country-flag-small flag-70 хочу получить tip=Indonesia

1 Ответ

0 голосов
/ 09 марта 2019

Это должно сработать:

import requests
from bs4 import BeautifulSoup

res = requests.get('someLink')
soup = BeautifulSoup(res.text)


classes = []
for element in soup.find_all(class_=True):
    classes.extend(element["class"])
print(classes)

Я проверил это, используя ваш HTML-файл, и получил следующие результаты:

['table', 'with-row-highlight', 'table-archive', 'user-tagline', 'username', 'user-rating', 'country-flag-small', 'flag-113', 'user-tagline', 'username', 'user-rating', 'country-flag-small','flag-70', 'clickable-link', 'text-middle', 'pull-left', 'game-result', 'game-result', 'result', 'icon-square-minus', 'loss', 'text-center', 'clickable-link', 'text-right', 'clickable-link', 'text-middle', 'moves', 'text-right', 'miniboard', 'clickable-link', 'archive-date']

Обратите внимание, что вам придется pip3 install requests, если вы еще не сделали

Кроме того, если вы хотите проверить это с файлом на вашем компьютере, вы можете сделать это:

from bs4 import BeautifulSoup

file = open('/path/To/Your/HtmlFile.html', 'r')
lines = file.read()
soup = BeautifulSoup(lines)


classes = []
for element in soup.find_all(class_=True):
    classes.extend(element["class"])
print(classes)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...