问题:疫情期间,小区封锁,妹妹上九年级需要借书怎么办?
我答:直接网购。
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']