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

一、正则表达式

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

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

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

二、BeautifulSoup

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

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

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

三、Lxml

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

Xpath

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

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

四、CSS

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

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 编写的。下表总结了每种抓取方法的优缺点。

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

六、总结

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

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

本文标题: Python网络爬虫四大选择器用法原理总结

本文地址: http://www.cppcns.com/jiaoben/python/315063.html

python爬虫哪个选择器好用_Python网络爬虫四大选择器用法原理总结相关推荐

  1. python网络爬虫网易云音乐下载_python网络爬虫爬取网易云音乐

    #爬取网易云音乐 url="https://music.163.com/discover/toplist" #歌单连接地址 url2 = 'http://music.163.com ...

  2. python 爬虫解决登录验证问题_python网络爬虫的简单实践——解决无验证模拟登陆问题...

    正文开始以前先唠叨几句,一直以来都是自己在网络各大论坛上向大佬们学习东西,如今因为疫情困在家里写毕设,闲余之时也瞎捣鼓了一下,于是想在这里写一点东西,算是自己学习的一个笔记,再一个就是发现网上的教程质 ...

  3. python网络爬虫与信息提取北京理工大学_Python网络爬虫与信息提取(一)

    Reference: 第一周 网络爬虫之规则 单元1:Requests库入门 1-1 Requests库的安装 1-2 Requests库的get()方法 1-3 爬取网页的通用代码框架 1-4 HT ...

  4. python如何爬有道翻译_Python网络爬虫(八) - 利用有道词典实现一个简单翻译程序...

    目录: 1.爬虫前的分析 因为要实现有道翻译的翻译功能,就需要找到它的接口,打开审查元素,来到网络监听窗口(Network),查看API接口. 我们可以找到有道翻译的API接口,同时是以Post方式提 ...

  5. python网络爬虫方向的第三方库_Python网络爬虫中常用第三方库总结

    python对于爬虫的编写已经是相当的友好了,不过除了利用requests库或者scrapy框架之外,有一些库还需要我们知道,以便于我们更熟练.便捷的完成目标数据的爬取,接下来我就总结一下我认为在爬虫 ...

  6. python爬取去哪儿网_python网络爬虫(12)去哪网酒店信息爬取

    目的意义 爬取某地的酒店价格信息,示例使用selenium在Firefox中的使用. 来源 少部分来源于书.python爬虫开发与项目实战 构造 本次使用简易的方案,模拟浏览器访问,然后输入字段,查找 ...

  7. python网络爬虫案例_Python网络爬虫案例实战

    第1章 爬虫网络概述 1.1 HTTP基本原理 1.1.1 URL和URL 1.1.2 超文本 1.1.3 HTTP和HTTPS 1.1.4 HTTP请求过程 1.1.5 请求 1.1.6 响应 1. ...

  8. python sub 不区分大小写_Python网络爬虫入门篇

    1. 预备知识 学习者需要预先掌握Python的数字类型.字符串类型.分支.循环.函数.列表类型.字典类型.文件和第三方库使用等概念和编程方法. Python入门篇:https://www.cnblo ...

  9. python网络爬虫基础知识_Python网络爬虫基础知识

    一.网络爬虫 网络爬虫又被称为网络蜘蛛,我们可以把互联网想象成一个蜘蛛网,每一个网站都是一个节点,我们可以使用一只蜘蛛去各个网页抓取我们想要 的资源.举一个最简单的例子,你在百度和谷歌中输入'Pyth ...

最新文章

  1. Oracle通用分页包
  2. linux zabbix_agentd命令 监控服务器参数 简介
  3. Hibernate的命名查询(NamedQuery)
  4. JavaScipt30(第三个案例)(主要知识点:css变量)
  5. BeanUtils组件
  6. python 安装虚拟环境virtualenv
  7. git-对比不同-版本与文件的对比,版本与版本的对比
  8. 一、android XML资源文件详解 —— 从物理上分析
  9. PM Basic Skill---project execute step
  10. 带你彻底明白 Android Studio 打包混淆
  11. js遍历list对象集合_Mybatis的最基本用法,遍历集合List和数组Array
  12. linux打印机pdf,在Deepin系统下安装CPUS-PDF虚拟PDF打印机的方法
  13. Android应用测试篇
  14. STM32下移植UCOSIII
  15. java se runtime environment 6.0_Java SE Runtime Environment v6.0 Update 16
  16. Docker07:打包部署前端项目
  17. wpf 直播视频播放器技术实现
  18. 怎样将kux格式转换mp4?高效简单的技巧你要懂
  19. maven shade 插件的小插曲
  20. 【爬虫】Scrapy爬取古风漫画网

热门文章

  1. linux几秒钟同步一次,Linux时间同步配置方法
  2. php如何加密图片,php实现图片加密解密,支持设置密码 (两年后版本!)
  3. windows软链接的建立及删除
  4. 自建CDN Xnign产品指标
  5. openlayers入门开发系列之图层控制
  6. 使用Mybatis Generator结合Ant脚本快速自动生成Model、Mapper等文件的方法
  7. Python基础--环境配置、编码风格、基础概念、基本数据类型(1)
  8. Ubuntu 忘记密码的处理方法
  9. 制作openstack-centos镜像
  10. windos手工扩展分区