首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何优雅地保存知乎任一问题或答案下的所有图片(上)

使用版本: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:最近出台的一项政策在各大论坛引起了不小的争论,的确,改革是需要代价,红利再分配也会让增长变得可持续,可是,过去对的措施,现在还会有效吗?拭目以待

——宴安鸩毒,不可怀也。《左传·闵公元年》

——国之兴也,视民如伤,是其福也;其亡也,以民为土芥,是其祸也。《左传·哀公元年》

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180907G0DOJ500?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券