题目来源:头歌平台------数据采集与网络爬虫
下述题解均通过测试,如果小伙伴有出现测试不通过的情况,大概是原题出现变化或是编码时出现漏缺,答案仅供参考,祝大家一通百通。

第一关、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 ********** #

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