from lxml import etree
2 text = '''
3 <div>
4 <ul>
5 <li class = "item-0"><a herf = "link1.html">first item</a></li>
6 <li class = "item-1"><a herf = "link2.html">second item</a></li>
7 <li class = "item-inactive"><a herf = "link3.html">third item</a></li>
8 <li class = "item-1"><a herf = "link4.html">fourth item</a></li>
9 <li class = "item-0"><a herf = "link5.html">fifth item</a></li>
10 </ul>
11 </div>
12 '''
13 html = etree.HTML(text)
14 result = etree.tostring((html))#输出修正后的HTML文本
15 code_all = html.xpath("//*")#选取HTML全部的节点
16 code_li = html.xpath("//li")
17 code_a = html.xpath("//li/a")#选取HTML的li节点的子节点a
18 code_p = html.xpath("//a[@herf = 'link4.html']/../@class")#一直子节点寻找父节点的class属性
19 print(code_p)
20 print(code_li)
21 print("///")
22 print(code_all)
23 print("///")
24 print(code_a)
25 #属性匹配
26 attribute = html.xpath("//li[@class = 'item-0']")
27 print(attribute)
28 #文本获取
29 text = html.xpath("//li/text()")
30 print(text)
31 #属性获取
32 attribute_get = html.xpath("//li/a/@herf")
33 print(attribute_get)
34 #属性多值匹配
35 text1 = """
36 <li class = "li li-fist"><a href = "link.html">first item</a></li>
37 """
38 html1 = etree.HTML(text1)
39 attribute_number = html1.xpath("//li[contains(@class,'li')]/a/text()")
40 print(attribute_number)
41 #多属性匹配
42 text2 = """
43 <li calss = "li li-first" name = "name"><a href = "link.html">first item</a></li>
44 """
45 html2 = etree.HTML(text2)
46 attribute_text2 = html2.xpath("//li[contains(@calss,'li') and @name = 'name']/a/text()")
47 print(attribute_text2)
48 #按序选择
49 """
50 有时候,我们在选择的时候某些属性可能同时匹配了多个节点,但是只想要其中某个节点
51 这是可以利用中括号传入索引的方法获取特定次序的节点
52 """
53 text3 = '''
54 <div>
55 <ul>
<li class = "item-0"><a herf = "link1.html">first item</a></li>
57 <li class = "item-1"><a herf = "link2.html">second item</a></li>
58 <li class = "item-inactive"><a herf = "link3.html">third item</a></li>
59 <li class = "item-1"><a herf = "link4.html">fourth item</a></li>
60 <li class = "item-0"><a herf = "link5.html">fifth item</a></li>
61 </ul>
62 </div>
63 '''
64 html3 = etree.HTML(text3)
65 result = html3.xpath("//li[1]/a/text()")#选取第一个li节点
66 print(result)
67 result = html3.xpath("//li[last()]/a/text()")#选取左后一个li节点
68 print(result)
69 result = html3.xpath("//li[position() < 3]/a/text()")#选取位置小于三的节点
70 print(result)
71 #节点轴选取
72 result = html3.xpath("//li[1]/ancestor::*")#获取所有祖先节点,后跟*表示匹配所有节点
73 print(result)
74 result = html3.xpath("//li[1]/ancestor::div")#获取div这个祖先节点
75 print(result)
76 result = html3.xpath("//li[1]/attribute::*")#获取所有属性
77 print(result)
#运行结果
['item-1']
[<Element li at 0x7f72f489c888>, <Element li at 0x7f72f489c948>, <Element li at 0x7f72f489c9c8>, <Element li at 0x7f72f489ca08>, <Element li at 0x7f72f489ca88>]
///
[<Element html at 0x7f72f489c808>, <Element body at 0x7f72f489c788>, <Element div at 0x7f72f489c748>, <Element ul at 0x7f72f489c848>, <Element li at 0x7f72f489c888>, <Element a at 0x7f72f489c908>, <Element li at 0x7f72f489c948>, <Element a at 0x7f72f489c988>, <Element li at 0x7f72f489c9c8>, <Element a at 0x7f72f489c8c8>, <Element li at 0x7f72f489ca08>, <Element a at 0x7f72f489ca48>, <Element li at 0x7f72f489ca88>, <Element a at 0x7f72f489cac8>]
///
[<Element a at 0x7f72f489c908>, <Element a at 0x7f72f489c988>, <Element a at 0x7f72f489c8c8>, <Element a at 0x7f72f489ca48>, <Element a at 0x7f72f489cac8>]
[<Element li at 0x7f72f489c888>, <Element li at 0x7f72f489ca88>]
[]
['link1.html', 'link2.html', 'link3.html', 'link4.html', 'link5.html']
['first item']
['first item']
['first item']
['fifth item']
['first item', 'second item']
[<Element html at 0x7f72f489cdc8>, <Element body at 0x7f72f489cec8>, <Element div at 0x7f72f489cf48>, <Element ul at 0x7f72f489cf08>]
[<Element div at 0x7f72f489cf48>]
['item-0']

