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"))

  • 相关阅读:
    A1066 Root of AVL Tree (25 分)
    A1099 Build A Binary Search Tree (30 分)
    A1043 Is It a Binary Search Tree (25 分) ——PA, 24/25, 先记录思路
    A1079; A1090; A1004:一般树遍历
    A1053 Path of Equal Weight (30 分)
    A1086 Tree Traversals Again (25 分)
    A1020 Tree Traversals (25 分)
    A1091 Acute Stroke (30 分)
    A1103 Integer Factorization (30 分)
    A1032 Sharing (25 分)
  • 原文地址:https://www.cnblogs.com/testerhappy/p/15121910.html
Copyright © 2011-2022 走看看