zoukankan      html  css  js  c++  java
  • python爬虫笔记(3-1)re模块

    re模块:最适合在script中提取内容

    re是python正则模块标准库
    在线正则表达式测试:https://tool.oschina.net/regex
     
    常用元字符:
    . 匹配除换行符以外的任意字符
    w 匹配字母或数字或下划线
    s 匹配任意的空白字符,空格,制表符,换页符
    d 匹配0~9 之间的数字
    匹配一个换行符
    ^ 匹配字符串的开始
    $ 匹配字符串的结束
    S 匹配任何非空白字符
    W 匹配非字母或数字或下划线
    D 匹配非数字
    () 匹配括号内的表达式,也表式一个组
    [...] 匹配字符组中的字符
    [^...] 匹配除了字符组中字符的所有字符
     
    量词:
    控制前面的元字符出现的次数
    * 重复0次或更多次
    + 重复1次或更多次
    ? 重复0次或1次
    {n} 重复n次
    {n,} 重复n次或更多次
    {n,m} 重复n到m次
     
    贪婪匹配和惰性匹配
    .* 贪婪匹配
    .* ? 贪婪匹配
     
    re模块中爬虫程序主要使用的功能
    findall 查找所有,返回list
    finditer 查找所有,返回迭代器,需用for循环取出里面的值
    search 会进行匹配,如果匹配到了一个结果就会返回这个结果,如果匹配不上就返回none
    match 只能从字符串的开头进行匹配
    compile() 将一个长正则进行预加载,方便后面的使用
    单独提取正则中的内容:
    可通过给分组起名字的方法对正则中的内容进行单独提取

    基本结构:
    import re
    obj = re.compile(r"",re.S)     #re.S可以让.匹配任意字符

    例:
    import re
    # findall:匹配字符串中所有符合正则的内容
    lst = re.findall(r"d+","我的电话是:10086,他的电话是:10010")
    print(lst)
     
    # finditer:匹配字符串中所有的内容【返回的是迭代器】,从迭代器中拿到内容需要.group()函数
    it = re.finditer(r"d+","我的电话是:10086,他的电话是:10010")
    for i in it:
    print(i.group())
     
     
    # search:全文匹配找到一个结果就返回,返回的结果是match对象,如果拿不到结果返回none,拿数据需要.group()函数
    s = re.search(r"d+","我的电话是:10086,他的电话是:10010")
    print(s.group())
     
     
    # match:从头开始匹配
    s = re.match(r"d+","111,我的电话是:10086,他的电话是:10010")
    print(s.group())
     
     
    # 预加载正则表达式,可在多处重复使用
    obj = re.compile(r"d+")
     
    ret = obj.finditer("我的电话是:10086,他的电话是:10010")
    for it in ret:
    print(it.group())
     
    ret = obj.findall("我的电话是:10086,他的电话是:10010")
    print(ret)
     
     
    # 单独提取正则中的内容:(?P<分组名字>正则):单独从正则匹配的内容中再进一步提取所需要的内容
    st = """
    <div class='西游记'><span id='1'>孙悟空</span></div>
    <div class='水浒传'><span id='2'>林冲</span></div>
    <div class='三国演义'><span id='3'>刘关张</span></div>
    <div class='红楼梦'><span id='4'>贾宝玉</span></div>
    """
    # (?P<分组名字>正则):单独从正则匹配的内容中再进一步提取所需要的内容
    obj = re.compile(r"<div class='.*?'><span id='d+'>(?P<hahaha>.*?)</span></div>",re.S) #re.S可以让.匹配任意字符
    rest = obj.finditer(st)
    for i in rest:
    print(i.group())
    print(i.group("hahaha"))

  • 相关阅读:
    git 通过 fork 解决代码冲突
    vue-cli3.0 多页面和单页面的配置以及相互之间的切换
    关于切换环境变量的问题( 以vue-cli3.0 为例)
    vue-router 钩子
    Android eMMC 分区详解(转载)
    《PE总结 》– 重定位表(转载)
    Linux 文件系统
    爬虫登录,立FLAG
    ios tweak 开发
    ios app 砸壳
  • 原文地址:https://www.cnblogs.com/testerhappy/p/15121910.html
Copyright © 2011-2022 走看看