寒假大数据学习笔记五

  今天学习内容为正则表达式,这一块我一整天竟然没有学完。

  在一开始爬取网页匹配有用的字符串时,我用的是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.

    正则表达式测试工具网址

 

posted @ 2020-02-03 20:53  一夕思醉  阅读(121)  评论(0编辑  收藏  举报