Python BeautifulSoup получить текст из класса - PullRequest
0 голосов
/ 16 января 2020

Как я могу получить текст "Лионель Месси" из этого HTML кода?

<a href="/20/player/44079/lionel-messi" class="player_name_players_table">Lionel Messi</a>

Это мой код:

import requests
import urllib.request
import time
from bs4 import BeautifulSoup

page = requests.get('https://www.futbin.com/players')
soup = BeautifulSoup(page.content, 'lxml')

pool = soup.find(id='repTb')


player_names = pool.find_all(class_='player_name_players_table')


print(player_names[0])

Когда я печатаю имена игроков, я получаю такой результат:

/Users/ejps/PycharmProjects/scraper_players/venv/bin/python /Users/ejps/PycharmProjects/scraper_players/scraper.py
<a class="player_name_players_table" href="/20/player/44079/lionel-messi">Lionel Messi</a>

Process finished with exit code 0

Но какой код мне нужно ввести, чтобы получить только его текст?

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

Не могу найти способ заставить его работать, к сожалению.

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

РЕДАКТИРОВАТЬ:

С помощью комментариев я смог получить нужный мне текст.

У меня есть только один еще вопрос здесь.

Возможно ли найти class_ только по частичному тексту?

Примерно так:

prating = pool.find_all(class_='form rating ut20')

Полный класс будет

class="form rating ut20 toty gold rare"

но это меняется. Часть, которая всегда одинакова, это «form rating ut20», поэтому я подумал, что, возможно, есть какой-то заполнитель, который позволяет мне искать все имена «class», включая «form rating ut20»

Не могли бы вы помочь? мне с этим тоже?

Ответы [ 2 ]

2 голосов
/ 16 января 2020

Для выбора определенного c класса вы можете использовать регулярное выражение или, если у вас установлена ​​версия bs4 4.7.1 или выше, вы можете использовать css* Селектор 1006 *.

Использование regular expression приведет к получению списка элементов.

import re
prating = pool.find_all(class_=re.compile("form rating ut20"))

Или Использование селектора css приведет к получению списка элементов.1st css означает селектор содержит и другое означает, что начинается с.

prating = pool.select('[class*="form rating ut20"]')

ИЛИ

prating = pool.select('[class^="form rating ut20"]')
1 голос
/ 16 января 2020

Получить текст, используя метод getText ().

 player_names[0].getText()
...