Python 是否有任何方法可以从bs4 findAll()获取迭代器,如re.findIter()?

Python 是否有任何方法可以从bs4 findAll()获取迭代器,如re.findIter()?,python,regex,python-3.x,beautifulsoup,iterator,Python,Regex,Python 3.x,Beautifulsoup,Iterator,我不想让bs4解析整个文档,但我也没有任何方法使用limit参数,因为我不知道需要事先解析多少个链接。如果这是re,我会在这种情况下使用re.finditer()。但是我在bs4中找不到类似的函数。因为您评论说您处理的是XML文档,所以可以使用ElementTree实现其元素(假设您使用的是Python>=3.2): 将xml.etree.ElementTree作为ET导入 doc=['']+[''表示范围(10)]+[''内的i doc=ET.fromstring(“”.join(doc))

我不想让bs4解析整个文档,但我也没有任何方法使用limit参数,因为我不知道需要事先解析多少个链接。如果这是
re
,我会在这种情况下使用
re.finditer()
。但是我在bs4中找不到类似的函数。

因为您评论说您处理的是XML文档,所以可以使用
ElementTree
实现其元素(假设您使用的是Python>=3.2):

将xml.etree.ElementTree作为ET导入
doc=['']+[''表示范围(10)]+[''内的i
doc=ET.fromstring(“”.join(doc))
打印(doc.iter(tag='a'))
对于doc.iter(tag='a')中的链接:
打印(链接)
输出

# <_elementtree._element_iterator object at 0x000001FFE8B44468>
# <Element 'a' at 0x000001FFD05253B8>
# <Element 'a' at 0x000001FFE8AF62C8>
# <Element 'a' at 0x000001FFE8B32B38>
# <Element 'a' at 0x000001FFE8B32B88>
# <Element 'a' at 0x000001FFE8B41228>
# <Element 'a' at 0x000001FFE8B451D8>
# <Element 'a' at 0x000001FFE8B45228>
# <Element 'a' at 0x000001FFE8B45278>
# <Element 'a' at 0x000001FFE8B452C8>
# <Element 'a' at 0x000001FFE8B45318>
#
# 
# 
# 
# 
# 
# 
# 
# 
# 
# 

否,
BeautifulSoup
没有类似的
find\u all()
的“迭代/惰性”版本


在不解析整个文档方面,您可以做的一件事是,至少允许您将
BeautifulSoup
的重点放在只解析页面所需的元素上。

“我不想让bs4解析整个文档”是一个长到实际上是代码瓶颈的文档,或者这是一个过早优化的例子?是的,这是一个很大很好的建议,虽然我的基准测试如果它对浏览器来说不是太大,对Python来说也不应该太大。它是一个xml文档这正是我想知道的。非常感谢。
# <_elementtree._element_iterator object at 0x000001FFE8B44468>
# <Element 'a' at 0x000001FFD05253B8>
# <Element 'a' at 0x000001FFE8AF62C8>
# <Element 'a' at 0x000001FFE8B32B38>
# <Element 'a' at 0x000001FFE8B32B88>
# <Element 'a' at 0x000001FFE8B41228>
# <Element 'a' at 0x000001FFE8B451D8>
# <Element 'a' at 0x000001FFE8B45228>
# <Element 'a' at 0x000001FFE8B45278>
# <Element 'a' at 0x000001FFE8B452C8>
# <Element 'a' at 0x000001FFE8B45318>