今天学习内容为正则表达式,这一块我一整天竟然没有学完。
在一开始爬取网页匹配有用的字符串时,我用的是find方法,如下:
1 def find_image(page_url): 2 html = url_open(page_url).decode("utf-8") 3 image_addr = [] 4 5 a = html.find('img style="cursor:pointer;"') 6 while a != -1: 7 b = html.find(".jpg", a, a + 255) 8 if b != -1: 9 image_addr.append(html[a + 133:b + 4]) 10 else: 11 b = a + 133 12 13 a = html.find('img style="cursor:pointer;"', b) 14 15 for each in image_addr: 16 print(each) 17 18 return image_addr
可以看到的是,为了得到我想要的链接,我要用find方法检索全文,并通过关键词“img style="cursor:pointer;"
”和“.jpg”来锁定链接,这样做十分不方便,因为很难保证得到的是想要的链接,一旦有非链接匹配成功,同样也会被扒下来,这样会对清洗数据造成很大的麻烦。而正则表达式,无疑会方便许多。
但正则表达式的逻辑非常麻烦(个人认为),举例如下:
想要匹配IP地址的正则表达式,我穷尽脑汁写出的如下: string = "((25[0-5]|2[0-4]d|[01]{0,1}d{0,2}d).){3}(25[0-5]|2[0-4]d|[01]{0,1}d{0,2}d)" ,IP地址的格式为 a.b.c.d ,其中abcd分别都是0-255中的某一个数字。这个式子分为3部分:第一部分是 ((25[0-5]|2[0-4]d|[01]{0,1}d{0,2}d).) ,
这表示a.,而第一部分加上 {3} 则代表将第一部分重复3次,这就变成了 a.b.c. ,然后在加上第一部分,整个IP地址匹配正则式就完成了。
正则表达式几乎应用于所有语言,所以十分重要。
PS.