import re
import requests
import os
import urllib.request
import sslfrom urllib.parse import urlsplit
from os.path import basename# 全局禁用证书验证
ssl._create_default_https_context = ssl._create_unverified_contextheaders = {'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 Trueelse:print(u"图片存放于:", os.getcwd() + os.sep + path)return Falsedef download_pic2(img_lists, dir_name):print("一共有{num}张照片".format(num=len(img_lists)))# 标记下载进度index = 1for image_url in img_lists:file_name = dir_name + os.sep + basename(urlsplit(image_url)[2])# 已经下载的文件跳过if os.path.exists(file_name):print("文件{file_name}已存在。".format(file_name=file_name))index += 1continueauto_download(image_url, file_name)print("下载{pic_name}完成!({index}/{sum})".format(pic_name=file_name, index=index, sum=len(img_lists)))index += 1def auto_download(url, file_name):# 递归下载,直到文件下载成功try:urllib.request.urlretrieve(url, file_name)except urllib.request.ContentTooShortError:print("文件下载不完整,重新下载。")auto_download(url, file_name)except urllib.request.URLError:print("网络连接出错,尝试重新下载。")auto_download(url, file_name)def 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.contentelse:continuefile_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")continuefinally:picture.close()print("下载{pic_name}完成!".format(pic_name=file_name))def get_image_url(qid, headers):# 利用正则表达式把源代码中的图片地址过滤出来tmp_url = "https://www.zhihu.com/node/QuestionAnswerListV2"size = 10image_urls = []filst_url =  "https://www.zhihu.com/question/{}".format(qid)page = requests.get(filst_url, headers=headers)ret = page.content.decode()ret = re.sub(r'\\', '', ret)# print(ret)resp = re.findall(r'<img data-rawheight="\d+" src="(https:.*?)"\sdata', ret)response = re.findall(r'<img src="(https:.*?)"\sdata', ret)res2 = re.findall(r'u003Cimg src="(https:.*?)"\sdata', ret)res3 = re.findall(r'u003Cimg data-rawheight="\d+" src="(https:.*?)"\sdata', ret)for i in resp:image_urls.append(i)for ik in response:image_urls.append(ik)for i in res2:img_res = re.sub(r'u002F', '', i)if "50v2" in img_res:img_res = re.sub(r'pic', '//pic', img_res)img_res = re.sub(r'com50v2', 'com/50/v2', img_res)image_urls.append(img_res)for i in res3:img_res = re.sub(r'u002F', '', i)if "50v2" in img_res:img_re = re.sub(r'pic', '//pic', img_res)img_re = re.sub(r'com50v2', 'com/50/v2', img_re)image_urls.append(img_re)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 += 10if 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__':title = '大胸女生如何穿衣搭配?'question_id = 26297181# title = '胸大到底怎么穿衣服'# question_id = 293482116# title = '你见过最漂亮的东亚女性长什么样子?'# question_id = 271680368# title = '肉感'# question_id = 22721518# title = '陈都灵?'# question_id = 60603618# title = '刘亦菲'# question_id = 307758291# title = '你见过最美的欧美人'# question_id = 67226894zhihu_url = "https://www.zhihu.com/question/{qid}".format(qid=question_id)path = str(question_id)+titlemkdir(path)  # 创建本地文件夹img_list = get_image_url(question_id, headers)  # 获取图片的地址列表download_pic2(img_list, path)  # 保存图片

爬取知乎美女照片,通过话题搜索相关推荐

  1. python 知乎美女_知乎大神用Python爬取高颜值美女(爬虫+人脸检测+颜值检测)

    原标题:知乎大神用Python爬取高颜值美女(爬虫+人脸检测+颜值检测) 1 数据源 知乎话题『美女』下所有问题中回答所出现的图片 2 抓取工具 Python 3,并使用第三方库 Requests.l ...

  2. 爬取知乎“凡尔赛语录”话题下的所有回答,我知道点开看你的很帅气,但还是没我帅

    凡尔赛文学火了.这种特殊的网络文体,常出现在朋友圈或微博,以波澜不惊的口吻,假装不经意地炫富.秀恩爱. 普通的炫耀,无非在社交网络发发跑车照片,或不经意露出名牌包包 logo,但凡尔赛文学还不这么直接 ...

  3. python爬取知乎话题广场_知乎一共有多少个话题?

    上图可知,它是通过请求POST接口来取得知乎话题数据,接口信息: 其中topic_id指大分类下的id,offset是指偏移量,指每次执行next方法加载的子话题数量,hash_id可以为空我们暂时忽 ...

  4. python爬虫实战(一)--爬取知乎话题图片

    原文链接python爬虫实战(一)–爬取知乎话题图片 前言 在学习了python基础之后,该尝试用python做一些有趣的事情了–爬虫. 知识准备: 1.python基础知识 2.urllib库使用 ...

  5. 数据挖掘 文本分类 知乎问题单分类(二):爬取知乎某话题下的问题(数据爬取)

    数据挖掘 文本分类 知乎问题单分类(二):爬取知乎某话题下的问题(数据爬取) 爬虫目标 Scrapy框架介绍 Scrapy框架原理 [^1] Scrapy工作流程 [^2] 具体实现 安装Scrapy ...

  6. Python爬取知乎电影话题回答,采集提及次数前50的电影

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 以下文章来源于苏生不惑,作者苏生不惑 如果在家无聊推荐几部经典电影给你看看. 这 ...

  7. 60行代码爬取知乎“神回复”,句句戳中泪点

    作者 | shenzhongqiang 转载自Python与数据分析(ID:PythonML) 之前的一篇文章<爬了下知乎神回复,笑死人了~>发布后,引发了大家热烈的反响.很多朋友觉得很神 ...

  8. python 数据分析 书籍推荐 知乎_Python 爬取知乎 9674 个问答,揭秘最受欢迎的 98 本书!...

    原标题:Python 爬取知乎 9674 个问答,揭秘最受欢迎的 98 本书! 作者 | Yura 责编 | 胡巍巍 高尔基这话有没有道理我不知道, 咱也不敢问, 主要是现在也问不了. 那对我来说,读 ...

  9. 如何用 60 行代码爬取知乎神回复?

    作者 | 强哥 责编 | 郭芮 知乎上经常会有很多令人忍俊不禁的神回复,初看之下拍案叫绝,细思之下更是回味无穷.本文就来介绍下如何爬取知乎的神回复,揭晓其背后的原理. 知乎神回复都有些什么特点呢?我们 ...

最新文章

  1. 当前国内有哪些公司是做OKR管理软件做的比较好的?
  2. 常用算法25讲,拿走不谢!
  3. bugku ——杂项
  4. 使用 fail2ban 防御 SSH 暴力破解
  5. drop table中cascade的含义及用法
  6. php 即时到账,paypal即时到账php实现代码
  7. Android activity启动模式
  8. 主动出击,马斯克欲用 430 亿美元拿下 Twitter
  9. td自动换行:设置table布局固定,td根据设定宽度自动换行
  10. 又见n/i下取整+分块
  11. 发那科程序全部输出_如何拷贝FANUC系统全部程序
  12. 中国医科大学2021年12月《医学遗传学》作业考核试题
  13. ICE 3.7.4 实现客户服务端hello world
  14. doctrine 关系
  15. GOM引擎脚本 时间段内调整人物属性
  16. c语言作文的题目_C语言入门题
  17. Android 动画方案
  18. python数据处理--按照数据差值大小进行聚类(归类)
  19. ICDE-2020 论文简析:空间众包中的预测任务分配 : 一种数据驱动的方法 Predictive Task Assignment in Spatial Crowdsourcing
  20. 11 个最佳免费安全网站

热门文章

  1. SAECCE 2021展位预定已过半,观众预登记系统上线啦!
  2. android 获取当前应用的userid
  3. linux下malloc申请大内存,Linux malloc大内存的方法
  4. SQL server数据库的操作步骤·图形界面工具
  5. servlet属于php,Servlet是什么?
  6. CSS——(CSS样式规则,CSS样式表单,选择器,常用的CSS属性)
  7. 黄油刀——ButterKnife
  8. vim编辑器配置文件
  9. Windows(win)10安装JDK并配置环境变量(附网盘下载地址)
  10. 2020.10.17--PS--淌泪表情、翻白眼、摇晃脑袋