Python / BeautifulSoup — как назначить html-код переменной

#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 синтаксис называется «распаковкой параметров» , и он, по сути, «распаковывает» dict params в параметры ключевого soup.find слова функции.

3. Спасибо за объяснение! Теперь мне просто интересно… что, если я хотел бы добавить метод .text в конце селектора? selector = ‘div.test’.text, конечно, не будет работать, но я хотел бы сохранить возможность добавления динамического метода, как этого добиться?