题目来源:头歌平台------数据采集与网络爬虫
下述题解均通过测试,如果小伙伴有出现测试不通过的情况,大概是原题出现变化或是编码时出现漏缺,答案仅供参考,祝大家一通百通。
第一关、XPath路径表达式
1.选取bookstore元素的所有子节点
********** Begin *********
bookstore
*********** End **********
2.选取所有拥有名为 lang 的属性的 title 元素
********** Begin *********
//title[@lang]
*********** End **********
3.选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性和值为good的class属性
********** Begin *********
//title[@lang="eng" and @class="good"]
*********** End **********
4.选取属于 bookstore 子元素的book元素下的所有文本内容
********** Begin *********
/bookstore/book/text()
*********** End **********
5.选取属于 bookstore 子元素的第一个 book 元素
********** Begin *********
/bookstore/book[1]
*********** End **********
第二关、XPath 轴定位
1.选取所有属于当前节点的子元素的 book 节点
********** Begin *********
child::book
*********** End **********
2.选取当前节点的 lang 属性
********** Begin *********
attribute::lang
*********** End **********
3.选取当前节点的所有 price 孙节点
********** Begin *********
child::*/child::price
*********** End **********
第三关、XPath 解析
# 导入lxml库
from lxml import etree
# 读取lll.html文件并转化为元素树对象
parse = etree.HTMLParser(encoding='utf-8')
tree = etree.parse('src/step3/lll.html', parse)
# 补充xpath表达式,获取所有书的名称
# ********** Begin ********* #
print(tree.xpath('//book/title/text()'))
# *********** End ********** #
# 补充xpath表达式,获取所有书的价格
# ********** Begin ********* #
print(tree.xpath('//book/price/text()'))
# *********** End ********** #
# 填写代码, 获取价格低于30的书名
# ********** Begin ********* #
print(tree.xpath('//book[price < "30"]/title/text()')[0])
# *********** End ********** #