正则,bs4 ,xpath 和jsonpath 的匹配规则

正则匹配:   

规则
  单字符:
    . : 除换行以外所有字符
    [] :[aoe] [a-w] 匹配集合中任意一个字符
    \d :数字 [0-9]
    \D : 非数字
    \w :数字、字母、下划线、中文
    \W : 非\w
    \s :所有的空白字符
    \S : 非空白
  数量修饰:
    * : 任意多次 >=0
    + : 至少1次 >=1
    ? : 可有可无 0次或者1次
    {m} :固定m次
    {m,} :至少m次
    {m,n} :m-n次
  边界:
    \b \B
    $ : 以某某结尾
    ^ : 以某某开头
  分组:
    (ab){3}
    (){4} 视为一个整体
    () 子模式\组模式 \1 \2
  贪婪模式:
    .*? .+?
    re.I : 忽略大小写
    re.M :多行匹配
    re.S :单行匹配

match\search\findall
re.sub(正则表达式, 替换内容, 原字符串)

bs4匹配规则

需要安装:pip install bs4
bs4在使用时候需要一个第三方库,把这个库也安装一下 pip install lxml

简单使用:
  说明:选择器,jquery
    from bs4 import BeautifulSoup
  使用方式:可以将一个html文档,转化为指定的对象,然后通过对象的方法或者属性去查找指定的内容
    (1)转化本地文件:
      soup = BeautifulSoup(open(‘本地文件‘), ‘lxml‘)
    (2)转化网络文件:
      soup = BeautifulSoup(‘字符串类型或者字节类型‘, ‘lxml‘)
 (1)根据标签名查找
    soup.a 只能找到第一个符合要求的标签
 (2)获取属性
    soup.a.attrs 获取所有的属性和值,返回一个字典
    soup.a.attrs[‘href‘] 获取href属性
    soup.a[‘href‘] 也可简写为这种形式
    (3)获取内容
    soup.a.string
    soup.a.text
    soup.a.get_text()
   注意:如果标签还有标签,那么string获取到的结果为None,而其它两个,可以获取文本内容
 (4)find
    soup.find(‘a‘) 找到第一个符号要求的a
    soup.find(‘a‘, title="xxx")
    soup.find(‘a‘, alt="xxx")
    soup.find(‘a‘, class_="xxx")
    soup.find(‘a‘, id="xxx")

  注意:find方法不仅soup可以调用,普通的div对象也能调用,会去指定的div里面去查找符合要求的节点
     find找到的都是第一个符合要求的标签
 (5)find_all   
    soup.find_all(‘a‘)
    soup.find_all([‘a‘, ‘b‘])
    soup.find_all(‘a‘, limit=2) 限制前两个
 (6)select
    根据选择器选择指定的内容
    常见的选择器:标签选择器、类选择器、id选择器、组合选择器、层级选择器、伪类选择器、属性选择器
      a   #标签选择器
      .dudu  类选择器
      #lala   id选择器
      a, .dudu, #lala, .meme  #组合选择器
      div .dudu #lala .meme .xixi    #包含选择器  
      div > p > a > .lala    只能是下面一级   #层级选择器
      input[name=‘lala‘]  #属性选择器

     select选择器返回永远是列表,需要通过下标提取指定的对象,然后获取属性和节点
     该方法也可以通过普通对象调用,找到都是这个对象下面符合要求的所有节点

Xpath匹配原则

安装xpath插件
将xpath插件拖动到谷歌浏览器扩展程序中,安装成功
启动和关闭插件
  ctrl + shift + x
属性定位
    //input[@id="kw"]
    //input[@class="bg s_btn"]
层级定位
索引定位
    //div[@id="head"]/div/div[2]/a[@class="toindex"]
    【注】索引从1开始
    //div[@id="head"]//a[@class="toindex"]
    【注】双斜杠代表下面所有的a节点,不管位置
逻辑运算
    //input[@class="s_ipt" and @name="wd"]
模糊匹配
    contains
    //input[contains(@class, "s_i")]
所有的input,有class属性,并且属性中带有s_i的节点
    //input[contains(text(), "爱")]
    starts-with
    //input[starts-with(@class, "s")]
所有的input,有class属性,并且属性以s开头
取文本
    //div[@id="u1"]/a[5]/text() 获取节点内容
    //div[@id="u1"]//text() 获取节点里面不带标签的所有内容

直接将所有的内容拼接起来返回给你
    ret = tree.xpath(‘//div[@class="song"]‘)
    string = ret[0].xpath(‘string(.)‘)
    print(string.replace(‘\n‘, ‘‘).replace(‘\t‘, ‘‘))
取属性
    //div[@id="u1"]/a[5]/@href

代码中使用xpath
    from lxml import etree
两种方式使用:将html文档变成一个对象,然后调用对象的方法去查找指定的节点
  (1)本地文件
    tree = etree.parse(文件名)
  (2)网络文件
    tree = etree.HTML(网页字符串)

  ret = tree.xpath(路径表达式)
  【注】ret是一个列表

jsonpath匹配规则

jsonpath: 用来解析json数据使用的
Python处理json格式用到的函数
  import json
  json.dumps() : 将字典或者列表转化为json格式的字符串
  json.loads() :将json格式字符串转化为python对象
  json.dump() : 将字典或者列表转化为json格式字符串并且写入到文件中
  json.load() :从文件中读取json格式字符串,转化为python对象
前端处理:
  将json格式字符串转化为js对象
  JSON.parse(‘json格式字符串‘)
  eval(‘(‘ + json格式字符串 + ‘)‘)
安装:
  pip install lxml
  pip install jsonpath
  http://blog.csdn.net/luxideyao/article/details/77802389
  xpath和jsonpath的对比
       /            $           根元素
    .            @        当前元素
    /             .          子元素
           //             ..         任意位置查找
           *              *        通配符
           []             ?()      过滤
  xpath 索引下标从1开始
  jsonpath 索引下标从0开始

原文地址:https://www.cnblogs.com/airapple/p/9132374.html

时间: 2024-11-09 02:49:40

正则,bs4 ,xpath 和jsonpath 的匹配规则的相关文章

Nginx配置中Location的匹配规则

Location匹配的url的语法规则: location [=|~|~*|^~] /uri/ { … } = 表示精确匹配 ~ 表示区分大小写的正则匹配 ^~ 表示以某个常规字符串开头的url即可: ~* 表示不区分大消息的正则匹配 !~(*!~)表示不区分大小写不匹配的正则 / 通配符,任何请求都能匹配到这个location,如果有任何其他location可以匹配,则会覆盖该location 匹配顺序: 1)先匹配普通url,在匹配正则 2)“普通 location ”的匹配规则是“最大前缀

