网络爬虫--Xpath解析(8)

1.网页缺省补全
    def handing(source):
    source = etree.HTML(source)  #etree.parse('文件路径',etree.HTMLParser)
    source = etree.tostring(source)
    source = source.decode('UTF-8') #对网页中缺省的节点进行补全

2.选取所有符合要求的节点
    source.xpath('//dd')
    [<Element dd at 0x59dbf80>, <Element dd at 0x615e350>]
    返回的类型是一个列表,每一个元素都是Element对象

3.选取所有符合要求多子节点
    source.xpath('//dd/a') ## 所有dd界面下面的直接a子节点,注意是直接子节点

4.父节点
   查找父节点可以通过..来完成.
   也可以通哟parent::来获取父节点

5.属性匹配
   可以通过@符号进行属性过滤
   例如: li[@class="item1"]  选取带item1类的li标签

6.文本的获取
   Xpath中使用text()方法获取节点中的文本
   //dd/a/text() #获取所有dd标签下子标签a中的内容
   ##自动补正的标签的尾标签都会换行

7.属性的获取
  //dd/a/@herf
  ##获取dd标签下的a标签中的href属性

8.属性多值匹配
  用于某个节点的某个属性有多个值
  通过contains()方法。第一个参数传入属性名称,第二个参数传入属性值
  //li[contains(@class,"li")]/a/text()

9.多属性的匹配
  用于根据多个属性确定一个节点
  通过使用运算符and连接
  //li[contains(@class,"li") and @name="item"]/a/text()

|  计算两个节点集    //book | //cd              返回所有拥有 book 和 cd 元素的节点集
+  加法         6 + 4                      10
-  减法         6 - 4                      2
*  乘法         6 * 4                      24
div    除法         8 div 4                    2
=  等于         price=9.80                 如果 price 是 9.80,则返回 true。如果 price 是 9.90,则返回 false
!= 不等于            price!=9.80                    如果 price 是 9.90,则返回 true。如果 price 是 9.80,则返回 false。
<  小于         price<9.80                  如果 price 是 9.00,则返回 true。如果 price 是 9.90,则返回 false。
<= 小于或等于      price<=9.80                    如果 price 是 9.00,则返回 true。如果 price 是 9.90,则返回 false。
>  大于         price>9.80                 如果 price 是 9.90,则返回 true。如果 price 是 9.80,则返回 false。
>= 大于或等于      price>=9.80                    如果 price 是 9.90,则返回 true。如果 price 是 9.70,则返回 false。
or 或              price=9.80 or price=9.70    如果 price 是 9.80,则返回 true。如果 price 是 9.50,则返回 false。
and    与              price>9.00 and price<9.90  如果 price 是 9.80,则返回 true。如果 price 是 8.50,则返回 false。
mod    计算除法的余数    5 mod 2                        1

10.排序选择
用于利用中括号传入索引的方法获得特定次序的节点
//li[1]/a/text()  ##获取第一个li节点下的a标签中的文本
//li[last()]/a/text()  ##获取最后一个li节点下的a标签中的文本
//li[position()<3]/a/text()  ##获取前三个li节点下的a标签中的文本

11.节点轴选择
轴名称                 结果
ancestor            选取当前节点的所有先辈(父、祖父等)。
ancestor-or-self    选取当前节点的所有先辈(父、祖父等)以及当前节点本身。
attribute           选取当前节点的所有属性。
child               选取当前节点的所有子元素。
descendant          选取当前节点的所有后代元素(子、孙等)。
descendant-or-self  选取当前节点的所有后代元素(子、孙等)以及当前节点本身。
following           选取文档中当前节点的结束标签之后的所有节点。
namespace           选取当前节点的所有命名空间节点。
parent              选取当前节点的父节点。
preceding           选取文档中当前节点的开始标签之前的所有节点。
preceding-sibling   选取当前节点之前的所有同级节点。
self                选取当前节点。

实例
例子                    结果
child::book             选取所有属于当前节点的子元素的 book 节点。
attribute::lang         选取当前节点的 lang 属性。
child::*                选取当前节点的所有子元素。
attribute::*            选取当前节点的所有属性。
child::text()           选取当前节点的所有文本子节点。
child::node()           选取当前节点的所有子节点。
descendant::book        选取当前节点的所有 book 后代。
ancestor::book          选择当前节点的所有 book 先辈。
ancestor-or-self::book  选取当前节点的所有 book 先辈以及当前节点(如果此节点是 book 节点)
child::*/child::price   选取当前节点的所有 price 孙节点。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值