使用版本:Python3.6
运行环境:Anacoda Spyder
学Python也有大概三个月了,中间断断续续也做了几个小程序,江湖人言,“Life is short, you need Python!”,“初学Python不爬图,不如回家卖红薯”。今天,我们就来学习如何优雅地保存知乎任一问题或答案下的所有图片。
本程序需要做到1.不用模拟登录知乎也可以下载保存图片。2.将图片以数字顺序命名,存为jpg格式,放在本地文件夹内。3.针对Python3内部调用Python2中urlib2的升级版urlib.request而产生的TypeError进行修改。
下面,以
此问题为例,开启大白话模式
以下为代码
# -*- coding: utf-8 -*-
"""
Created on Fri Sep 7 08:35:42 2018
@author: Gleeman
"""
import re
import urllib
import urllib.request
import os
import chardet #需要导入这个模块,检测编码格式
def getHtml(url):
html = page.read()
encode_type = chardet.detect(html)
html = html.decode(encode_type['encoding']) #进行相应解码,赋给原标识符(变量)
return html
def mkdir(path):
path = path.strip()
if not isExists:
print(u'新建了名字叫做',path,u'的文件夹')
os.makedirs(path)
return True
else:
print (u'名为',path,u'的文件夹已经创建成功')
return False
def saveImages(imglist,name):
number = 1
for imageURL in imglist:
splitPath = imageURL.split('.')
fTail = splitPath.pop()
if len(fTail) > 3:
fTail = 'jpg'
fileName = name + "/" + str(number) + "." + fTail
# 对于每张图片地址,进行保存
try:
# 向指定的url发送请求,并返回服务器响应的类文件对象
data = u.read()
f = open(fileName,'wb+')
f.write(data)
print (u'正在保存的一张图片为',fileName)
f.close()
except urllib.request.URLError as e:
print (e.reason)
number += 1
def getAllImg(html):
#利用正则表达式把源代码中的图片地址过滤出来
# reg = r'src="(https://.+?\.jpg)"'
# reg = r'data-actualsrc="(https?://pic.+?\.jpg|png|jpeg)"'
reg = r'data-actualsrc="(.*?)">'
imgre = re.compile(reg, re.S)
imglist = imgre.findall(html) #表示在整个网页中过滤出所有图片的地址,放在imglist中
return imglist
if __name__ == '__main__':
html = getHtml("https://www.zhihu.com/question/26542655/answer/140905404")
path = u'C://图片/test'
mkdir(path) #创建本地文件夹
imglist = getAllImg(html) #获取图片的地址列表
saveImages(imglist,path) # 保存图片
那么,怎么食用这一份看上去很可口的代码君呢?
你需要一个编译器,例如anacoda的spyder
首先把上面的代码复制粘贴到屏幕左侧
然后你会发现在代码栏的66行, html = getHtml("https://www.zhihu.com/question/40063489/answer/84544464")中,有一长串网址,这就是你要选择的问题或者回答的Url,把你想要下载图片的问题或者答案复制粘贴替换这个括号的内容,注意要保留双引号,在Python和大部分语言中双引号是字符串的标志。
点击那个绿色的小三角,Run,Python,Run!(假装这里有阿甘正传.jpg)
运行程序
结果就是这样滴
Emmmmm,是不是很简单~
有的同学灵机一动,“老师!我有一个大胆的想法!”
人有多大胆,地有多大产
只要功夫深,铁杵磨成针(打码是为了保护答主隐私,不要想多)我这可是正经公众号
以上
有趣青年码头,寻找有趣的你
小声BB:最近出台的一项政策在各大论坛引起了不小的争论,的确,改革是需要代价,红利再分配也会让增长变得可持续,可是,过去对的措施,现在还会有效吗?拭目以待
——宴安鸩毒,不可怀也。《左传·闵公元年》
——国之兴也,视民如伤,是其福也;其亡也,以民为土芥,是其祸也。《左传·哀公元年》
领取专属 10元无门槛券
私享最新 技术干货