1.XPath
XPath(XML Path Language)是一种在XML文档中查找信息的语言。
XPath的优点:可在XML中查找信息,支持HTML的查找,可通过元素和属性进行导航。
使用时需安装lxml库:pip install lxml
2.XML的树形结构
<?xml version = "1.0" encoding = "UTF-8"?>
<bookstore>
<book>
<title lang = "en">Harry Potter</title>
<author>J K.Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
</bookstore>
3.使用XPath选取节点
表达式 | 描述 |
nodename | 选取此节点的所有子节点 |
/ | 从根节点选择 |
// | 从任意位置选择文档中的节点 |
. | 选择当前节点 |
.. | 选择当前节点的父节点 |
/text() | 获取当前路径下标签的属性值 |
/@xxx | 提取当前路径下标签的属性值 |
|可选符 | //p|//div表示在当前路径下选取所有符合条件的p标签和div标签 |
表达式 | 描述 |
xpath('/body/div[1]') | 选取body下第一个div节点 |
xpath('/body/div[last()]') | 选取body下最后一个div节点 |
xpath('/body/div[last()-1]') | 选取body下倒数第二个div节点 |
xpath('/body/div[position()<3]') | 选取body下前两个div节点 |
xpath('/body/div[@class]') | 选取body下带有class属性的div节点 |
xpath('/body/div[@class="main"]') | 选取body下class属性为main的div节点 |
xpath('/body/div[price>35.00]') | 选取body下price元素大于35的div节点 |
4.获取起点小说网排行榜小说名和作者
import requests
from lxml import etree
url = 'https://www.qidian.com/rank/yuepiao'
#伪装成浏览器
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'}
#发送get请求
resp = requests.get(url,headers)
e = etree.HTML(resp.text) #将str类型转为etree._Element类型
#小说名
names = e.xpath('//div[@class="book-mid-info"]/h2/a/text()')
#作者名
authors =e.xpath('//p[@class="author"]/a[1]/text()')
#压缩,使作者和小说一起展示
for name,author in zip(names,authors):
print(name,":",author)
运行结果:
星门 : 老鹰吃小鸡
明克街13号 : 纯洁滴小龙
大魏读书人 : 七月未时
夜的命名术 : 会说话的肘子
宇宙职业选手 : 我吃西红柿
不科学御兽 : 轻泉流响
术师手册 : 听日
我就是不按套路出牌 : 百分之七
我的基因无限进化 : 青空洗雨
全职艺术家 : 我最白
视死如归魏君子 : 平层
大梦主 : 忘语
复活帝国 : 火中物
从红月开始 : 黑山老鬼
东晋北府一丘八 : 指云笑天道1
深空彼岸 : 辰东
重生之似水流年 : 苍山月
这游戏也太真实了 : 晨星LL
长夜余火 : 爱潜水的乌贼
女主从书里跑出来了怎么办 : 镭射瓶