Python красивые аргументы супа

У меня есть этот код, который выбирает некоторый текст от использования страницы BeautifulSoup

soup= BeautifulSoup(html)
body = soup.find('div' , {'id':'body'})
print body

Я хотел бы сделать это как допускающую повторное использование функцию, которая берет в некотором htmltext и тегах для соответствия ему как следующее

def parse(html, atrs):
 soup= BeautifulSoup(html)
 body = soup.find(atrs)
 return body

Но если я звоню как это

    parse(htmlpage, ('div' , {'id':'body'}"))  or like

parse(htmlpage, ['div' , {'id':'body'}"])

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

Существует ли способ зафиксировать это?

6
задан scott 3 April 2010 в 12:28
поделиться

2 ответа

def parse(html, *atrs):
 soup= BeautifulSoup(html)
 body = soup.find(*atrs)
 return body

А затем:

parse(htmlpage, 'div', {'id':'body'})
8
ответ дан 9 December 2019 в 22:31
поделиться

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

body = soup.find(*atrs)

Без звездочки вы передаете единственный параметр, который является кортежем:

body = soup.find(('div' , {'id':'body'}))

С помощью звездочки кортеж раскрывается, и оператор становится эквивалентным тому, что вы хотите:

body = soup.find('div' , {'id':'body'})

См. эта статья для получения дополнительной информации об использовании нотации * args и связанных ** kwargs .

3
ответ дан 9 December 2019 в 22:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: