Python Beautiful Soup 参数

8 投票
2 回答
12906 浏览
提问于 2025-04-15 21:11

我有一段代码,它使用BeautifulSoup从一个页面获取一些文本。

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

我想把这个代码做成一个可以重复使用的函数,这个函数可以接收一些html文本和要匹配的标签,像下面这样:

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 个回答

3

我觉得你只需要在这里加一个星号:

body = soup.find(*atrs)

没有这个星号的话,你传递的只是一个参数,这个参数是一个元组:

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

加上星号后,元组会被展开,这样语句就变成了你想要的样子:

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

想了解更多关于使用 *args 这种写法的信息,可以看看 这篇文章,还有相关的 **kwargs

8
def parse(html, *atrs):
 soup= BeautifulSoup(html)
 body = soup.find(*atrs)
 return body
parse(htmlpage, 'div', {'id':'body'})

然后:

撰写回答