python 爬取图片_python批量爬取图片

问题:疫情期间,小区封锁,妹妹上九年级需要借书怎么办?

我答:直接网购。

END

开个玩笑,当然。大多数情况下还是可以从网上拿到电子书的。

比如有人专门扫描了九年级全一册物理是png格式,放在了搜狐上,辛苦。人教版九年级物理全册电子课本​www.sohu.com

然后写几行python代码:

#导入模块

import requests

import re

#请求网址

url='https://www.sohu.com/a/243735652_372480'

#发起请求,得到网址的所有字符,并且赋给变量html

html=requests.get(url).text

#匹配正则表达式,将匹配元素输入列表html_str

html_str=re.findall(r'img src="(.*?)"',html,re.S)

#获得列表长度,也就是几张图片

a=len(html_str)

#for循环下载,保存格式为.png “wb”表示可写

for i in range(a):

img=requests.get(html_str[i]).content

with open(str(i)+'.jepg','wb') as f:

f.write(img)

完成。

主要讲一下这个正则表达式:

re.findall(r'img src="(.*?)"',html,re.S)

先进入开发者模式,一般谷歌是按F12,

1:点击箭头图标,

2:点击其中一张要下载的图片。

3:之后会显示选中的元素,当然你可以右击在新的窗口打开,然后一张一张的另存为。大概也就180多页。

观察一下这个标签。

re.findall(r'img src="(.*?)"',html,re.S)

所以这个正则表达式的意思就是,从变量html中找出

img src="(.*?)"

并且只返回(.*?)

正则表达式的findallPython re.findall中正则表达式(.*?)和参数re.S使用​blog.csdn.net

突然不想写了,大佬写的很清楚。

import re

str = 'aabbabaabbaa'

#一个"."就是匹配除 \n (换行符)以外的任意一个字符

print(re.findall(r'a.b',str))#['aab', 'aab']

#*前面的字符出现0次或以上

print(re.findall(r'a*b',str))#['aab', 'b', 'ab', 'aab', 'b']

#贪婪,匹配从.*前面为开始到后面为结束的所有内容

print(re.findall(r'a.*b',str))#['aabbabaabb']

#非贪婪,遇到开始和结束就进行截取,因此截取多次符合的结果,中间没有字符也会被截取

print(re.findall(r'a.*?b',str))#['aab', 'ab', 'aab']

#非贪婪,与上面一样,只是与上面的相比多了一个括号,只保留括号的内容

print(re.findall(r'a(.*?)b',str))#['a', '', 'a']

str = '''aabbab

aabbaa

bb'''#后面多加了2个b

#没有把最后一个换行的aab算进来

print(re.findall(r'a.*?b',str))#['aab', 'ab', 'aab']

#re.S不会对\n进行中断

print(re.findall(r'a.*?b',str,re.S))#['aab', 'ab', 'aab', 'aa\n b']

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值