网页抓取的时候,如何决定哪一个库适合自己的特定项目?哪个Python库最灵活?5个示例找寻答案。

文丨ABHISHEK SHARMA

编译丨小二

“我们有足够的数据”这句话,在数据科学领域并不存在。

我很少会听到有人拒绝为他们的机器学习或深度学习项目收集更多的数据,往往都是永远觉得自己拥有的数据不够多。

为了缓解这种“数据焦虑”,分析师或数据科学家们练就了必备的技能之一:网页抓取。

用Python执行网页抓取很方便,有大量的库可以使用,但头疼的地方也在于此,如何决定哪一个库适合自己的特定项目?哪个Python库最灵活?

先不直接给出答案,下文所列举的是我认为较为通用的5个Python库,将通过对它们的优劣评估来回答那些疑问。

1.Requests

Requests是一个Python库,用于发出各种类型的HTTP请求,例如GET,POST等。由于其简单易用,它被称为HTTP for Humans。

我想说这是Web抓取最基本但必不可少的库。但是,请求库不会解析检索到的HTML数据。如果要这样做,还需要结合lxml和Beautiful Soup之类的库一起使用(将在本文中进一步介绍它们)。

那Requests Python库有哪些优缺点?

优点:

  • 简单

  • 基本/摘要身份验证

  • 国际域名和URL

  • 分块请求

  • HTTP(S)代理支持

缺点:

  • 仅检索页面的静态内容

  • 不能用于解析HTML

  • 无法处理纯JavaScript制作的网站

2.lxml

lxml是一种高性能,快速,高质生产力的HTML和XML解析Python库。

它结合了ElementTree的速度和功能以及Python的简单性。当我们打算抓取大型数据集时,它能发挥很好的作用。

在Web抓取的时候,lxml经常和Requests进行组合来使用,此外,它还允许使用XPath和CSS选择器从HTML提取数据。

那lxml Python库的优缺点有哪些?

优点:

  • 比大多数解析器快

  • 轻巧

  • 使用元素树

  • Pythonic API

缺点:

  • 不适用于设计不当的HTML

  • 官方文档不太适合初学者

3.BeautifulSoup

BeautifulSoup也许是Web抓取中使用最广泛的Python库。它创建了一个解析树,用于解析HTML和XML文档。还会自动将传入文档转换为Unicode,将传出文档转换为UTF-8。

在行业中,将“BeautifulSoup”与“Requests”组合在一起使用非常普遍。

让BeautifulSoup备受欢迎的主要原因之一,就是它易于使用并且非常适合初学者。同时,还可以将Beautiful Soup与其他解析器(如lxml)结合使用。

但是相对应的,这种易用性也带来了不小的运行成本——它比lxml慢。即使使用lxml作为解析器,它也比纯lxml慢。

下面来综合看下BeautifulSoup库的优缺点都有哪些?

优点:

  • 需要几行代码

  • 优质的文档

  • 易于初学者学习

  • 强大

  • 自动编码检测

缺点:

  • 比lxml慢

4. Selenium

到目前为止,我们讨论的所有Python库都有一个局限性:不能轻易地从动态填充的网页上抓取数据。

发生这种情况的原因有时是因为页面上存在的数据是通过JavaScript加载的。简单概括就是,如果页面不是静态的,那么前面提到的Python库就很难从页面中抓取数据。

这种情况,就比较适合使用Selenium。

Selenium最初是用于自动测试Web应用程序的Python库,是用于渲染网页的Web驱动程序,也正因如此,在其他库无法运行JavaScript的地方,Selenium就可以发挥作用:在页面上单击,填写表格,滚动页面并执行更多操作。

这种在网页中运行JavaScript的能力,使Selenium能够抓取动态填充的网页。但是这里存在一个“缺陷”,它为每个页面加载并运行JavaScript,会使其运行速度变慢,不适合大型项目。

如果不关心时间和速度,那么Selenium绝对是个很好的选择。

优点:

  • 初学者友好

  • 自动网页抓取

  • 可以抓取动态填充的网页

  • 自动化网络浏览器

缺点:

  • 非常慢

  • 设置困难

  • 高CPU和内存使用率

  • 不适用于大型项目

5. Scrapy

现在是时候介绍Python Web抓取库的BOSS——Scrapy!

Scrapy不仅仅单纯是一个库,它是Scrapinghub的联合创始人Pablo Hoffman和Shane Evans创建的整个Web抓取框架,是一款功能完善的网页抓取解决方案,可以完成所有繁重的工作。

Scrapy提供的蜘蛛机器人可以抓取多个网页并提取数据。使用Scrapy,可以创建自己的蜘蛛机器人,将其托管在Scrapy Hub上,或作为API。在几分钟内就可以创建功能齐全的蜘蛛网,当然也可以使用Scrapy创建管道。

关于Scrapy最好的一点在于它是异步的,这意味着可以同时发出多个HTTP请求,能够为我们节省很多时间并提高效率(这不是我们正为之奋斗的吗?)。

