У меня есть этот код, который выбирает некоторый текст от использования страницы 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'}"])
Я получаю только элемент отделения, атрибут тела, кажется, проигнорирован.
Существует ли способ зафиксировать это?
def parse(html, *atrs):
soup= BeautifulSoup(html)
body = soup.find(*atrs)
return body
А затем:
parse(htmlpage, 'div', {'id':'body'})
Я думаю, вы просто нужно добавить здесь звездочку:
body = soup.find(*atrs)
Без звездочки вы передаете единственный параметр, который является кортежем:
body = soup.find(('div' , {'id':'body'}))
С помощью звездочки кортеж раскрывается, и оператор становится эквивалентным тому, что вы хотите:
body = soup.find('div' , {'id':'body'})
См. эта статья для получения дополнительной информации об использовании нотации * args
и связанных ** kwargs
.