如果我们可以使用 Selenium,为啥还需要像 BeautifulSoup 这样的解析器?

Posted

技术标签:

【中文标题】如果我们可以使用 Selenium,为啥还需要像 BeautifulSoup 这样的解析器?【英文标题】:Why do we still need parser like BeautifulSoup if we can use Selenium?如果我们可以使用 Selenium,为什么还需要像 BeautifulSoup 这样的解析器? 【发布时间】:2017-08-27 03:01:44 【问题描述】:

我目前正在使用 Selenium 从一些网站抓取数据。与 urllib 不同,我似乎并不需要像 BeautifulSoup 这样的解析器来解析 html。我可以简单地使用 Selenium 找到一个元素并使用 Webelement.text 来获取我需要的数据。正如我所看到的,有些人在网络爬虫中同时使用 Selenium 和 BeautifulSoup。真的有必要吗? bs4 可以提供哪些特殊功能来改进爬取过程?谢谢。

【问题讨论】:

***.com/questions/17436014/…我已经阅读了这篇文章,我目前正在爬的都是动态网站,所以我必须使用Selenium而不是urllib2 【参考方案1】:

Selenium 本身在定位元素方面非常强大,它基本上拥有从 HTML 中提取数据所需的一切。问题是,速度很慢。每个单独的 selenium 命令都通过JSON wire HTTP protocol 并且存在大量开销。

为了提高HTML解析部分的性能,通常让BeautifulSouplxml解析从.page_source检索到的页面源会快很多。


换句话说,动态网页的常见工作流程是这样的:

在 selenium 控制的浏览器中打开页面 进行必要的浏览器操作 页面上出现所需数据后,获取driver.page_source 并关闭浏览器 将页面源传递给 HTML 解析器以供进一步解析

【讨论】:

非常高质量的帖子,感谢alecxe的贡献。 Selenium 也可以与 Headless 浏览器一起使用(我相信你知道)加快进程并降低内存使用量(通常),不知道命令如何到达浏览器>JSON,谢谢。

以上是关于如果我们可以使用 Selenium,为啥还需要像 BeautifulSoup 这样的解析器?的主要内容,如果未能解决你的问题,请参考以下文章

如果我们可以简单地在 props 中传递创建的 ref,为啥还需要 React forwardRef? [复制]

为啥我们在 selenium webdriver 中需要番石榴?

为啥我们需要使用rabbitmq

如果我们有抽象类,为啥要在 Java 中使用接口? [复制]

为啥Selenium rc打开浏览器后就没反应了

为啥我们需要 JDBC 的连接池? [关闭]