python爬虫学习22

python爬虫学习22

这里写目录标题

    • python爬虫学习22
      • 三、正则表达式
        • 3.search方法

三、正则表达式

3.search方法

之前我们学习了正则表达式中的match方法,请大家回想一下match方法的前提,没错match方法是从字符串开头开始匹配,那么一旦开头不匹配,意味着整个匹配就废了:

# match 的局限性
import re

content = 'Extra strings Hello 1234567 World_this is a Regex Demo Extra    stings'
result = re.match('Hello.*?(\d+).*?Demo', content)
print(result)

运行结果:表达式没有问题,但是却没有匹配到任何内容

在这里插入图片描述

由此可以得出,match在使用时我们必须知道待匹配字符串的开头部分,此方法才可以使用。所以在实际应用中它更适合检测某个字符串是否符合某个正则表达式规则。

这时候,要想要解决问题就要靠 search 方法了,它在匹配时会先扫描整个字符串然后匹配字符串中第一个匹配成功的结果,如果没有扫描到符合第一个正则表达式的结果就会返回None。此时我们写出的正则表达式就可以是字符串的某一部分:

# search 简单应用
import re

content = 'Extra strings Hello 1234567 World_this is a Regex Demo Extra    stings'
result = re.search('Hello.*?(\d+).*?Demo', content)
print(result.group(1))

运行结果:

在这里插入图片描述

那么我们用search方法来尝试一下:现在有一段html

		

        

		

可以观察到ul节点中有很多li节点,这些li节点中有的包含a节点,有的不包含a节点。a节点又有其相应的属性。现在我们想要用search方法成功匹配到其中的小说类别:

在经过细致的观察,我们发现小说的类别前面都会出现相同的字符串 ‘xiaoshuo/"’,所以我们在写正则表达式时就要记得在匹配时吧他写进去:

import re

html = """

        
		
"""
# 由于html中有很多换行所以别忘了使用修饰符 result = re.search('href.*?xiaoshuo/">(.*?)<', html, re.S) print(result.group(1))

运行结果:

python爬虫学习22_第1张图片

这样就获取成功了

如果不写入之前的字符串而是

'herf.*?>(.*?)<'

会出现什么结果呢?大家不要往下看,先仔细的想一想

。。。

。。。

import re

html = """

        
		
"""
result = re.search('href.*?>(.*?)<', html, re.S) print(result.group(1))

运行结果:

没有写入‘xiaoshuo/"’时,search就会寻找第一个符合条件的字符,它找啊找啊就找到了>首页<这里

python爬虫学习22_第2张图片

运用我们所学的知识还是很容易得出答案的。

今天我们学习了正则表达式中的search方法,但是这种方法一次只能匹配第一种符合情况的结果,如果我们想要获取全部的结果就我能为力了,那么如何解决呢?

今日结束,下篇继续

你可能感兴趣的:(Python爬虫基础学习笔记,python,爬虫,学习)