python中使用requests库获取昵图网图片,且正则中re.S的用法

python中使用requests库获取图片,且正则表达式中re.S的用法以及r.text和r.content的区别和搜索关键词

这里我获取的是昵图网的图片
代码附上
这里我获取的是2020的图片

import re
import requests
url="http://soso.nipic.com/?q=2020"
r=requests.get(url)
html=r.text
#listm=re.findall(r'<img src="(.*?)"',html,re.S)  #这是第一次获取的src的属性
listm=re.findall(r'data-original="(.*?.jpg)"',html,re.S) #第二次获取的是data-original的属性
i=1
for key in listm:
    print(key)
    pic=requests.get(key)
    path="dogPic\\"+str(i)+".jpg" #前面冒号里是你要保存的路径 ,后面是改了个名字并以jpg为后缀保存,我第一次用的gif
    fp=open(path,"wb")
    fp.write(pic.content) #这个、content可以看我的另一篇文章
    fp.close()
    i+=1

附上结果
这是我第一次获取src里的地址的得到的结果
在这里插入图片描述
这是第二次获取data-original里的地址得到的的结果
在这里插入图片描述
第二次用data-original的属性才获取到图片的原因是:本来src储存的是图片的真正地址,但是用了dtata-original属性给图片做了延迟加载处理,所以图片的真正的地址存储在data-original里里面,所以获取的时候要擦亮眼睛哦

1.关键词

这里的url是"http://soso.nipic.com/?q=2020"
这里的q=关键词,这个关键词是你搜索的关键词,我这里搜索的是2020,如果你想要获取的是上海的图片,把2020改成上海即可,即
url=”http://soso.nipic.com/?q=上海"
当然要注意有的网站的关键词是keyword=关键词

2.正则中re.S的用法

它表示“.”(不包含外侧双引号,下同)的作用扩展到整个字符串,包括“\n”
举个例子

import re
a = '''asdfsafhellopass:
    158899
    worldcfghjm
    '''
b = re.findall('hello(.*?)world',a)
c = re.findall('hello(.*?)world',a,re.S)
print 'b is ' , b
print 'c is ' , c

结果为:

b is  [] #这里的空是因为找不到第三行的world,即没有找到匹配的内容
c is  ['pass:\n\t158899\n\t'] #这里由于使用了 re.S

不知道大家注意到没有c的结果获取出来没有hello和word,这是另一个知识点,点击看另一篇(.*?用法与r.text和r.content的用法)

总结
“.”的作用是匹配除“\n”以外的任何字符,
不加re.S,“.”不匹配换行符,所以只在一行中匹配,不会换行,一次匹配一行
而加了re.S,可以识别换行符"\n"可以在整个字符串匹配

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值