为什么 jsoup 比 selenium 或 curl 快这么多?
Why is jsoup so much faster than selenium or curl?
在过去的十年里,我写过很多网络爬虫。最初是在 C++ 中,然后是 C#,但最近在 java 和 python 中广泛使用。这些天来,关于我是否在 java 或 python 中编写网络爬虫只是掷硬币。然而,在过去的 3 或 4 年里,我注意到 jsoup 在某种程度上比 pycurl、pyrequest 和 selenium 快得多。 jsoup 的秘密是什么?为什么它在速度方面击败了所有其他方法?
我不知道 pycurl 和 pyrequest,但我可以告诉你 JSoup 和 Selenium。最大的区别在于 selenium webdriver 驱动一个带有实时 DOM 的真实浏览器,在执行 selenium 的每个动作之前需要检查相关元素是否仍处于相同状态。这种与真实浏览器的交互自然比 JSoup 所做的要复杂得多:JSoup 是一个简单的 HTML 解析器。因此它解析 HTML 文档(或 XML)一次并创建内存表示。只有 JSoup 命令会改变 DOM,因此 JSoup 可以非常有效地处理这些内容。
你用这种方法付出的代价是 JSoup 自然不会解释或 运行 Javascript。所以依赖异步数据加载的网站会要求你深入理解它并直接加载内容。在 selenium 中,您可以让浏览器完成所有工作并“收获”渲染结果 HTML.
在过去的十年里,我写过很多网络爬虫。最初是在 C++ 中,然后是 C#,但最近在 java 和 python 中广泛使用。这些天来,关于我是否在 java 或 python 中编写网络爬虫只是掷硬币。然而,在过去的 3 或 4 年里,我注意到 jsoup 在某种程度上比 pycurl、pyrequest 和 selenium 快得多。 jsoup 的秘密是什么?为什么它在速度方面击败了所有其他方法?
我不知道 pycurl 和 pyrequest,但我可以告诉你 JSoup 和 Selenium。最大的区别在于 selenium webdriver 驱动一个带有实时 DOM 的真实浏览器,在执行 selenium 的每个动作之前需要检查相关元素是否仍处于相同状态。这种与真实浏览器的交互自然比 JSoup 所做的要复杂得多:JSoup 是一个简单的 HTML 解析器。因此它解析 HTML 文档(或 XML)一次并创建内存表示。只有 JSoup 命令会改变 DOM,因此 JSoup 可以非常有效地处理这些内容。
你用这种方法付出的代价是 JSoup 自然不会解释或 运行 Javascript。所以依赖异步数据加载的网站会要求你深入理解它并直接加载内容。在 selenium 中,您可以让浏览器完成所有工作并“收获”渲染结果 HTML.