我们还可以向Scrapy添加插件来增强其功能。尽管Scrapy无法像selenium一样处理JavaScript,但可以将其与名为Splash的库(轻量级Web浏览器)配对。借助Splash,Scrapy就能实现从动态网页提取数据。

优点:

  • 异步

  • 优秀的文档

  • 各种插件

  • 创建自定义管道和中间件

  • CPU和内存使用率低

  • 精心设计的架构

  • 大量可用的在线资源

缺点:

  • 学习门槛较高

  • 过分的轻松工作

  • 不适合初学者

这些是我个人觉得很有用的Python库,如果有其他你觉得使用起来不错的库,欢迎留言评论~

原文链接:

https://www.analyticsvidhya.com/blog/2020/04/5-popular-python-libraries-web-scraping/

————————线上沙龙预告

python添加lxml库_7分钟,建议看完这5个Python库对比丨web抓取相关推荐

  1. 5种流行的Web抓取Python库,你用过哪种?

    "我们有足够的数据"这句话,在数据科学领域并不存在. 我很少会听到有人拒绝为他们的机器学习或深度学习项目收集更多的数据,往往都是永远觉得自己拥有的数据不够多. 为了缓解这种&quo ...

  2. python 抓取网页 库_5种流行的Web抓取Python库,你用过哪种?

    "我们有足够的数据"这句话,在数据科学领域并不存在. 我很少会听到有人拒绝为他们的机器学习或深度学习项目收集更多的数据,往往都是永远觉得自己拥有的数据不够多. 为了缓解这种&quo ...

  3. python lxml使用_使用lxml和Python进行Web抓取的简介

    python lxml使用 by Timber.io 由Timber.io 使用lxml和Python进行Web抓取的简介 (An Intro to Web Scraping with lxml an ...

  4. python去除中间空格只留一个_汇总初学Python的21个操作难点,看完别再去踩坑了...

    初学Python时,不管是容易的操作难点,还是困难的操作难点,都是要一步步的去踩坑摸索得出结果,小编今天就给大家汇总初学时Python的21个操作难点,看完之后可别再去掉到同样的坑里去了. 1 查找当 ...

  5. 独家 | 手把手教你用Python进行Web抓取(附代码)

    作者:Kerry Parker 翻译:田晓宁 校对:丁楠雅 本文约2900字,建议阅读10分钟. 本教程以在Fast Track上收集百强公司的数据为例,教你抓取网页信息. 作为一名数据科学家,我在工 ...

  6. 推荐 :手把手教你用Python进行Web抓取(附代码)

    作者:Kerry Parker :翻译:田晓宁:校对:丁楠雅: 本文约2900字,建议阅读10分钟. 本教程以在Fast Track上收集百强公司的数据为例,教你抓取网页信息. 作为一名数据科学家,我 ...

  7. python的web抓取_使用Python进行web抓取的新手指南

    Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 使用基本的Python工具获得一些实践经验,以获取完整的HTML站点. 图片来源 : Jason Bake ...

  8. 如何用 Python 实现 Web 抓取?

    [编者按]本文作者为 Blog Bowl 联合创始人 Shaumik Daityari,主要介绍 Web 抓取技术的基本实现原理和方法.文章系国内 ITOM 管理平台 OneAPM 编译呈现,以下为正 ...

  9. 使用python进行web抓取

    http://cxy.liuzhihengseo.com/462.html 原文出处:  磁针石    本文摘要自Web Scraping with Python – 2015 书籍下载地址:http ...

最新文章

  1. jQuery的事件方法
  2. Hadoop和Spark生态圈了解
  3. 02、Kubernetes 入门(上)-重新认识Docker
  4. 传统I/O 数据拷贝
  5. 【网络编程】之八、异步选择WSAAsyncSelect
  6. html之属性的应用
  7. Gartner:企业机构需重新定义网络安全领导者角色
  8. pandas 链接数据库
  9. yocto rootfs 支持pam
  10. 46. PHP 数据库
  11. html中电子邮件地址怎么写,电子邮件地址怎么写
  12. Anaconda 安装pkgs
  13. U盘启动制作及系统安装
  14. 烟台服务器装系统,【图】- 烟台芝罘区上门修电脑安装系统电话多少三站 - 烟台芝罘电脑维修 - 烟台百姓网...
  15. c语言读取无压缩的cbl的源代码,c语言基础算法案例
  16. linux搭建DNS域名解析服务
  17. 阿里电商故障治理和故障演练实践
  18. Web自动化测试(二)
  19. 李开复最新刷屏演讲:人工智能最难取代这13种工作,也最容易威胁人性与爱!
  20. 10分钟了解Pandas基础知识

热门文章

  1. Redis热点Key发现及常见解决方案
  2. jQuery获取浏览器URL链接的值
  3. [非技术参考]C#基础:使用Thread创建线程(1)
  4. ASP.NET编程模型
  5. WPF 动态模拟CPU 使用率曲线图
  6. 多任务版udp聊天器
  7. CA certificate
  8. 深入Java调试体系之JDWP协议及实现
  9. openfire单个插件编译
  10. 在备份流程中使用date