import requests #导入请求
import re #导入re模块
for n in range(5):
weburl = r'https://ibaotu.com/shipin/7-5138-0-0-0-'+str(n)+'.html'
html = requests.get(weburl)
reg = '" imgUrl="(.*?)" src="(.*?)"'
url = re.findall(reg,html.text)
for image_url,video_url in url:
print('Downloading: http:'+video_url)
data = requests.get("http:"+video_url)
with open("./"+video_url[-24:],'wb')as f:
f.write(data.content)
——————————————代码结束——————————————
运行,成功!区区几行代码,是不是很神奇?

for n in range(5):
n属于局部变量,在for循环内有效,每次循环从range(5)里取值
其中n,用_代替运行正常
看到后面str(n),又默默改回n

_在python中称作:丢弃变量
如果不关心一个变量,就可以定义改变量的名字为_ ,这是一个惯例,是一个不成文的约定,但不是标准
_是一个合法的标识符,也可以作为一个有效的变量使用,但是定义成下划线就是希望不要被使用,除非明确的知道这个数据需要使用
使用爬虫的时候经常用到, _ 这玩意儿你可以理解为,只要这次for循环结束之后,就不管了。咱要的只是循环这个过程。
问题:不知道for n in range(5):中的数字5可以换别的数字?
weburl = r'https://ibaotu.com/shipin/7-5138-0-0-0-'+str(n)+'.html'
html = requests.get(weburl) #向url对应的服务器发送相应的get请求,获得对应的相应
reg = '" imgUrl="(.*?)" src="(.*?)"'
正则表达式imgUrl="(.*?)" src="(.*?)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
. 匹配任意字符
* 匹配任意个数
.*? 匹配结果最少的规则的
<img. 只会匹配 <img[一个字符]
<img.*> 会匹配 <img src="1.gif">...其他代码..</html>
<img.*?> 会匹配 <img src="1.gif">
[\'"] 匹配一个字符,可以是‘,也可以是”,

imgUrl="//video-qn.ibaotu.com/19/42/94/16V888piCX59.mp4?vframe/jpg/offset/3.00|imageView2/0/w/384" src="//video-qn.ibaotu.com/19/42/94/16V888piCX59.mp4_10s.mp4
with open("./"+video_url[-24:],'wb')as f:
f.write(data.content)
传入标识符'w'或者'wb'表示写文本文件或写二进制文件
as 不是重命名原文件。
as 是代表打开后的文件句柄。比如 f = open(file_1,'w'),as 后面那个相当于这个 f 变量。之所以用with是因为with是一个上下文管理器,可以自动关闭文件。不需要主动去调用f.close().
网友评论