美文网首页
用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