美文网首页
Xpath表达式及简单应用

Xpath表达式及简单应用

作者: 清风徐来_简 | 来源:发表于2019-04-23 21:42 被阅读0次

一、常用xpath表达式

  • 属性定位:
#找到class属性值为btn的div标签
//div[@class="btn"]
  • 层级&索引定位:
#找到class属性值为song的div的直系子标签ul下的第二个子标签li下的直系子标签a
//div[@class="song"]/ul/li[2]/a
  • 逻辑运算:
#找到href属性值为空且class属性值为music的a标签
//a[@href="" and @class="music"]
  • 模糊匹配:
//div[contains(@class, "ng")]
//div[starts-with(@class, "so")]
  • 取文本:
# /表示获取某个标签下的文本内容
# //表示获取某个标签下的文本内容和所有子标签下的文本内容
//div[@class="song"]/p[1]/text()
//div[@class="music"]//text()

# 提取div里的所有文字,深层嵌套的全部文字
data = selector.xpath('//div[@id="test3"]')[0]
info = data.xpath('string(.)')
  • 取属性:
//div[@class="music"]//li[2]/a/@href

二、python使用xpath表达式的步骤

1.下载:pip install lxml
2.导包:from lxml import etree
3.将html文档或者xml文档转换成一个etree对象,然后调用对象中的方法查找指定的节点
  3.1 本地文件:tree = etree.parse(文件名)
                tree.xpath("xpath表达式")
  3.2 网络数据:tree = etree.HTML(网页内容字符串)
                tree.xpath("xpath表达式")

三、案例

import requests
from lxml import etree

url = 'http://www.haoduanzi.com/category-10_2.html'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36',
}
url_content = requests.get(url, headers=headers).text
# 使用xpath对url_conten进行解析
# 使用xpath解析从网络上获取的数据
tree = etree.HTML(url_content)
# 解析获取当页所有段子的标题
title_list = tree.xpath('//div[@class="log cate10 auth1"]/h3/a/text()')

ele_div_list = tree.xpath('//div[@class="log cate10 auth1"]')

text_list = []  # 存储段子的文本内容
for ele in ele_div_list:
    # 段子的文本内容
    text_list = ele.xpath('./div[@class="cont"]//text()')
    # list列表中的文本内容全部提取到一个字符串中
    text_str = str(text_list)
    # 字符串形式的文本内容放置到text_list列表中
    text_list.append(text_str)
print(title_list)
print(text_list)
  • 案例二:爬取boss直聘的岗位信息
import requests
from lxml import etree


job = input('enter a job:')
url = 'https://www.zhipin.com/job_detail/?'
param = {
    'query': job
}
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36'
}


response = requests.get(url=url, params=param, headers=headers)
page_text = response.text  # (【1,获取网络页面】)

# 解析:
# 1.获取所有岗位的链接(【2,将网页html实例化成一个tree对象】)
tree = etree.HTML(page_text)
li_list = tree.xpath('//div[@class="job-list"]/ul/li')  # (【3,用tree.xpath方法解析筛选想要的部分】)
# 只用Element类型的对象可以调用xpath方法
for li in li_list:
    job_url = li.xpath("./div/div[1]/h3/a/@href")[0]  # .li对象表示的局部页面内容
    job_url = "https://www.zhipin.com" + job_url

    # 对job_url发起请求,获取岗位对应的详情页面(又重新获取一个新的网络页面)
    secondPage_text = requests.get(url=job_url, headers=headers).text

    tree = etree.HTML(secondPage_text)
    # 解析岗位名称
    jobName = tree.xpath('//div[@class="info-primary"]/div[2]/h1/text()')[0]
    salary = tree.xpath('//div[@class="info-primary"]/div[2]/span/text()')[0].strip('\n\t')
    detail = tree.xpath('//div[@class="info-primary"]/p//text()')[0]
    company = tree.xpath('//div[@class="info-company"]/h3/a/text()')[0]
    jobDesc = tree.xpath('//div[@class="detail-content"]/div[1]/div//text()')[0]

    # 持久化存储

相关文章

  • Xpath表达式及简单应用

    一、常用xpath表达式 属性定位: 层级&索引定位: 逻辑运算: 模糊匹配: 取文本: 取属性: 二、pytho...

  • 利用Xpath提取HTML节点

    目录 什么是Xpath? 常见的Xpath中节点及节点间的关系 Xpath路径表达式(节选) 2018.3.28更...

  • JSONPath入门及测试

    JSONPath入门 JSONPath - 是xpath在json的应用,是参照xpath表达式来解析XML文档的...

  • xpath使用笔记

    xpath学习笔记 xpath简介 xpath 用于在XML文档中通过元素和属性进行导航xpath 使用路径表达式...

  • XPath

    XPath 简介 什么是 XPath?XPath 使用路径表达式在 XML 文档中进行导航XPath 包含一个标准...

  • xpath-函数的使用

    继上篇xpath使用后,接下来简单的就爬虫相关方面的关于xpath函数的使用! 1.xpath函数应用场景: 在爬...

  • xpath和Css定位总结

    Xpath转Css写法图 Xpath等价于css的一些写法 Xpath路径表达式CSS选择器表达式只通过绝对路径、...

  • 爬虫数据筛选

    目录清单 正则表达式提取数据 正则表达式案例操作 Xpath提取数据 Xpath案例操作 BeautifulSou...

  • 爬虫处理之结构化数据操作

    目录清单 正则表达式提取数据 正则表达式案例操作 Xpath提取数据 Xpath案例操作 BeautifulSou...

  • 爬虫处理之结构化数据操作

    目录清单 正则表达式提取数据 正则表达式案例操作 Xpath提取数据 Xpath案例操作 BeautifulSou...

网友评论

      本文标题:Xpath表达式及简单应用

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