解析库--XPath的更多相关文章

  1. 网页解析库-Xpath语法

    网页解析库 简介 除了正则表达式外,还有其他方便快捷的页面解析工具 如:lxml (xpath语法) bs4 pyquery等 Xpath 全称XML Path Language, 即XML路径语言, ...

  2. Python3编写网络爬虫05-基本解析库XPath的使用

    一.XPath 全称 XML Path Language 是一门在XML文档中 查找信息的语言 最初是用来搜寻XML文档的 但是它同样适用于HTML文档的搜索 XPath 的选择功能十分强大,它提供了 ...

  3. python爬虫基础04-网页解析库xpath

    更简单高效的HTML数据提取-Xpath 本文地址:https://www.jianshu.com/p/90e4b83575e2 XPath 是一门在 XML 文档中查找信息的语言.XPath 用于在 ...

  4. 爬虫之解析库Xpath

    简介 XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言. XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力.起初XPat ...

  5. 爬虫解析库xpath

    # xpath简介 XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言.用于在 XML 文档中通过元素和属性进行导航. XPath基于XM ...

  6. BeautifulSoup与Xpath解析库总结

    一.BeautifulSoup解析库 1.快速开始 html_doc = """ <html><head><title>The Dor ...

  7. (最全)Xpath、Beautiful Soup、Pyquery三种解析库解析html 功能概括

    一.Xpath 解析   xpath:是一种在XMl.html文档中查找信息的语言,利用了lxml库对HTML解析获取数据. Xpath常用规则: nodename :选取此节点的所有子节点 // : ...

  8. 网络爬虫之Selenium模块和Xpath表达式+Lxml解析库的使用

    实际生产环境下,我们一般使用lxml的xpath来解析出我们想要的数据,本篇博客将重点整理Selenium和Xpath表达式,关于CSS选择器,将另外再整理一篇! 一.介绍: selenium最初是一 ...

  9. xpath beautiful pyquery三种解析库

    这两天看了一下python常用的三种解析库,写篇随笔,整理一下思路.太菜了,若有错误的地方,欢迎大家随时指正.......(conme on.......) 爬取网页数据一般会经过 获取信息-> ...

随机推荐

  1. ysoserial Commons Collections3反序列化研究

    0x00 前言 在ysoserial中,官方是没给gadget,这儿经过文章分析我认为的gadget,继承自AbstractTranslate的类被Javassist插桩后返回一个被修改过的templ ...

  2. LeetCode & Binary Search 解题模版

    LeetCode & Binary Search 解题模版 In computer science, binary search, also known as half-interval se ...

  3. taro swiper & scroll tabs

    taro swiper & scroll tabs https://taro-docs.jd.com/taro/docs/components/viewContainer/swiper.htm ...

  4. qt DateTime 计算时间

    qdatetime doc 获取当前时间 QDateTime t1 = QDateTime::currentDateTime(); qDebug() << t1.toString(&quo ...

  5. perl 打印简单的help文档

    更多 PrintHelp.pm #!/usr/bin/perl package PrintHelp; require Exporter; use v5.26; use strict; use utf8 ...

  6. Flutter: 显示&关闭系统叠加层ui

    import 'package:flutter/services.dart'; /// 关闭 SystemChrome.setEnabledSystemUIOverlays([]); /// 显示 S ...

  7. 「NGK每日快讯」12.23日NGK第50期官方快讯!

  8. Mila Fletcher :其实高度自律的人生并没有那么难养成

    在日常生活中,我们经常会发现,不论是学习,考证,工作,都需要坚持付出.但是很多人都没有办法在枯燥的学习过程中持续下去,这通常是因为不够自律导致的.但是尽管大家都知道自律是多么重要,却没有几个人可以真正 ...

  9. LinkedList 的实现原理

    本文为博客园作者所写: 一寸HUI,个人博客地址:https://www.cnblogs.com/zsql/ 简单的一个类就直接说了.LinkedList 的底层结构是一个带头/尾指针的双向链表,可以 ...

  10. Github Packages和Github Actions实践之CI/CD

    概述 Github在被微软收购后,不忘初心,且更大力度的造福开发者们,推出了免费私有仓库等大更新.近期又开放了packages和actions两个大招,经笔者试用后感觉这两个功能配合起来简直无敌. G ...