通常情况下,只要我使用Beautifulsoup提取数据一个简单的
soup = BeautifulSoup(driver.page_source, "html5lib")
易。完成工作。
但我正在处理一个网站上有很多的数据。它已经加载了,所以我不需要担心加载时间,但我认为真正的杀手就是让我的find_all通过页面源我不需要看。
我知道我可以缩小我寻找的数据,因为我已经通过导航到班级等来制作汤。这样做有效但速度很慢。事实上,即使使用page_source创建汤也很慢。
我尝试了
的变体soup = BeautifulSoup(driver.find_element_by_class_name(' box')," html5lib")
但没有成功。没有拳头查看所有源代码,是否可以做这样的事情?我想在某种形式下它仍然需要加载源才能找到我想要它看的类。但下载后,较小的汤可能会更快地浏览。
我很感激任何能指出我正确方向的人。
TL;来自page_source的我的汤很大,需要时间用硒来导航我可以在导航之前将汤限制在某个类别或类别之内。
答案 0 :(得分:2)
当然,这正是SoupStrainer
的内容:
SoupStrainer
类允许您选择解析传入文档的哪些部分。
例如,如果您希望BeautifulSoup
仅解析具有box
类的元素:
from bs4 import BeautifulSoup, SoupStrainer
only_box = SoupStrainer(class_="box")
BeautifulSoup(driver.page_source, "html5lib", parse_only=only_box)
作为旁注,如果速度真的很重要,请考虑从html5lib
切换到lxml.html
解析器:
BeautifulSoup(driver.page_source, "lxml", parse_only=only_box)