Beautiful Soup - Получить атрибуты аргументов, которые содержат строки - PullRequest
0 голосов
/ 23 ноября 2018

Предположим, у нас есть html, как показано ниже:

<span title="Sports Football">Football</span>
<span title="Sports Badminton">Tennis</span>
<span title="Sports Ski Jump">Ski Jump</span>

Я хочу извлечь аргументы для атрибута title, если он содержит Sports:

Итак, в концеу нас есть переменная sports:

sports = ['Football', 'Badminton', 'Ski Jump']

Вот что я использую:

sports = soup.find_all('span', {'title': 'Sports'})

У меня ничего нет

Ответы [ 3 ]

0 голосов
/ 23 ноября 2018

Может быть, пример, который вы привели, был составлен на макушке головы, но содержимое ваших диапазонов точно соответствует тому, что вы ищете, поэтому в этом примере вы можете обойти, набрав: sports = soup.find_all('span', {'title': 'Sports'}).contents, и это дастВы строковые версии того, что вы ищете.

0 голосов
/ 23 ноября 2018

Вы можете использовать re.compile с BeautifulSoup, чтобы найти все теги span, если первая часть атрибута title равна "Sports":

content = """
 <span title="Sports Football">Football</span>
 <span title="Sports Badminton">Tennis</span>
 <span title="Sports Ski Jump">Ski Jump</span>
"""

import re
from bs4 import BeautifulSoup as soup
d = soup(content, 'html.parser')
results = [i.text for i in d.find_all('span', {'title':re.compile('^Sports\s')})]

Вывод:

['Football', 'Tennis', 'Ski Jump']
0 голосов
/ 23 ноября 2018

Вы ничего не получаете, потому что нет фиксированного заголовка с именем Sports, и он не работает как подстановочный знак.Если вы хотите получить значение атрибута title, вы можете использовать get(attr_name) для вашего объекта тега, который вы используете, используя find_all.

from bs4 import BeautifulSoup

html = '''<span title="Sports Football">Football</span>
<span title="Sports Badminton">Tennis</span>
<span title="Sports Ski Jump">Ski Jump</span>'''

soup = BeautifulSoup(html,"lxml")

title = [s.get('title') for s in soup.find_all('span')]
title
>> ['Sports Football', 'Sports Badminton', 'Sports Ski Jump']

В дополнение к этому, если вам потребуется толькотекст для этого элемента, просто используйте метод .text для объекта тега из find_all.

sports = [s.text for s in soup.find_all('span')]
sports
>>['Football', 'Tennis', 'Ski Jump']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...