Python手记-9:Python LXML库XPath的爬取晋江书目

目录

1. lxml库

1.1 XPath简介

1.2 XPath属性匹配

1.3 节点轴选择

2. 使用XPath爬取书单


1. lxml库

lxml是功能最丰富且易于使用的库,用于处理Python语言中的XML和HTML,还可实现WEB爬取,简言之主要功能是解析和提取 HTML/XML 数据,官文参考:https://lxml.de/index.html,完整的PDF文档下载链接https://lxml.de/lxmldoc-4.5.0.pdf,但是阅读起来……em……怪自己不够聪明的样子。

Linux下安装lxml库:[root@chengyu ~]# pip3 install lxml

1.1 XPath简介

XPath全称XML Path Language,即XML路径语言,可以快速的在XML和HTML文档中搜索特定元素以及节点信息数据,XPath的主要目的是解决XML和JSON树的节点,XPath 提供超过 100 个内建的函数,用于字符串值、数值、日期和时间比较、节点和 QName 处理、序列处理、逻辑值等等,官文参考https://www.w3.org/TR/xpath/all/

XPath 有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点,XPath 使用路径表达式在 XML 文档中选取节点,节点是通过沿着路径或者 step 来选取的,常用的规则如下(本节理论部分参考《Python 3 网络爬虫开发实战》和https://www.runoob.com/xpath/xpath-tutorial.html):

表达式 描述
nodename 选取此节点的所有子节点
/ 从根节点选取
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
. 选取当前节点
.. 选取当前节点的父节点
@ 选取属性

下面以给出路径表达式的一些实例:

路径表达式 结果
booklist 选取booklist元素的所有子节点。
/booklist

选取根元素booklist。

注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径!

booklist/book 选取属于booklist的子元素的所有book元素。
//book 选取所有book子元素,而不管它们在文档中的位置。
booklist//book 选择属于booklist元素的后代的所有book元素,而不管它们位于booklist之下的什么位置。
//@align 选取名为align的所有属性。

所有节点、指定节点、子节点、父节点获取案例:

# -*- coding: utf-8 -*-
# @Author : ChengYu
# @File : lxml_xpath.py
# @Project: Python Notes
# @Time : 2020/5/6 17:23:39

from lxml import etree
text = '''
<tr>
<td align="left"><a href="oneauthor.php?authorid=1322620" target="_blank">墨香铜臭</a></td>
<td align="left"><a href="onebook.php?novelid=3200611" target="_blank" title="简介:为你,所向披靡!标签:">天官赐福</a></td>
<td align="center">原创-纯爱-架空历史-爱情</td>
<td align="center">轻松</td>
<td align="center"><font color="red">已完成</font></td>
<td align="right">1144742</td>
<td align="right">32416696320</td>
<td align="center">2017-06-16 18:01:18</td>
</tr>
'''
html = etree.HTML(text)
res = html.xpath('//*')  # 所有节点获取
res_td = html.xpath('//td')  # 指定节点获取
res_td_a = html.xpath('//td/a')  # 子节点获取
res_up = html.xpath('//a[@href="oneauthor.php?authorid=1322620"]/parent::*/@align')  # 获取父节点
print(res)
print(res_td)
print(res_td[1])
print(res_td_a)
print(res_up)

“Run”结果:

G:\Python3.8.2\python.exe "G:/pycharm/Python Notes/lxml_xpath.py"
[<Element html at 0x246a0deccc0>, <Element body at 0x246a11081c0>, <Element tr at 0x246a1108240>, <Element td at 0x246a1108300>, <Element a at 0x246a1108340>, <Element td at 0x246a11083c0>, <Element a at 0x246a1108400>, <Element td at 0x246a1108440>, <Element td at 0x246a1108480>, <Element td at 0x246a1108380>, <Element font at 0x246a11084c0>, <Element td at 0x246a1108500>, <Element td at 0x246a1108540>, <Element td at 0x246a1108580>]
[<Eleme
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值