常用的JavaScript正则匹配规则代码收藏,很实用

收集一些常用的JavaScript正则表达式匹配规则,比如匹配电话号码.Email.中文字符.身份证号.邮编.QQ号.过滤空白行.匹配特定数字等.觉得这玩意是很有用的,只不过自己水平菜,老是自己写不出,看了这个文档,觉得心里踏实很多,用到正则匹配的时候,看下这个,相信为让你省不少时间.注:本正则不仅限于在JS中使用,其它语言也可以借鉴. 匹配特定数字: ^[1-9]\d*$ //匹配正整数 ^-[1-9]\d*$ //匹配负整数 ^-?[1-9]\d*$ //匹配整数 ^[1-9]\d*|0$

2-常用的正则匹配规则(会员名,真实姓名,邮箱,身份证号码,邮箱)

一.常见的正则匹配规则: 常见的匹配规则有 会员名,真实姓名,邮箱,身份证号码,邮箱等等 1.用户名 要求:会员名以汉字或字母开头,有3-18位数字,字母,下划线,汉字组成 正则:reg1 = /^[\u4e00-\u9fa5a-zA-Z][0-9a-zA-Z_\u4e00-\u9fa5]{2,17}/; 2.真实姓名 要求:真实姓名是2-6位的汉字组成 正则:reg2 = /^[\u4e00-\u9fa5][\u4e00-\u9fa5]{1,5}$/; 3.密码 要求:由6-16位的数字,字母

Nginx之location 匹配规则详解

Nginx之location 匹配规则详解 关于一些对location认识的误区 1. location 的匹配顺序是"先匹配正则,再匹配普通". 矫正: location 的匹配顺序其实是"先匹配普通,再匹配正则".我这么说,大家一定会反驳我,因为按"先匹配普通,再匹配正则"解释不了大家平时习惯的按"先匹配正则,再匹配普通"的实践经验.这里我只能暂时解释下,造成这种误解的原因是:正则匹配会覆盖普通匹配(实际的规则,比这复杂,

JavaScript中正则表达式判断匹配规则以及常用的方法

JavaScript中正则表达式判断匹配规则以及常用的方法: 字符串是编程时涉及到的最多的一种数据结构,对字符串进行操作的需求几乎无处不在. 正则表达式是一种用来匹配字符串的强有力的武器.它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它"匹配"了. \d可以匹配一个数字                 '00\d'可以匹配'007' ,'\d\d\d'可以匹配'010' \w可以匹配一个字母或数字      '\w\w'可以匹配'js' \s可

Nginx之location匹配规则(个人总结)

Location匹配的url的语法规则: syntax: location [=|~|~*|^~|@] /uri/ { - } default: no context: server=            表示精确匹配 ^~             表示普通字符匹配,不继续匹配正则,一般用来匹配目录 ~            表示区分大小写的正则匹配 ~*              表示不区分大小写的正则匹配 !~ 和!~*       分别表示区分大小写和不区分大小写不匹配的正则 @    

nginx之location匹配规则

1.概述 Nginx server块下的一个指令,每个server块可以包含多个location块. 2.作用 (1)基于Nginx服务器接收到的请求字符串(例如:server_name/usr-string),对除虚拟主机名称(也可以是ip别名)之外的字符串(例如:"/usr-string")进行匹配,对特定的匹配进行处理: (2)地址定向.数据缓存和应答控制等功能都是在这部分实现: (3)许多第三方模块的配置也是在location块中提供功能. 3.语法结构 Location [

nginx location 匹配规则

location匹配规则 ~             #波浪线表示执行一个正则匹配,区分大小写 ~*           #表示执行一个正则匹配,不区分大小写 !~和!~*    #分别为区分大小写不匹配及不区分大小写不匹配 ^~           #^~表示普通字符匹配,如果该选项匹配,只匹配该选项,不匹配别的选项,一般用来匹配目录 =             #进行普通字符精确匹配 @            #"@" 定义一个命名的 location,使用在内部定向时,例如 er

location 匹配规则

语法规则 location [=|~|~*|^~] /uri/ { … } 符号    含义 =    开头表示精确匹配 ^~    开头表示uri以某个常规字符串开头,理解为匹配 url路径即可.nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格) ~    开头表示区分大小写的正则匹配 ~*    开头表示不区分大小写的正则匹配 !~和!~*    分别为区分大小写不匹配及不区分大小写不匹配 的正则 /    通用匹