美文网首页
用python写爬虫-re模块

用python写爬虫-re模块

作者: ddm2014 | 来源:发表于2018-08-25 11:08 被阅读0次

    re模块中最常用到三个函数的是match,search,findall。
    不过他们都能匹配字符串,不过又稍有不同。

    基本格式

    re.findall/match/search("匹配规则/pattern", "要匹配的字符串")

    pattern

    我一般用到的情况都是准长这样子 开头内容(.星号?)结尾内容
    点代表的是任意字符。星号代表的是取 0 至 无限长度,问号代表的是非贪婪模式。

    比如要匹配下面字符串中的url
    tx ='"pic_middle":"http://wx4.sinaimg.cn/wap360/50a6dcc7ly1fud4g29v0tj22c0340kjl.jpg","pic_big":'
    '"pic_middle":"http://wx2.sinaimg.cn/wap360/50a6dcc7ly1fud4g3lbhkj22c02lub29.jpg","pic_big":'
    求url地址的pattern就是"pic_middle":(.*?),"pic_big":

    非贪婪模式

    这是说遇到第一个结尾匹配,"pic_big":就结束了,所以结果就是http://wx2.sinaimg.cn/wap360/50a6dcc7ly1fud4g3lbhkj22c02lub29.jpg
    假如不加?的话,就会变成我看看后面还有没有,"pic_big":额,还有呢,那就把所有的内容都返回吧,就会变成这样。
    "http://wx4.sinaimg.cn/wap360/50a6dcc7ly1fud4g29v0tj22c0340kjl.jpg","pic_big":' \ '"pic_middle":"http://wx2.sinaimg.cn/wap360/50a6dcc7ly1fud4g3lbhkj22c02lub29.jpg"

    返回结果

    findall返回的是list
    match只能找字符串开头与pattern相匹配的,不一样就返回None。
    search是一旦找到匹配的就返回,不会去找后来匹配的,都找不到返回None
    他们两个返回都是object,要得到具体的匹配内容,要用group。
    group是pattern中的()的个数,group(0)是所有查找的内容,group(1)是第一个括号中查找的内容,group(2)是第一个括号中查找的内容...像这样


    image.png

    比如要匹配字符串是
    match:


    search,看起来跟match是一样的额,



    但是一旦字符串的开头不是匹配字符,match就不能用了


    findall


    findall

    正则表达式在爬虫里用的不多,一般来说,html格式都能用beautiful soup,pyquery之类来解析,json能用json模块来解析,re模块我用的最多的是把返回的json数据中含有其他信息,不好用pandas.read_json读取数据变成dataframe,比如这样的数据:


    image.png

    就需要re把data后面的数据提取出来。这时用search即可。
    有时json结构及其繁琐,想将所有url提取出来,findall也能胜任。

    相关文章

      网友评论

          本文标题:用python写爬虫-re模块

          本文链接:https://www.haomeiwen.com/subject/inmwiftx.html