网页抓取工具(较为通用的5个Python库有哪些?优点是什么?)
优采云 发布时间: 2021-12-14 16:42网页抓取工具(较为通用的5个Python库有哪些?优点是什么?)
“我们有足够的数据”这句话在数据科学领域并不存在。
我很少听到有人拒绝为他们的机器学习或深度学习项目采集更多数据,通常是因为他们总觉得自己没有足够的数据。
为了缓解这种“数据焦虑”,分析师或数据科学家开发了一项必备技能:网站爬行。
在Python中执行网站爬行非常方便。有大量可用的库,但这也是令人头疼的问题。您如何决定哪个库适合您的特定项目?哪个 Python 库最灵活?
我不会直接给出答案。以下是我认为比较常见的五个 Python 库,这些问题将通过评估它们的优缺点来回答。
1.请求
Requests 是一个 Python 库,用于发出各种类型的 HTTP 请求,如 GET、POST 等,因其简单易用,被称为人类 HTTP。
我想说,这是一个最基本但必不可少的网页抓取库。但是,请求库不会解析检索到的 HTML 数据。如果要做到这一点,还需要结合lxml和Beautiful Soup等库(我们将在本文中进一步介绍)。
Requests Python 库的优缺点是什么?
优势:
缺点:
2.lxml
lxml 是一个高性能、快速、高质量和高效的 HTML 和 XML 解析 Python 库。
它结合了 ElementTree 的速度和功能以及 Python 的简单性。当我们打算抓取大型数据集时,它可以发挥非常好的作用。
在网络爬虫中,lxml 经常与 Requests 结合使用。此外,它还允许使用 XPath 和 CSS 选择器从 HTML 中提取数据。
lxml Python 库的优缺点是什么?
优势:
缺点:
3.美汤
BeautifulSoup 可能是网络抓取中使用最广泛的 Python 库。它创建用于解析 HTML 和 XML 文档的解析树。它还自动将传入文档转换为 Unicode,将传出文档转换为 UTF-8。
在业界,“BeautifulSoup”和“Requests”的结合是很常见的。
BeautifulSoup 如此受欢迎的主要原因之一是它易于使用且非常适合初学者。同时,您还可以将 Beautiful Soup 与其他解析器(如 lxml)结合使用。
但是相应的,这种易用性也带来了不小的运行成本——比lxml慢。即使使用 lxml 作为解析器,它也比纯 lxml 慢。
下面我们来全面看看BeautifulSoup库的优缺点是什么?
优势:
缺点:
4. 硒
到目前为止,我们讨论的所有 Python 库都有一个限制:您无法轻松地从动态填充的 网站 中获取数据。
发生这种情况的原因有时是因为页面上存在的数据是通过 JavaScript 加载的。简单总结一下,如果页面不是静态的,那么前面提到的Python库就很难从页面中抓取数据。
在这种情况下,使用 Selenium 更合适。
Selenium 最初是一个 Python 库,用于自动测试 Web 应用程序。它是一个用于渲染网页的网络驱动程序。因此,Selenium 可以在其他库无法运行 JavaScript 的情况下发挥作用:单击页面、填写表单、滚动页面并执行更多操作。
这种在网页中运行 JavaScript 的能力允许 Selenium 抓取动态填充的网页。但这里有一个“缺陷”。它为每个页面加载并运行 JavaScript,这会使其运行速度较慢,不适合大型项目。
如果你不在乎时间和速度,那么Selenium绝对是一个不错的选择。
优势:
缺点:
5. Scrapy
现在是时候介绍一下 Python 网页抓取库的 BOSS 了——Scrapy!
Scrapy 不仅仅是一个库。它是由 Scrapinghub 联合创始人 Pablo Hoffman 和 Shane Evans 创建的整个网络抓取框架。它是一个功能齐全的网页抓取解决方案,可以完成所有繁重的工作。
Scrapy提供的蜘蛛机器人可以抓取多个网站并提取数据。使用 Scrapy,您可以创建自己的蜘蛛机器人,将其托管在 Scrapy Hub 上,或将其用作 API。几分钟就可以创建一个功能齐全的蜘蛛网,当然Scrapy也可以用来创建管道。
Scrapy 最大的优点是它是异步的,这意味着可以同时进行多个 HTTP 请求,这样可以为我们节省大量时间并提高效率(这不是我们在争取的吗?)。
我们还可以向 Scrapy 添加插件以增强其功能。尽管 Scrapy 不能像 selenium 一样处理 JavaScript,但它可以与一个名为 Splash(一个轻量级的 Web 浏览器)的库搭配使用。在 Splash 的帮助下,Scrapy 可以从动态的 网站 中提取数据。
优势:
缺点:
这些是我个人认为非常有用的 Python 库。如果还有其他的库可以很好用,欢迎留言~
原文链接:
/blog/2020/04/5-popular-python-libraries-web-scraping/