说我有一个名为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”符号化它应该代表的标签我将其打印到控制台吗?
答案 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