爬去知乎下某个问题下所有的图片
来源:互联网 发布:美洲文明覆灭 知乎 编辑:程序博客网 时间:2024/06/07 00:00
主要用于你看到某个感兴趣的问题,需要回答者的图片,比如制作和收集表情包,还有其他用途你懂的!
一、运行环境
(1) win7
(2) python 2.7
(3) pycharm
二、 主要代码
#-*- coding:utf-8 -*-import reimport requestsimport osfrom urlparse import urlsplitfrom os.path import basenameheaders = { 'User-Agent': "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36", 'Accept-Encoding': 'gzip, deflate'}def mkdir(path): if not os.path.exists(path): print '新建文件夹:', path os.makedirs(path) return True else: print u"图片存放于:", os.getcwd() + os.sep + path return Falsedef download_pic(img_lists, dir_name): print "一共有 {num} 张照片".format(num=len(img_lists)) for image_url in img_lists: response = requests.get(image_url, stream=True) if response.status_code == 200: image = response.content else: continue file_name = dir_name + os.sep + basename(urlsplit(image_url)[2]) try: with open(file_name, "wb") as picture: picture.write(image) except IOError: print("IO Error\n") continue finally: picture.close print "下载 {pic_name} 完成!".format(pic_name=file_name)def get_image_url(qid, headers): # 利用正则表达式把源代码中的图片地址过滤出来 #reg = r'data-actualsrc="(.*?)">' tmp_url = "https://www.zhihu.com/node/QuestionAnswerListV2" size = 10 image_urls = [] session = requests.Session() while True: postdata = {'method': 'next', 'params': '{"url_token":' + str(qid) + ',"pagesize": "10",' + '"offset":' + str(size) + "}"} page = session.post(tmp_url, headers=headers, data=postdata) ret = eval(page.text) answers = ret['msg'] print u"答案数 : %d " % (len(answers)) size += 10 if not answers: print "图片URL获取完毕, 页数: ", (size - 10) / 10 return image_urls #reg = r'https://pic\d.zhimg.com/[a-fA-F0-9]{5,32}_\w+.jpg' imgreg = re.compile('data-original="(.*?)"', re.S) for answer in answers: tmp_list = [] url_items = re.findall(imgreg, answer) for item in url_items: # 这里去掉得到的图片URL中的转义字符'\\' image_url = item.replace("\\", "") tmp_list.append(image_url) # 清理掉头像和去重 获取data-original的内容 tmp_list = list(set(tmp_list)) # 去重 for item in tmp_list: if item.endswith('r.jpg'): print item image_urls.append(item) print 'size: %d, num : %d' % (size, len(image_urls))if __name__ == '__main__': #question_id = 26037846 question_id =34078228 zhihu_url = "https://www.zhihu.com/question/{qid}".format(qid=question_id) path = 'zhihu_pic' mkdir(path) # 创建本地文件夹 img_list = get_image_url(question_id, headers) # 获取图片的地址列表 download_pic(img_list, path) # 保存图片
三、运行结果
四、用知乎开源爬虫zhihu_oauth
# -*- coding: utf-8-*-''' @Description:获取cookie'''from zhihu_oauth import ZhihuClientfrom zhihu_oauth.exception import NeedCaptchaExceptionclient = ZhihuClient()user = 'your username'pwd = 'your password'try: client.login(user, pwd) print(u"登陆成功!")except NeedCaptchaException: # 处理要验证码的情况# 保存验证码并提示输入,重新登录 with open('a.gif', 'wb') as f: f.write(client.get_captcha()) captcha = input('please input captcha:') client.login('email_or_phone', 'password', captcha)client.save_token('token.pkl') # 保存token
# -*- coding: utf-8-*-''' @Description:保存知乎某个问题下所有答案的图片'''from __future__ import print_function from zhihu_oauth import ZhihuClientimport reimport osimport urllibclient = ZhihuClient()# 登录client.load_token('token.pkl') # 加载token文件id = 24400664 # https://www.zhihu.com/question/24400664(长得好看是一种怎么样的体验)question = client.question(id)print(u"问题:",question.title)print(u"回答数量:",question.answer_count)# 建立存放图片的文件夹os.mkdir(question.title + u"(图片)")path = question.title + u"(图片)"index = 1 # 图片序号for answer in question.answers: content = answer.content # 回答内容 re_compile = re.compile(r'<img src="(https://pic\d\.zhimg\.com/.*?\.(jpg|png))".*?>') img_lists = re.findall(re_compile,content) if(img_lists): for img in img_lists: img_url = img[0] # 图片url urllib.urlretrieve(img_url,path+u"/%d.jpg" % index) print(u"成功保存第%d张图片" % index) index += 1
阅读全文
0 0
- 爬去知乎下某个问题下所有的图片
- GridView 加载本地某个文件夹下的所有图片
- unity 获取某个文件夹下的所有图片
- unity 获取某个文件夹下的所有图片
- python 遍历某个路径下的所有图片并将图片路径保存到数组
- 通过Python爬虫爬取知乎某个问题下的图片
- python下载知乎某个问题下的全部图片
- 获取android sd卡中某个文件夹下的所有图片
- 获取android sd卡中某个文件夹下的所有图片
- 列出某个目录下的所有文件
- 删除某个schema下的所有表
- 读取某个文件夹下的所有文件
- 读取某个文件夹下的所有文件
- 删除某个文件夹下的所有文件
- 去除某个标签下的所有br
- 返回某个文件夹下所有的文件
- 获取某个目录下所有的文件
- tar批量解压问题:如何批量解压某个文件夹下的所有tar.gz文件?
- 讨厌
- codeforces 794C C. Naming Company
- 20170908算法工程师在线笔试之jd编程思路
- Linux之awk
- 源码解析Android中AsyncTask的工作原理
- 爬去知乎下某个问题下所有的图片
- 给Revit中的Button添加动画和图片
- Linux系统安装软件的常用命令
- 京东2018年校园招聘笔试代码环节答案分享
- Redis源码剖析-dict遍历算法
- P1553 数字反转(升级版)
- 腾讯云+CentOS 7.2+python:搭建微信公众号后台入门教程
- InfluxDB介绍
- C++学习笔记12 STL Deque