Питон красивые супы аргументы - PullRequest
6 голосов
/ 03 апреля 2010

У меня есть этот код, который выбирает некоторый текст со страницы, используя 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'}"])

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

Есть ли способ это исправить?

Ответы [ 2 ]

7 голосов
/ 03 апреля 2010
def parse(html, *atrs):
 soup= BeautifulSoup(html)
 body = soup.find(*atrs)
 return body

А потом:

parse(htmlpage, 'div', {'id':'body'})
3 голосов
/ 03 апреля 2010

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

body = soup.find(*atrs)

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...