如果我们可以使用 Selenium,为什么我们还需要像 BeautifulSoup 这样的解析器?
Why do we still need parser like BeautifulSoup if we can use Selenium?
我目前正在使用 Selenium 从一些网站上抓取数据。与 urllib 不同,我似乎并不需要像 BeautifulSoup 这样的解析器来解析 HTML。我可以简单地用 Selenium 找到一个元素并使用 Webelement.text 来获取我需要的数据。正如我看到的,有些人在网络爬虫中同时使用 Selenium 和 BeautifulSoup。真的有必要吗? bs4 可以提供哪些特殊功能来改进爬行过程?谢谢。
Selenium 本身在定位元素方面非常强大,它基本上拥有从 HTML 中提取数据所需的一切。问题是,它很慢。每个单独的 selenium 命令都经过 JSON wire HTTP protocol 并且存在大量开销。
为了提高HTML解析部分的性能,通常让BeautifulSoup
或lxml
解析从.page_source
获取的页面源会快很多.
换句话说,动态网页的常见工作流程是这样的:
- 在selenium控制的浏览器中打开页面
- 进行必要的浏览器操作
- 一旦所需数据出现在页面上,获取
driver.page_source
并关闭浏览器
- 将页面源传递给 HTML 解析器进行进一步解析
我目前正在使用 Selenium 从一些网站上抓取数据。与 urllib 不同,我似乎并不需要像 BeautifulSoup 这样的解析器来解析 HTML。我可以简单地用 Selenium 找到一个元素并使用 Webelement.text 来获取我需要的数据。正如我看到的,有些人在网络爬虫中同时使用 Selenium 和 BeautifulSoup。真的有必要吗? bs4 可以提供哪些特殊功能来改进爬行过程?谢谢。
Selenium 本身在定位元素方面非常强大,它基本上拥有从 HTML 中提取数据所需的一切。问题是,它很慢。每个单独的 selenium 命令都经过 JSON wire HTTP protocol 并且存在大量开销。
为了提高HTML解析部分的性能,通常让BeautifulSoup
或lxml
解析从.page_source
获取的页面源会快很多.
换句话说,动态网页的常见工作流程是这样的:
- 在selenium控制的浏览器中打开页面
- 进行必要的浏览器操作
- 一旦所需数据出现在页面上,获取
driver.page_source
并关闭浏览器 - 将页面源传递给 HTML 解析器进行进一步解析