xpath 解析

  • 模块安装 :

  • pip install lxml

  • xpath的解析原理

    • 实例化一个etree类型的对象,且将页面源码数据加载到该对象中
    • 需要调用该对象的xpath方法结合着不同形式的xpath表达式进行标签定位和数据提取
  • etree对象的实例化

    • etree.parse(fileNane) 加载本地
    • etree.HTML(page_text) 加载网络请求的响应
  • xpath方法返回的永远是一个列表

  • 标签定位

    • 在xpath表达式中最最侧的 / 表示的含义是说,当前定位的标签必须从根节点开始进行定位

    • xpath表达式中最左侧的 // 表示可以从任意位置进行标签定位

    • xpath表达式中非最左侧的 // 表示的是多个层级的意思

    • xpath表达式中非最左侧的 / 表示的是一个层级的意思

    • 属性定位://tagName[@arrtName='value']

    • 索引定位://tagName/li[3]

    • 定位条件可以多个,使用| 分开

      from lxml import etree
      tree = etree.parse('./test.html')
      tree.xpath('/html/head/meta')[0] #绝对路径
      tree.xpath('//meta')[0] #相对路径,将整个页面源码中所有的meta进行定位
      #属性定位
      tree.xpath('//div[@class="song"]')
      #索引定位
      tree.xpath('//div[@class="tang"]/ul/li[3]') #该索引是从1开始 #取文本
      tree.xpath('//p[1]/text()') #取属性
      tree.xpath('//a[@id="feng"]/@href')
      tree = etree.parse('./test.html')
      tree.xpath('/html/head/meta')[0] #绝对路径
      tree.xpath('//meta')[0] #相对路径,将整个页面源码中所有的meta进行定位 #属性定位
      tree.xpath('//div[@class="song"]')
      #索引定位
      tree.xpath('//div[@class="tang"]/ul/li[3]') #该索引是从1开始 #取文本
      tree.xpath('//p[1]/text()')
      tree.xpath('//div[@class="song"]//text()') #取属性
      tree.xpath('//a[@id="feng"]/@href') # 多个条件
      div.xpath('./div[1]/a[2]/h2/text() | ./div[1]/span[2]/h2/text()')[0]
      
    
    
  • 提取数据

    • 取文本:

      • /text():取直系的文本内容
      • //text():取所有的文本内容
    • 取属性直:
      • tag/@attrName
    # 需求:爬取boss的招聘信息
    from lxml import etree
    headers = { # 反扒策略
    'User-Agent':',
    'cookie':''
    }
    url = 'https://www.zhipin.com/job_detail/?query=python%E7%88%AC%E8%99%AB&city=101010100&industry=&position='
    page_text = requests.get(url,headers=headers).text
    #数据解析
    tree = etree.HTML(page_text)
    li_list = tree.xpath('//div[@class="job-list"]/ul/li')
    for li in li_list:
    # 需要将li表示的局部页面源码数据中的相关数据进行提取
    # 如果xpath表达式被作用在了循环中,表达式要以./或者.//开头
    detail_url = 'https://www.zhipin.com'+li.xpath('.//div[@class="info-primary"]/h3/a/@href')[0]
    job_title = li.xpath('.//div[@class="info-primary"]/h3/a/div/tex t()')[0]
    salary = li.xpath('.//div[@class="info-primary"]/h3/a/span/text()')[0]
    company = li.xpath('.//div[@class="info-company"]/div/h3/a/text()')[0]
    #对详情页的url发请求解析出岗位职责
    detail_page_text = requests.get(detail_url,headers=headers).text
    tree = etree.HTML(detail_page_text)
    job_desc = tree.xpath('//div[@class="text"]//text()')
    job_desc = ''.join(job_desc) print(job_title,salary,company,job_desc)
    • 乱码处理

      • 对获取到的内容先编码再转码:

        img_name = img_name.encode('iso-8859-1').decode('gbk')

