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

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

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

用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 抓取网页 库_5种流行的Web抓取Python库,你用过哪种?相关推荐

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

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

  2. python抓取网页数据并截图_手把手教你使用python抓取并存储网页数据!

    作者:刘早起 来源:早起Python 爬虫是Python的一个重要的应用,使用Python爬虫我们可以轻松的从互联网中抓取我们想要的数据,本文将基于爬取B站视频热搜榜单数据并存储为例,详细介绍Pyth ...

  3. 网络爬虫学习2 - 爬取网页的通用代码框架、HTTP协议、Requests库的各种方法

    网络爬虫MOOC学习打卡 - 第二天 文章目录 网络爬虫MOOC学习打卡 - 第二天 一.爬取网页的通用代码框架 1.理解requests库的异常 2.Respones类提供了一个方法 -- r.ra ...

  4. Python 爬取网页信息并保存到本地爬虫爬取网页第一步【简单易懂,注释超级全,代码可以直接运行】

    Python 爬取网页信息并保存到本地[简单易懂,代码可以直接运行] 功能:给出一个关键词,根据关键词爬取程序,这是爬虫爬取网页的第一步 步骤: 1.确定url 2.确定请求头 3.发送请求 4.写入 ...

  5. html5设计app数据js库,12个流行的HTML5 JS图形绘制库

    众多周知,图形和图表要比文本更具表现力和说服力.图表是数据图形化的表示,通过形象的图表来展示数据,比如条形图,折线图,饼图等等.可视化图表可以帮助开发者更容易理解复杂的数据,提高生产的效率和 Web ...

  6. python抓取网页数据并截图_网络爬虫-使用Python抓取网页数据

    搬自大神boyXiong的干货! 闲来无事,看看了Python,发现这东西挺爽的,废话少说,就是干 准备搭建环境 因为是MAC电脑,所以自动安装了Python 2.7的版本 添加一个 库 Beauti ...

  7. java抓取网页数据_简易数据分析 10 | Web Scraper 翻页——抓取滚动加载类型网页...

    [这是简易数据分析系列的第 10 篇文章] 友情提示:这一篇文章的内容较多,信息量比较大,希望大家学习的时候多看几遍. 我们在刷朋友圈刷微博的时候,总会强调一个『刷』字,因为看动态的时候,当把内容拉到 ...

  8. java 流的方式抓取网页 但是显示不全_用java抓取网页源代码时总是无法获取完整的源代码信息,求指导...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 无论是用urlconnection还是httpurlconnection都只能获得一部分网页源代码(即有的标签内容在网页上右键-查看源代码能看到,但是用下 ...

  9. 专业人士使用的8种流行的Web开发工具

    使用最强大和先进的工具可以改变游戏规则,特别是在像web开发这样的动态领域.只有当web开发人员使用正确的工具时,他们才能消除冗余.避免样板文件和自动化过程. 虽然大多数公司推荐或拥有自己特定的工具和 ...

最新文章

  1. Java孩子父母类,@Output孩子和父母之间的沟通 . 角2(5)
  2. PHP executable not found. Install PHP 7 and add it to your PATH or set the php.executablePath settin
  3. eclipse连接hdfs操作设置用户名
  4. MapReduce不同进度的Reduce都在干什么?
  5. SpringCloud 如何搭建Eureka注册中心
  6. pythonif语句如何循环播放_python – 循环播放文本,一次3个字符
  7. python打印国际象棋规则口诀_python输出国际象棋棋盘的实例分享
  8. 浅谈UWB室内定位(二)
  9. java 构建 数字 list_数字全排列返回list的list:java实现
  10. Android 科大讯飞、语音听写集成指南
  11. 蓝桥杯题目练习 水题 [蓝桥杯2019初赛]矩形切割
  12. 中国三大石油公司信息化进展
  13. excel空值排查快捷键
  14. qq空间找不到服务器或dns错误,qq空间无法正常打开怎么办
  15. (亲测解决)每次打开excel文件都会出现两个窗口,一个是空白的sheet1,另一个是自己的文档
  16. yum是干什么的_刨根问底:什么是yum源,yum的工作原理又是什么
  17. 【iOS】遍历相册照片
  18. 拉普拉斯矩阵(Laplacian matrix)及其变体详解
  19. python-今日头条
  20. C#画K线实现画K线和截图保存

热门文章

  1. HMDB网站 爬取工具
  2. 计算机无法识别无线USB网卡,电脑无线网卡不能识别怎么办?电脑安装usb无线网卡图解...
  3. Collection转List
  4. (ICCV 2021) Hierarchical Aggregation for 3D Instance Segmentation
  5. 智慧城市数据可视化助力于城市建设
  6. 河北专接本计算机各学校分数线,2018年河北省专接本各学校录取分数线录取率...
  7. 谈一下PCB的布局与走线
  8. 编译 JellyBean 的时候遇到的问题
  9. python实验七 网络爬虫和文本处理
  10. 【分享 10 个日常使用的脚本】