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

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

一、正则表达式

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

rcjomegdhj0.jpg

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

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

二、BeautifulSoup

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

yqsgvr5occd.jpg

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

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

三、Lxml

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

o1pzrhbcd0t.jpg

Xpath

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

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

四、CSS

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

dehqnc1wp1o.jpg

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

lbixsuumqqj.jpg

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

六、总结

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/543377.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

eclipse配置python开发环境_eclipse怎样搭建Python开发环境

eclipse通过pydev插件也是可以搭建出Python开发环境的。今天小编我就来给大家分享一下eclipse怎样搭建Python开发环境的经验哦。 工具/原料 电脑 eclipse Python pydev插件链接:https://pan.baidu.com/s/1VIK5H_ZbC6DsOlNwy2OwLw 密码:kg8a 方法/步骤 1 …

android光照传感器,详解 android 光线传感器 light sensor的使用

调用anroid的光线传感器使用。实现效果图:MainActivity.Javapackage hk.ust.cse.comp107x.ligthsensor;import android.content.Context;import android.hardware.Sensor;import android.hardware.SensorEvent;import android.hardware.SensorEventListener;import …

hive中实现行转列_漫谈数据仓库之拉链表(原理、设计以及在Hive中的实现)

全文由下面几个部分组成:先分享一下拉链表的用途、什么是拉链表。通过一些小的使用场景来对拉链表做近一步的阐释,以及拉链表和常用的切片表的区别。举一个具体的应用场景,来设计并实现一份拉链表,最后并通过一些例子说明如何使用…

算法导论:堆排序

堆 堆是一个数组,它可以被看成一个近似的完全二叉树,树上的每一个结点对应数组中的一个元素。除去最底层外,该树是完全充满的,而且从左到右填充。 用数组A表示堆,从数组第1个元素开始,数组中第i&#xff08…

扩展坞可以把手机投到显示器吗_解锁4K 60Hz毕亚兹USB Type-C扩展坞体验

现在很多白领办公、学生上网课都会使用到笔记本电脑,尤其是近两年的轻薄本,为了追求轻量化,砍掉了原本很多的接口,转而使用Type-C来代替,从而导致接驳外设的时候非常不方便。特别是那种只给了一个USB标准接口的电脑&am…

Android view.settran,Android RecyclerView从入门到玩坏

目录前言基础使用分隔线点击监听搭配CardView更丰富的条目增删条目快速添加视图让RecyclerView支持复杂视图最后前言RecyclerView在Android界面开发当中是很重要的, 那掌握它也是很必要的. 但是有些时候会觉得它很厚重, 这里就从RecyclerView的基础一直说到扩展, 让你把Recycle…

python提取英文单词 每行显示一个_使用python对文件中的单词进行提取

由于需要使用一个纯单词组成的文件,在网上下载到了一个存放单词的文件,但是里面有中文的解释,那就需要做一下提取了。 文本的形式如下:所见即所得,这个文本是有规律的,每个单词为一行,紧接着下一…

微服务feignclient_搞微服务用阿里开源的 Nacos 真香啊

本文适合有 Java 基础知识的人群本文作者:HelloGitHub-秦人HelloGitHub 推出的《讲解开源项目》系列,今天给大家带来一款开源 Java 版可以实现动态服务发现,配置和服务管理平台——Nacos,它是阿里巴巴团队推出的,符合国…

华为mate40搭载鸿蒙,华为mate40搭载鸿蒙还是EMUI11,答案来了

原标题:华为mate40搭载鸿蒙还是EMUI11,答案来了今年秋季苹果要发布首款5G版iPhone手机iPhone12,搭载A14处理器首发iOS14系统。而华为也要发布新款旗舰手机华为mate40系列手机,搭载华为麒麟1020处理器,首发EMUI11系统。…

称重管理系统如何修改重量_无人值守称重系统硬件配置和作用

