Python网络爬虫四大选择器用法原理总结


Posted in Python onJune 01, 2020

前几天小编连续写了四篇关于Python选择器的文章,分别用正则表达式、BeautifulSoup、Xpath、CSS选择器分别抓取京东网的商品信息。今天小编来给大家总结一下这四个选择器,让大家更加深刻的理解和熟悉Python选择器。

一、正则表达式

正则表达式为我们提供了抓取数据的快捷方式。虽然该正则表达式更容易适应未来变化,但又存在难以构造、可读性差的问题。当在爬京东网的时候,正则表达式如下图所示:

Python网络爬虫四大选择器用法原理总结

利用正则表达式实现对目标信息的精准采集

此外 ,我们都知道,网页时常会产生变更,导致网页中会发生一些微小的布局变化时,此时也会使得之前写好的正则表达式无法满足需求,而且还不太好调试。当需要匹配的内容有很多的时候,使用正则表达式提取目标信息会导致程序运行的速度减慢,需要消耗更多内存。

二、BeautifulSoup

BeautifulSoup是一个非常流行的 Pyhon 模块。该模块可以解析网页,并提供定位内容的便捷接口。通过'pip install beautifulsoup4'就可以实现该模块的安装了。

Python网络爬虫四大选择器用法原理总结

利用美丽的汤去提取目标信息

使用 BeautifulSoup的第一步是将己下载的 HTML 内容解析为 soup文档。由 于大多 数网 页都不具备良好的HTML 格式,因此BeautifulSoup需要对实际格式进行确定。BeautifulSoup能够正确解析缺失的引号并闭合标签,此外还会添加<html >和<body>标签使其成为完整的HTML文档。通常使用find() 和find_all()方法来定位我们需要的元素。如果你想了解BeautifulSoup全部方法和参数,可以查阅BeautifulSoup的官方文档。虽然BeautifulSoup在代码的理解上比正则表达式要复杂一些,但是其更加容易构造和理解。

三、Lxml

Lxml模块使用 C语言编写,其解析速度比 BeautiflSoup更快,而且其安装过程也更为复杂,在此小编就不赘述啦。XPath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着路径或者 step 来选取的。

Python网络爬虫四大选择器用法原理总结

Xpath

使用 lxml 模块的第一步和BeautifulSoup一样,也是将有可能不合法的HTML 解析为 统一格式。 虽然Lxml可以正确解析属性两侧缺失的引号,并闭合标签,不过该模块没有额外添加<html >和<body>标签 。

在线复制Xpath表达式可以很方便的复制Xpath表达式。但是通过该方法得到的Xpath表达式放在程序中一般不能用,而且长的没法看。所以Xpath表达式一般还是要自己亲自上手。

四、CSS

CSS选择器表示选择元素所使用 的模式。BeautifulSoup整合了CSS选择器的语法和自身方便使用API。在网络爬虫的开发过程中,对于熟悉CSS选择器语法的人,使用CSS选择器是个非常方便的方法。

Python网络爬虫四大选择器用法原理总结

CSS选择器

下面是一些常用的选择器示例。

  • 选择所有标签: *
  • 选择<a>标 签: a
  • 选择所有class=”link” 的元素: .l in k
  • 选择 class=”link” 的<a>标签: a.link
  • 选择 id= " home ” 的<a>标签: a Jhome
  • 选择父元素为<a>标签的所有< span>子标签: a > span
  • 选择<a>标签内部的所有<span>标签: a span
  • 选择title属性为” Home ” 的所有<a>标签: a [title=Home]

五、性能对比

lxml 和正则表达式模块都是C语言编写的,而BeautifulSoup则是纯Python 编写的。下表总结了每种抓取方法的优缺点。

Python网络爬虫四大选择器用法原理总结

相对困难需要注意的是。lxml在内部实现中,实际上是将CSS选择器转换为等价的Xpath选择器。

六、总结

