• 爬虫 re 模块 (正则表达式)


    爬虫数据提取方式的一种

    re:是用于提起字符串内容的模块

    我们用到的方法有:

                        re.compile()  创建正则正则对象

                        re.findall()     匹配查找,返回的是列表

                        re.S                可以将正则的搜索域不在是一行,而是整个html字符串

     

    分为三个步骤:

                          一、创建正则对象

                          二、匹配查找

                          三、提取数据保存

    先导入模块re

    import re

    我们先创建个字符串

    string = """
    <div class="body">
        <div>
            <a href="www.baidu.com" >百度一下</a>
            <li>
                <a class="zhiyou" href="www.zhiyou100.com">智游教育</a>
            </li>
        </div>
        <div class="one" style="color: red">
            <span>这是第一条数据</span>
        </div>
        <div class="two" style="color: blue">
            <span class="two_one"></span>
            <span>这是第二条数据</span>
        </div>
        <span class="three" style="color: black">这是第三条数据</span>
        
    </div>
    
    
    """

    写正则表达式,创建正则对象

    pattern = re.compile(r'<a href="(.*?)">(.*?)</a>',re.S)

    如果不加     pattern = re.compile('<a href="(.*?)">(.*?)</a>')          只会查找第一行的字符串,因为返回的字符串都有空格,所以要加re.S

    .*?是跳过的意思,因为一般情况下属性有很多,无关的可以用.*?跳过        或者匹配到一个数据后与第二个数据很远就跳过

    (.*?) 加括号的意思是,匹配括号里的数据,也就是取出数据,可以取多个数据.

    返回的是一个列表,如果匹配到多组数据,每一组数据都是一个元组,每一个元组都是由表达式取出的(.*?)组成

    正则表达式的一些个人观点

             我们是在字符串中匹配数据的,所以表达式要和html中的格式一样,比如属性后是双引号,属性之间有一个空格,如果不一样,也会匹配不到.

             要匹配的数据的标签有唯一的属性就可以直接指定,如果找不到,就说明标签太深了,正则表达式匹配不到,也会找不到,就找父类.

             当匹配到数据时要用结束标签,如果没有就有可能连后面无关的数据也匹配到

    提取数据

    res = re.findall(pattern,string)
    print(res)

    第一个参数是正则表达式对象,第二个参数是目标字符串

    补充

    .*? 是非贪婪匹配

    .* 是贪婪匹配

    举例

    string = "a111111b222222b333333b"

    a.*?b 贪婪匹配 的 结果是      a111111b

    a.*b    非贪婪匹配的结果是    a111111b222222b333333b

             

  • 相关阅读:
    第六章类(十一)构造函数4对象初始化器和集合初始化器
    第六章类(十)构造函数3new
    第六章类(九)构造函数2默认构造函数
    Javascript---- 练习八(字符串操作)
    图解CSS3----white-space空白符处理
    图解CSS3----word-break单词断行
    图解CSS3----word-wrap(单词换行)
    图解CSS3----text-overflow(文本溢出属性)
    图解CSS3----vertical-align(文本垂直对齐方式)
    Javascript---- 练习五(函数,事件绑定)
  • 原文地址:https://www.cnblogs.com/eunuch/p/9157546.html
Copyright © 2020-2023  润新知