使用字符串表示BeautifulSoup对象中的标签

时间:2018-11-27 05:57:47

标签: python beautifulsoup

说我有一个名为bs4的BeautifulSoup对象。要在find_all_next标签上使用bs4的p函数,我会这样做:

bs4.p.find_all_next(string = True)

我想将它放入网页中所有可用标签的for循环中

temp_set = set()
for x in bs4.find_all():
    temp_set.add(x.name) # Store only tag name, no dupes, order doesn't matter

但是,在bs4对象中使用它的时间:

for x in temp_set:
    bs4.x.find_all_next(string = True) # x is supposed to represent the tag name; attribute error

我知道不存在标签“ x”,这就是为什么出现属性错误的原因,有什么我可以做的事情来使循环中的“ x”符号化它应该代表的标签我将其打印到控制台吗?

1 个答案:

答案 0 :(得分:0)

文档状态here

getattr(x,'foobar')等同于x.foobar

所以当我尝试它时,我只是循环遍历:

getattr(bs4, x).find_all_next(string = True)

如文档所述,等效于bs4.x.find_all_next(string = True),其中x为变量

我不确定您想从那里做什么。

并不是您集合中的所有项目都可以使用,所以我循环播放,将它们放入列表中,然后将异常也放入列表中,以查看哪些无效。而“选择”将给出一个AttributeError: 'function' object has no attribute 'find_all_next'

所以基本上,这就是我在上一节中所做的。再次执行您想要的操作,但您将遍历getattr(bs4, x).find_all_next(string = True)

final_list = []
failed_x = []

for x in temp_set:
    try:
        final_list.append(list(getattr(bs4, x).find_all_next(string = True)))
    except:
        failed_x.append(x)
        continue