Как в BeautifulSoup получить доступ к тегу str, равному имени класса? - PullRequest
0 голосов
/ 08 мая 2020

Привет, ребята, мне было интересно, можно ли получить доступ к str, равному имени класса, то, что я имею в виду, показано в примере ниже:

<tr data-username="g964">lol</tr>

Я не хочу получать доступ текст, который содержит, но вместо этого обращается к тексту / строке, содержащейся в имени класса data-username, в принципе можно ли получить доступ к "g964"? Я спрашиваю об этом, потому что представим, что al oop переходит ко всем <tr></tr> и извлекает строку data-username.

Ответы [ 3 ]

1 голос
/ 08 мая 2020

Если вы хотите получить доступ к свойству, вы должны сделать следующее:

from bs4 import BeautifulSoup

html='''<tr data-username="g964">lol1</tr>
<tr data-username="g964">lol2</tr>
<tr data-username="g964">lol3</tr>'''

soup=BeautifulSoup(html,'html.parser')
for item in soup.find_all('tr'):
    print(item.get('data-username'))

вы можете изменить 'data-username' любым свойством тега, к которому вы хотите получить доступ, например, class, id. ...

это результат:

g964
g964
g964
0 голосов
/ 08 мая 2020

Если я вас правильно понял, вы хотите извлечь различные значения классов, которые есть у data-username. Вы можете передать BeautifulSoup4 (если быть точным, начиная с BS 4.1.2) class_ строку, регулярное выражение, функцию или True. Это то же самое, что и любой аргумент ключевого слова.

Например, если вам нужно одно или несколько, вы можете передать ему что-то вроде этого регулярного выражения: soup.find_all(class_=".+") или быть очень жадным для классов имен пользователей с soup.find_all("tr data-username", class_=".*").

Если у вас нет последней версии BS, вы можете передать dict-подобный объект ключевому слову attrs, чтобы найти значения классов. Я на 99% уверен, что это обходной путь, поэтому лучше всего использовать BS4.1.2 <. В документации по www.crummy.com.</p> есть некоторые объяснения и простые примеры.

0 голосов
/ 08 мая 2020

Попробуйте следующий код:

from bs4 import BeautifulSoup

html='''<tr data-username="g964">lol1</tr>
<tr data-username="g964">lol2</tr>
<tr data-username="g964">lol3</tr>'''

soup=BeautifulSoup(html,'html.parser')
for item in soup.find_all('tr',attrs={"data-username":"g964"}):
    print(item.text)

Или вы можете использовать следующий селектор css.

for item in soup.select('tr[data-username="g964"]'):
    print(item.text)

Чтобы получить значение data-username, попробуйте это.

html='''<tr data-username="g964">lol1</tr>
<tr data-username="g964">lol2</tr>
<tr data-username="g964">lol3</tr>'''

soup=BeautifulSoup(html,'html.parser')
for item in soup.find_all('tr',attrs={"data-username":True}):
    print(item['data-username'])
...