美文网首页
xPath语法

xPath语法

作者: haokeed | 来源:发表于2019-05-12 15:37 被阅读0次
# 一种在xml文档中导航和选择元素查询语言
# 教程 http://www.w3school.com.cn/xpath/xpath_syntax.asp
# lxml 一种python的xpath解析库
# 安装 pip install lxml
# 最常用的语法
# nodename  选取此节点的所有子节点。
# / 从根节点选取。
# //    从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
# . 选取当前节点。
# ..    选取当前节点的父节点。
# @ 选取属性。

text='''
<?xml version="1.0" encoding="ISO-8859-1"?>

<bookstore>

<book>
  <title lang="eng">Harry Potter</title>
  <price>29.99</price>
</book>

<book>
  <title lang="eng" lang2="eng">Learning XML</title>
  <price>39.95</price>
</book>

</bookstore>
'''

from lxml import etree
root=etree.HTML(text) # 会加上html和body

root.xpath("//.")

# 选择bookstore节点
# 从根节点出发
root.xpath('/html/body/bookstore')

# 从bookstore节点出发
root.xpath("//bookstore")

# 获取book标签 从bookstore节点出发
root.xpath("//bookstore/book")

# 获取标签的属性
root.xpath("//book/title/@lang")

root.xpath("//title/@lang")

# 通过text()获取文本信息
root.xpath("//bookstore/book/title/text()")

# 获取一个标签下的title中的文本信息
root.xpath("//bookstore/book[1]/title/text()") # book[last()] 最后一个  book[last()-1] 倒数第二个

root.xpath("//title[@lang='eng']/text()") # 获取title中lang属性=eng的标签的文本内容

# 多属性条件筛选 or and 
root.xpath("//title[@lang='eng' and @lang2='eng']/text()") # 获取title中lang属性=eng 且 lang2=eng 标签的文本内容
image.png
image.png
image.png
image.png

例子

# 例子
import requests
from lxml import etree

# 获取xml数据
url="https://search.51job.com/list/010000,000000,0000,00,9,99,Java%2520%25E5%25BC%2580%25E5%258F%2591,2,1.html"
res=requests.get(url)
res.encoding='gbk'

# 装载内容为xpath
root=etree.HTML(res.text)

# 利用xpath提取网页信息
# 获取职位名称
position=root.xpath("//p[contains(@class,'t1')]/span/a/@title") # 这里表示class中含有t1就可以
print(position)
print(len(position))

# 去除字符串两边的空格和换行符
position=root.xpath("//p[contains(@class,'t1')]/span/a/text()") # 这里表示class中含有t1就可以
for i in range(len(position)):
    position[i]=position[i].strip() # strip去除两边 lstrip去除左边 rstrip去除右边
print(position)
print(len(position))

# 公司处理
company=root.xpath("//span[@class='t2']/a/@title")
print(company)
print(len(company))

# 地点
addrs=root.xpath("//div[@class='el']/span[@class='t3']/text()")
print(addrs)
print(len(addrs))

# 工资
salary=root.xpath("//div[@class='el']/span[@class='t4']/text()")
print(salary)
print(len(salary))

# 形成表格
from pandas import DataFrame

jobinfo=DataFrame([position,company,addrs,salary]).T
jobinfo.columns=["职位名","公司名","地点","工资"]
jobinfo
image.png
image.png
image.png
image.png

相关文章

网友评论

      本文标题:xPath语法

      本文链接:https://www.haomeiwen.com/subject/oupcaqtx.html