如果你的爬虫瓶颈是下载网页,而不是抽取数据的话,那么使用较慢的方法(如BeautifulSoup) 也不成问题。如果只需抓取少量数据,并且想要避免额外依赖的话,那么正则表达式可能更加适合。不过,通常情况下,l xml是抓取数据的最好选择,这是因为该方法既快速又健壮,而正则表达式和BeautifulSoup只在某些特定场景下有用。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python 冒泡,选择,插入排序使用实例
Feb 05 Python
Python3实现从指定路径查找文件的方法
May 22 Python
尝试使用Python多线程抓取代理服务器IP地址的示例
Nov 09 Python
详解Python中的__getitem__方法与slice对象的切片操作
Jun 27 Python
Python多线程经典问题之乘客做公交车算法实例
Mar 22 Python
python+selenium实现QQ邮箱自动发送功能
Jan 23 Python
python+selenium实现简历自动刷新的示例代码
May 20 Python
详解pytorch 0.4.0迁移指南
Jun 16 Python
Python 3.6 -win64环境安装PIL模块的教程
Jun 20 Python
利用PyCharm操作Github(仓库新建、更新,代码回滚)
Dec 18 Python
Python类如何定义私有变量
Feb 03 Python
如何在sublime编辑器中安装python
May 20 Python
浅谈Pycharm的项目文件名是红色的原因及解决方式
Jun 01 #Python
pycharm设置默认的UTF-8编码模式的方法详解
Jun 01 #Python
解决pycharm导入本地py文件时,模块下方出现红色波浪线的问题
Jun 01 #Python
Python常见反爬虫机制解决方案
Jun 01 #Python
解决python运行启动报错问题
Jun 01 #Python
利用python控制Autocad:pyautocad方式
Jun 01 #Python
Python 跨.py文件调用自定义函数说明
Jun 01 #Python
You might like
javascript奇异的arguments分析
2010/10/20 Javascript
jQuery表单域选择器用法分析
2015/02/10 Javascript
超漂亮的jQuery图片轮播特效
2015/11/24 Javascript
jQuery Validation PlugIn的使用方法详解
2015/12/18 Javascript
Node.js调试技术总结分享
2017/03/12 Javascript
微信小程序 动态传参实例详解
2017/04/27 Javascript
Angular排序实例详解
2017/06/28 Javascript
vue.js移动端app实战1:初始配置详解
2017/07/24 Javascript
vue 插值 v-once,v-text, v-html详解
2018/01/19 Javascript
解决element UI 自定义传参的问题
2018/08/22 Javascript
微信小程序局部刷新触发整页刷新效果的实现代码
2018/11/21 Javascript
基于vue.js实现分页查询功能
2018/12/29 Javascript
配置一个vue3.0项目的完整步骤
2019/04/26 Javascript
vue draggable resizable 实现可拖拽缩放的组件功能
2019/07/15 Javascript
vue通过数据过滤实现表格合并
2020/11/30 Javascript
微信小程序前端promise封装代码实例
2019/08/24 Javascript
微信公众号服务器验证Token步骤图解
2019/12/30 Javascript
微信小程序通过websocket实时语音识别的实现代码
2020/08/19 Javascript
JavaScript实现下拉列表
2021/01/20 Javascript
[01:04:14]OG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
人机交互程序 python实现人机对话
2017/11/14 Python
Sanic框架请求与响应实例分析
2018/07/16 Python
Centos下实现安装Python3.6和Python2共存
2018/08/15 Python
python opencv实现图像边缘检测
2019/04/29 Python
Python中字符串String的基本内置函数与过滤字符模块函数的基本用法
2019/05/27 Python
Python读取csv文件实例解析
2019/12/30 Python
无需压缩软件,用python帮你操作压缩包
2020/08/17 Python
Python获取android设备cpu和内存占用情况
2020/11/15 Python
深入解析HTML5的IndexedDB索引数据库
2015/09/14 HTML / CSS
Lands’ End官网:经典的美国生活方式品牌
2016/08/14 全球购物
英国赛车、汽车改装和摩托车零件购物网站:Demon Tweeks
2018/10/29 全球购物
电子商务专业实习生自我鉴定
2013/09/24 职场文书
2014小学植树节活动总结
2014/03/10 职场文书
电影小兵张嘎观后感
2015/06/03 职场文书
婚礼嘉宾致辞
2015/07/28 职场文书
插件导致ECharts被全量引入的坑示例解析
2022/09/23 Javascript