#python #beautifulsoup
#python #beautifulsoup
Вопрос:
Как я могу назначить html-код переменной, чтобы позже я мог ссылаться на нее?
Пример:
"div class='test'" - some html code
some_variable = "'div', {'class': ='test'}" *#assigning above to the variable*
print(soup.find(some_variable)) *# is not working*
print(soup.find('div', {"class": 'test'}) # **is working**
Ответ №1:
Вы можете сохранить параметры поиска внутри словаря, а затем использовать **
:
from bs4 import BeautifulSoup
html_doc = '''
<div class="test">This I want</div>
<div class="other">This I dont want</div>
'''
soup = BeautifulSoup(html_doc, 'html.parser')
params = {'name': 'div', 'attrs': {'class': 'test'}}
print( soup.find(**params).text )
С принтами:
This I want
Или: используйте селектор CSS:
selector = 'div.test'
print( soup.select_one(selector).text )
Комментарии:
1. вау, спасибо! приятно видеть 2 решения, но я думаю, что буду придерживаться selector, поскольку это более понятно для человека, который читает: P
2. @zarize, для справки,
**params
синтаксис называется «распаковкой параметров» , и он, по сути, «распаковывает» dictparams
в параметры ключевогоsoup.find
слова функции.3. Спасибо за объяснение! Теперь мне просто интересно… что, если я хотел бы добавить метод .text в конце селектора? selector = ‘div.test’.text, конечно, не будет работать, но я хотел бы сохранить возможность добавления динамического метода, как этого добиться?