人生苦短,我用 Python
前文传送门:
小白学 Python 爬虫(1):开篇
小白学 Python 爬虫(2):前置准备(一)基本类库的安装
小白学 Python 爬虫(3):前置准备(二)Linux基础入门
小白学 Python 爬虫(4):前置准备(三)Docker基础入门
小白学 Python 爬虫(5):前置准备(四)数据库基础
小白学 Python 爬虫(6):前置准备(五)爬虫框架的安装
小白学 Python 爬虫(7):HTTP 基础
小白学 Python 爬虫(8):网页基础
小白学 Python 爬虫(9):爬虫基础
小白学 Python 爬虫(10):Session 和 cookies
小白学 Python 爬虫(11):urllib 基础使用(一)
小白学 Python 爬虫(12):urllib 基础使用(二)
小白学 Python 爬虫(13):urllib 基础使用(三)
小白学 Python 爬虫(14):urllib 基础使用(四)
小白学 Python 爬虫(15):urllib 基础使用(五)
小白学 Python 爬虫(16):urllib 实战之爬取妹子图
小白学 Python 爬虫(17):Requests 基础使用
小白学 Python 爬虫(18):Requests 进阶操作
前面两篇我们介绍了 Requests 的使用,原本是想再来一个实战的,正准备搞事情的时候想起来上次实战还给自己挖了一个坑, Xpath 还没介绍,还是乖乖的先介绍解析库吧。
XPath ,全称 XML Path Language ,即 XML 路径语言,它是一门在 XML 文档中查找信息的语言。它最初是用来搜寻 XML 文档的,但是它同样适用于 HTML 文档的搜索。
首先,还是敬上 Xpath 的官方网站:https://www.w3.org/TR/xpath/all/ 。
其次,再敬上两个还不错的学习地址:
w3school:https://www.w3school.com.cn/xpath/index.asp
菜鸟教程:https://www.runoob.com/xpath/xpath-tutorial.html
下面列出了最有用的路径表达式:
注意,在使用 Xpath 之前,需要先确保安装好 lxml 库,如果没有安装,可以参考前面的前置准备进行安装。
首先需要引入 lxml 库的 etree 模块,接着引入 Requests 模块,小编这里直接以自己的博客站用作示例。
结果如下:
可以看到结果是成功爬取,这里我们首先使用 requests 获取首页的源代码 byte 数据流,接着使用 decode() 进行解码,解码后将字符串传入 etree.HTML() 构建了一个 lxml.etree._Element 对象,接着我们对这个对象做了 tostring() 转换字符串并且进行打印。
注意: 这里使用 tostring() 进行转化字符串的时候,一定需要添加参数 encoding ,否则中文将会显示为 Unicode 编码。
我们构建完成了 Element 对象,接着我们就可以开始愉快的 Xpath 学习了。
我们会用 开头的 XPath 规则来选取所有符合要求的节点。示例(依然采用上面的 html ):
结果如下:
结果太长仅截取部分。
这里使用 * 代表匹配所有节点,也就是整个 HTML 文本中的所有节点都会被获取。可以看到,返回形式是一个列表,每个元素是 Element 类型,其后跟了节点的名称,如 html 、 head 、 meta 等,所有节点都包含在列表中了。
当然,在这里匹配也可以指定节点的名称,例如获取所有的 meta 节点:
结果如下:
这里要选取所有 meta 节点,可以使用 ,然后直接加上节点名称即可,调用时直接使用 方法即可。由于返回的是一个列表,所有要获取特定的某个 meta 的时候,可以直接在 [] 中加索引,例如 。
获取子节点一般可以使用 或者 来获取子节点或者孙子节点。
比如现在想获取所有的文章内容的块,如下:
红框所标识的内容,可以看到 DOM 结构为 下面的 ,那么这个语句可以这么写:
结果如下:
此处的 是用于获取子节点,如果想要获取孙子节点,如 下面的
和 来查找子节点,那么肯定有语法可以查找父节点,不然只能向下查询不能向上查询就有点就有点太傻了。
来实现的,比如我们先找到一篇文章的图片,现在要向上查找它的 ,如下图:
属性为 的 ,然后获取它的父节点 ,并且打印他的 属性,代码如下:
。
符号进行属性过滤。
- 苹果手机充不进电是什么原因手机充不上电是什么原因「苹果手机充不进电是什么原因」
- 高考考场分布图来了!还要注意这些……手机带「高考考场分布图来了!还要注意这些……」
- 荣耀X50i+和荣耀X50i配置对比详解,哪款更值得入手?手机配置对比「荣耀X50i+和荣耀X50i配置对比详解,哪款更值得入手?」
- 云电脑教程:怎么用云电脑手机玩游戏?手机云电脑「云电脑教程:怎么用云电脑手机玩游戏?」
- 至尊贵族奢华 诺基亚8800A奢华6300元诺基亚8800手机「至尊贵族奢华 诺基亚8800A奢华6300元」
- 手机卡丢了怎么办电信卡不用了呢怎么注销电信手机卡怎么注销「手机卡丢了怎么办电信卡不用了呢怎么注销」
- 华为matex使用的是什么系统?华为手机是什么系统「华为matex使用的是什么系统?」
- 小米6手机通话录音在哪里?小米手机通话录音在哪里找「小米6手机通话录音在哪里?」
- 华为手机adb驱动工具华为手机adb驱动工具v1.3 官方华为手机驱动「华为手机adb驱动工具华为手机adb驱动工具v1.3 官方」
- 业务营销指南针炒股软件手机版「业务营销」
- 如何有效清理手机存储空间不足的问题与技巧手机空间不足「如何有效清理手机存储空间不足的问题与技巧」
- 看微信伤眼?这个小妙招让你轻松告别用眼疲劳!手机字体大小怎么调「看微信伤眼?这个小妙招让你轻松告别用眼疲劳!」
- 华为Nova11Ultra微信怎么分身应用华为手机微信分身怎么弄「华为Nova11Ultra微信怎么分身应用」
- vivo手机频繁死机如何强制重启vivo手机怎么强制关机「vivo手机频繁死机如何强制重启」
- 技术贴|为什么我播放不了5.1环绕声手机党「技术贴|为什么我播放不了5.1环绕声」
- 4个比较靠谱的副业,每月养活自己绰绰有余手机副业「4个比较靠谱的副业,每月养活自己绰绰有余」
- [科普]手机可以这样消毒!手机消毒「[科普]手机可以这样消毒!」
- oppo手机卡读不出来是怎么回事手机不读卡怎么回事「oppo手机卡读不出来是怎么回事」
- 苹果手机使用测距离的具体操作步骤苹果手机怎么测量尺寸「苹果手机使用测距离的具体操作步骤」
- Java SE Development Kit 20(JDK20) v20.0.2 官方最新正式版 win64java下载手机版「Java SE Development Kit 20(JDK20) v
- 1001手机镀膜是真的吗?膜结手机纳米防护新趋势手机膜「手机镀膜是真的吗?膜结手机纳米防护新趋势」
- 1002手机数据讯捷恢复精灵手机数据恢复精灵「手机数据讯捷恢复精灵」
- 1003是继续革命?还是继续改革?——丑牛老师《却道天凉好个秋》的灵魂拷问
- 1004中资美元债 | 12月出险房企境外债务安排一览
- 1005红米手机掉水里了怎么办手机掉水里怎么办「红米手机掉水里了怎么办」
- 1006华为手机哪款性价比高 华为手机哪款质量好华为手机哪一款最好「华为手机哪款性价比高 华为手机哪款质量好」
- 1007微信3.9.5测试版上线,新增“锁定”功能手机微信「微信3.9.5测试版上线,新增“锁定”功能」
- 1008手机发热是怎么回事 手机发烫如何解决及原因【详解】手机热「手机发热是怎么回事 手机发烫如何解决及原因【详解】」
- 1009深圳外地车牌限行2023