爬虫-数据解析-xpath的更多相关文章

  1. python爬虫--数据解析

    数据解析 什么是数据解析及作用 概念:就是将一组数据中的局部数据进行提取 作用:来实现聚焦爬虫 数据解析的通用原理 标签定位 取文本或者属性 正则解析 正则回顾 单字符: . : 除换行以外所有字符 ...

  2. 070.Python聚焦爬虫数据解析

    一 聚焦爬虫数据解析 1.1 基本介绍 聚焦爬虫的编码流程 指定url 基于requests模块发起请求 获取响应对象中的数据 数据解析 进行持久化存储 如何实现数据解析 三种数据解析方式 正则表达式 ...

  3. 爬虫-数据解析-bs4

    1.数据解析 解析: 根据指定的规则对数据进行提取 作用: 实现聚焦爬虫 数据解析方式: - 正则表达式 - bs4 - xpath 数据解析的通用原理: 数据解析需要作用在页面源码中(一组html标 ...

  4. python爬虫数据解析的四种不同选择器Xpath,Beautiful Soup,pyquery,re

    这里主要是做一个关于数据爬取以后的数据解析功能的整合,方便查阅,以防混淆 主要讲到的技术有Xpath,BeautifulSoup,PyQuery,re(正则) 首先举出两个作示例的代码,方便后面举例 ...

  5. 03 数据解析-Xpath

    Xpath解析 XPath在Python的爬虫学习中,起着举足轻重的地位,对比正则表达式 re两者可以完成同样的工作,实现的功能也差不多,但XPath明显比re具有优势,在网页分析上使re退居二线. ...

  6. python爬虫数据解析之BeautifulSoup

    BeautifulSoup是一个可以从HTML或者XML文件中提取数据的python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式. BeautfulSoup是python爬虫三 ...

  7. Python网络爬虫数据解析的三种方式

    request实现数据爬取的流程: 指定url 基于request发起请求 获取响应的数据 数据解析 持久化存储 1.正则解析: 常用的正则回顾:https://www.cnblogs.com/wqz ...

  8. 02 爬虫数据解析之re,xpath,beautifulsoup

    一.正则匹配 简单用法演示: 字符: print(re.findall(".","abccc31223dn哈哈")) ### . 匹配除了换行符以外的任意字符, ...

  9. python爬虫数据解析之xpath

    xpath是一门在xml文档中查找信息的语言.xpath可以用来在xml文档中对元素和属性进行遍历. 在xpath中,有7中类型的节点,元素,属性,文本,命名空间,处理指令,注释及根节点. 节点 首先 ...

随机推荐

  1. 大数据时代变局与机遇,BI数字化转型的实战攻略!

    党的十九大报告提出,要推动互联网.大数据.人工智能和实体经济深度融合.更加高效地获取.运用信息,成为企业具有强大竞争力的重要标志.我国企业应牢牢把握历史性机遇,以更加开放的姿态,积极拥抱新经济,积极参 ...

  2. Oracle之单行函数(字符串函数/数字函数/转换函数/日期函数/通用函数)

    虚拟表DUAL介绍: dual是一张虚拟表,只有一行一列,用来构成select的语法规则. Oracle的查询中,必须使用"select 列- from 表"的完整语法,当查询单行 ...

  3. ansible复习笔记_基础-从零到无

    --创建时间:2021年1月25日 --修改时间:2021年3月9日 --作者:飞翔的小胖猪 前言 该文档仅作为作者复习ansible使用,对格式和流程没有做过多的编排和概述.不喜勿喷. 基础 ans ...

  4. POJ2112题解

    题目大意:K个挤奶机,C头牛,每个挤奶机最多可以接待M头牛,各个K,C之间可能有道路连接,要让每个牛都找到挤奶机,求最小的走的路程最远的牛所需走的距离. 思路:首先看到要最小化最大值,所以需要二分.可 ...

  5. JSP文件的上传

    JSP 文件上传 JSP 可以与 HTML form 标签一起使用,来允许用户上传文件到服务器.上传的文件可以是文本文件或图像文件或任何文档. 本章节我们使用 Servlet 来处理文件上传,使用到的 ...

  6. JZ-014-链表中倒数第 K 个结点

    链表中倒数第 K 个结点 题目描述 输入一个链表,输出该链表中倒数第k个结点. 题目链接: 链表中倒数第 K 个结点 代码 /** * 标题:链表中倒数第 K 个结点 * 题目描述 * 输入一个链表, ...

  7. 【转载】深入浅出SQL Server中的死锁

    essay from:http://www.cnblogs.com/CareySon/archive/2012/09/19/2693555.html 简介 死锁的本质是一种僵持状态,是多个主体对于资源 ...

  8. 七天接手react项目-起步

    七天接手react项目-起步 背景 假如七天后必须接手一个 react 项目(spug - 一个开源运维平台),而笔者只会 vue,之前没有接触过 react,此刻能做的就是立刻展开一个"7 ...

  9. php 23种设计模型 - 原型模式

    原型模式(Prototype) 原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 这种模式是实现 ...

  10. PHP底层运行原理简括

    PHP是一种适用于web开发的动态语言.具体点说,就是一个用C语言实现包含大量组件模块的软件框架.是一个强大的UI框架. 简言之:PHP动态语言执行过程:拿到一段代码后,经过词法解析.语法解析等阶段后 ...