# xpath 是在XML文档中搜索内容的一门语言
# html是xml的一个子集
"""
<book>
<id>1</id>
<name>野花遍地香</name>
<price>1.23</price>
<author>
<nick>周大强</nick>
<nick>周芷若</nick>
</author>
</book>
"""
# 安装lxml模块
# pip install lxml -i xxxxxx
# xpath解析
from lxml import etree
xml = """
<book>
<id>1</id>
<name>野花遍地香</name>
<price>1.23</price>
<nick>臭豆腐</nick>
<author>
<nick id="10086">周大强</nick>
<nick id="10010">周芷若</nick>
<nick class="joy">周杰伦</nick>
<nick class="jolin">蔡依林</nick>
<div>
<nick>热热热热热1</nick>
</div>
<span>
<nick>热热热热热2</nick>
</span>
</author>
<partner>
<nick id="ppc">胖胖陈</nick>
<nick id="ppbc">胖胖不陈</nick>
</partner>
</book>
"""
tree = etree.XML(xml)
# result = tree.xpath("/book") # /表示层级关系. 第一个/是根节点
# result = tree.xpath("/book/name")
# result = tree.xpath("/book/name/text()") # text() 拿文本
# result = tree.xpath("/book/author//nick/text()") # // 后代
# result = tree.xpath("/book/author/*/nick/text()") # * 任意的节点. 通配符(会儿)
result = tree.xpath("/book//nick/text()")
print(result)
#######################################################################3
from lxml import etree
tree = etree.parse("b.html")
# result = tree.xpath('/html')
# result = tree.xpath("/html/body/ul/li/a/text()")
# result = tree.xpath("/html/body/ul/li[1]/a/text()") # xpath的顺序是从1开始数的, []表示索引
# result = tree.xpath("/html/body/ol/li/a[@href='dapao']/text()") # [@xxx=xxx] 属性的筛选
# print(result)
# ol_li_list = tree.xpath("/html/body/ol/li")
#
# for li in ol_li_list:
# # 从每一个li中提取到文字信息
# result = li.xpath("./a/text()") # 在li中继续去寻找. 相对查找
# print(result)
# result2 = li.xpath("./a/@href") # 拿到属性值: @属性
# print(result2)
#一次性拿a标签下的所有href的值
print(tree.xpath("/html/body/ul/li/a/@href"))
print(tree.xpath('/html/body/div[1]/text()'))
print(tree.xpath('/html/body/ol/li/a/text()'))
###################################################################3
# 拿到页面源代码
# 提取和解析数据
import requests
from lxml import etree
url = "https://beijing.zbj.com/search/f/?type=new&kw=saas"
resp = requests.get(url)
# print(resp.text)
# 解析
html = etree.HTML(resp.text)
# 拿到每一个服务商的div
divs = html.xpath("/html/body/div[6]/div/div/div[2]/div[5]/div[1]/div")
for div in divs: # 每一个服务商信息
price = div.xpath("./div/div/a[1]/div[2]/div[1]/span[1]/text()")[0].strip("¥")
# title = "saas".join(div.xpath("./div/div/a[1]/div[2]/div[2]/p/text()"))
# com_name = div.xpath("./div/div/a[2]/div[1]/p/text()")[0]
# location = div.xpath("./div/div/a[2]/div[1]/div/span/text()")[0]
print(price)
5_xpath解析
于 2022-03-09 08:27:48 首次发布