我在学习爬虫的时候遇到需要从一段话中提取出图片网址的需求。
待提取文字:
t1 = """ <div class="thumb"><a href="/article/123954862" target="_blank"> <img src="//pic.qiushibaike.com/system/pictures/12395/123954862/medium/L62DIHT1AV2DKIUV.jpg" alt="糗事#123954862" class="illustration" width="100%" height="auto"> </a> </div> """
正则:
ex = '<div class="thumb">.*?<img src="(.*?)" alt=.*?</div>'
然后在一些正则网站中无法识别
但是在Python的re模块中使用语句就可以识别:
t1 = """ <div class="thumb"><a href="/article/123954862" target="_blank"> <img src="//pic.qiushibaike.com/system/pictures/12395/123954862/medium/L62DIHT1AV2DKIUV.jpg" alt="糗事#123954862" class="illustration" width="100%" height="auto"> </a> </div> """ ex = '<div class="thumb">.*?<img src="(.*?)" alt=.*?</div>' img_src_list = re.findall(ex,t1,re.S)
就可以提取到呢?是不是因为换行符号的原因
"."匹配除换行符 \n 之外的任何单字符,所以你在正则表达式的网址上无法提取。你在python里提取的到是因为re.S使 . 匹配包括换行在内的所有字符
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import re
t1 = """
<div class="thumb"><a href="/article/123954862" target="_blank">
<img src="//pic.qiushibaike.com/system/pictures/12395/123954862/medium/L62DIHT1AV2DKIUV.jpg" alt="糗事#123954862" class="illustration" width="100%" height="auto">
</a>
</div>
"""
ex = re.compile(r'<img src="(.*?)" alt=.*?>')
res = re.findall(ex,t1)
print(res[0])
其实我是想问,为什么同样的表达式和正则,在python中可以提取到,但是在正则测试的网页中就提取不到
上面说的“正则表达式的网址上无法提取”是说默认情况下,有一些正则表达式网站是可以进行设置的,如https://regex101.com/
谢谢,看来是我没有弄懂re包的内容