1. 视频监控抓拍系统软件配合设摄像头在保存数据的同时抓拍,防止车辆或者人为的舞弊行为2. 红外定位在地磅否的两侧各安装一对红外对射,通过信号线连接到开关,当红外的光束被阻挡时,红外定位系统将自动发出警告,禁止称…

在建工程直接费用化_威县垃圾发电在建项目被罚后续:现已整改

新京报讯(记者 李大伟)3月11日,针对此前因环保问题被处罚一事,威县垃圾发电在建项目(下称威县项目)的项目方宁夏电力建设工程公司相关负责人罗中辉表示:目前,该项目已整改完成。“所有道路上的浮土已彻底清扫,所有的裸…

centos 断电重启后,文件系统损坏修复

为什么80%的码农都做不了架构师?>>> centos 断电重启后,由于文件系统损坏,无法正常开机,常常出现“an error occurred during the file system check” 提示,就是说系统文件损坏啦,这时候要用f…

如何对聚类结果进行分析_如何更合理地给聚类结果贴标签——由一个挖掘学生用户的项目说开去...

”聚类一时爽,判断两行泪“——这是解决任何一个无监督问题时都会面临的苦恼:最近接到了一个无监督问题的项目——给一群无标签的结构化数据贴标签,随后我便立即展开了工作,首先开始查阅资料,然后把EDA(数据探索) 、特…

查看文件二进制编码_小白也能学会系列:用python文件读写代码实例!(简单案例)...

前言:不久之前,从一个.dat文件中读取波形数据,通过一个自编码网络进行异常检测。所以特意在此写出来,咱从最基础的文件读写开始吧。先说数据,是一个int16型的数组。说是数组,但是读取也并不简单。众所周知&…

stm32 ucosii消息队列 串口_STM32F1的UART4串口配置

注意是UART4,不是USART4在stm32中UART和USART是不相同的USART是通用同步/异步串行接收/发送器UART是通用异步收发传输器简单区分同步和异步就是看通信时需不需要对外提供时钟输出,我们平时用的串口通信基本都是 UART。USART支持同步模式,因此…

程序员微信头像_微信头像暴露了你的层次:层次越低的人,越喜欢用这些头像...

这个话题,原本很轻松。但往细里看,它背后玄机很多。许多未知理论与认知可能性,往往就在不为人知的拐角处。卞之琳有一首诗:你站在桥上看风景,看风景的人在楼上看你。明月装饰了你的窗子,你装饰了别人的梦。…

华为鸿蒙系统正式拜拜,从“哄蒙”到“鸿蒙”,现在,正式对华为鸿蒙OS说你好!...

从鸿蒙发布之初一直到现在,很多网友都为鸿蒙出谋划策,毕竟是我们自己的系统,而现在也确实需要一套自研的、成熟的智能操作系统了。再加上鸿蒙万物互联的这个大设想,大家伙确实是很兴奋,同时在这个时代里面,…

英文书《用unreal来学习c++》_用机器学习来概括《哈利波特》,四句话总结一场戏...

毒栗子 发自 凹非寺量子位 出品 | 公众号 QbitAI文章太长读不下去的时候,就想有个TL;DR按钮,用最短的时间,看最关键的部分。要是视频很长不想看,该怎么挑重点食用?一位叫做Sagi Shaier的程序猿,用机器学习给…

什么是负边沿触发_用好示波器必须学会的知识:触发方式

我们先简单回顾下什么是示波器的触发。由于信号无时无刻都在变化,如果一股脑的都把他们显示在示波器上,就会很乱,根本无法让我们看清楚,从而也就无法观察信号来解决问题。考虑到信号大多数时候都是以某种规律周期性出现的&#xf…

html placehonlder属性,HTML input placeholder 属性

HTML placeholder 属性实例 1带有 placeholder 文本的两个输入字段:尝试一下 placeholder 文本也可以指定颜色。实例 2带有 placeholder 文本设置颜色:尝试一下 浏览器支持Internet Explorer 10、Firefox、Opera、Chrome 和 Safari 支持 placeholder 属性…