【问题标题】:Beautiflsoup Create Soup With A Snippet of Page SourceBeautifulsoup 使用页面源代码片段创建汤
【发布时间】:2016-07-30 01:31:40
【问题描述】:

通常每当我使用 Beautifulsoup 简单地提取数据时

soup = BeautifulSoup(driver.page_source, "html5lib")

简单。任务完成。

但我正在处理一个有大量数据的网站。它已经加载了,所以我不需要担心加载时间,但我认为真正的杀手是让我的 find_all 浏览我不需要查看的页面源。

我知道我可以通过导航到班级等来缩小我正在寻找的数据的范围。这很有效,但速度很慢。事实上,即使使用 page_source 创建汤也很慢。

我尝试过各种变化

soup = BeautifulSoup(driver.find_element_by_class_name('box'), "html5lib")

但没有成功。是否可以在不查看所有源代码的情况下做这样的事情?我想以某种形式它仍然需要加载源代码才能找到我想要它查看的类。但较小的汤在下载后可能会更快浏览。

如果有人能在这里为我指明正确的方向,我将不胜感激。

TL;DR 我的来自 page_source 的汤是巨大的需要时间来使用 selenium 导航我可以在导航之前将我的汤限制为某个类名或其他内容吗?

【问题讨论】:

    标签: python selenium web-scraping beautifulsoup


    【解决方案1】:

    当然,这正是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)
    

    【讨论】:

    • 啊完美!你不知道今晚你让我的生活变得多么美好。我会给 lxml 一个去,但它往往会错过 html5lib 似乎捡起来的东西。
    猜你喜欢
    • 2010-10-02
    • 2012-09-29
    • 1970-01-01
    • 2017-09-03
    • 2012-11-27
    • 1970-01-01
    • 1970-01-01
    • 2015-07-06
    • 1970-01-01
    相关资源
    最近更新 更多