我不希望bs4解析整个文档,但是我也没有任何方法使用limit参数,因为我不知道我需要预先解析多少个链接。如果这是re
,在这种情况下,我会使用re.finditer()
。但是我在bs4中找不到类似的功能。
答案 0 :(得分:2)
否,BeautifulSoup
没有与find_all()
类似的“迭代/惰性”版本。
您可以在不解析整个文档的情况下要做的一件事是SoupStrainer
,这至少可以使您BeautifulSoup
专注于仅解析页面的所需元素。
答案 1 :(得分:1)
由于您评论要处理XML文档,因此可以使用其元素实现.iter
的ElementTree
(假设您使用的是Python> = 3.2):
import xml.etree.ElementTree as ET
doc = ['<root>'] + ['<a href="{}"/>' for i in range(10)] + ['</root>']
doc = ET.fromstring(''.join(doc))
print(doc.iter(tag='a'))
for link in doc.iter(tag='a'):
print(link)
输出
# <_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>