从在知乎关注了几个大神,我发现我知乎的主页画风突变。经常会出现

***长得好看是怎样一种体验呢?
不用***,却长得好看是一种怎样的体验?
什么样***作为头像?
...

诸如此类的问答。点进去之后发现果然很不错啊,大神果然是大神,关注的焦点就是不一样。

看多了几次之后,觉得太麻烦了。作为一个基佬,不,直男,其实并不关注中间的过程(文字)。其实就是喜欢看图片而已,得想个法子方便快捷地浏览,不,是欣赏这些图片。

下载图片(第一版)

python果然是个好东西,简单代码就可以方便快捷地down下一个页面中的图片:

#coding=utf-8
import urllib
import redef getHtml(url):page = urllib.urlopen(url)html = page.read()return htmldef getImg(html):reg = r'original="([0-9a-zA-Z:/._]+?)" data-actualsrc'imgre = re.compile(reg)imglist = re.findall(imgre,html)x = 0for imgurl in imglist:print imgurlsubreg = r'\.([a-z]+?$)'subre  = re.compile(subreg)subs2  = re.findall(subre,imgurl)name = 'e://pics/%s.%s' % (x, subs2[0])urllib.urlretrieve(imgurl, name)x += 1def getPage(text):reg  = r'data-pagesize="([0-9]+?)"'rec  = re.compile(reg)list = re.findall(rec,text)return list[0]url = "https://www.zhihu.com/question/****"     # 把问题url贴到这里
html = getHtml(url)
getImg(html)
print "page=%s" % getPage(html)
print "done!"

运行脚本

(好像画风不太对啊)

怎么才几张图片,原文里面应该很多图片的。

下载图片(第二版)

调试一下可以发现,网页并不是一次性加载出所有答案的。点击网页最底下的【更多】按钮,服务端才会返回剩下的内容。那么脚本就需要修改一下了:

  1. 先获取页面,从页面中获取页码;
  2. 根据页码,下载下所有页中的图片。
#coding=utf-8
import requests
import shutil
import re
import urllib
import astcount=0
def getHtml(url):r = requests.get(url)return r.textdef saveImage(url, path):r = requests.get(url, stream=True)if r.status_code == 200:with open(path, 'wb') as f:r.raw.decode_content = Trueshutil.copyfileobj(r.raw, f)del rreturn 0def getImg(html):global countreg = r'original="([0-9a-zA-Z:/._]+?)" data-actualsrc'imgre = re.compile(reg)imglist = re.findall(imgre,html)for imgurl in imglist:count += 1subreg = r'\.([a-z]+?$)'subre  = re.compile(subreg)subs2  = re.findall(subre,imgurl)path = 'e://pics/%s.%s' % (count, subs2[0])I = saveImage(imgurl, path)print '%s --> %s ' % (count, imgurl)def getPage(text):reg  = r'data-pagesize="([0-9]+?)"'rec  = re.compile(reg)list = re.findall(rec,text)return list[0]question = 27203***          # 问题ID
url = "https://www.zhihu.com/question/%s" % (question)
html = getHtml(url)
getImg(html)page = int(getPage(html))
next_url = "https://www.zhihu.com/node/QuestionAnswerListV2"if page > 1:for i_page in range(2, page):next_page = i_page * 10params = '{"url_token":%s, "pagesize":%s, "offset": %s}' % (question, page, next_page)post_data = {'method':'next', 'params':params, '_xsrf': '521beffc0ca2d5747d6d981c6cc25dea'}data=urllib.urlencode(post_data)headers = {'Content-Type':'application/x-www-form-urlencoded'}r = requests.post(next_url, data=data, headers=headers)text = r.texttext = ast.literal_eval(text)text = text['msg']text = ''.join(text)text = text.replace('\\', '')getImg(text)print "page=%s" % page
print "Down %s pics !!!" % count

再次运行脚本

画风终于对了,这个脚本顺利地爬下了10页中的所有图片。

呃,我赶着去欣赏图片去了,拜了个拜。

[python](爬虫)如何使用正确的姿势欣赏知乎的“长得好看是怎样一种体验呢?”问答中的相片...相关推荐

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

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

  2. Python re 库的正确使用姿势

    前提假设: 已经充分掌握 PCRE 风格正则表达式 熟读 re 库文档 Why 正则表达式的强大已不用我赘述,Python 对此的支持也是十分强大,只不过: re.search(pattern, st ...

  3. python爬虫 - 代理ip正确使用方法

    主要内容:代理ip使用原理,怎么在自己的爬虫里设置代理ip,怎么知道代理ip是否生效,没生效的话哪里出了问题,个人使用的代理ip(付费). 目录 代理ip原理 输入网址后发生了什么呢? 代理ip做了什 ...

  4. [python爬虫] BeautifulSoup和Selenium简单爬取知网信息测试

    作者最近在研究复杂网络和知识图谱内容,准备爬取知网论文相关信息进行分析,包括标题.摘要.出版社.年份.下载数和被引用数.作者信息等.但是在爬取知网论文时,遇到问题如下:   1.爬取内容总为空,其原因 ...

  5. python爬虫菜鸟教程-python爬虫项目(新手教程)之知乎(requests方式)

    -前言 之前一直用scrapy与urllib姿势爬取数据,最近使用requests感觉还不错,这次希望通过对知乎数据的爬取为 各位爬虫爱好者和初学者更好的了解爬虫制作的准备过程以及requests请求 ...

  6. 使用python爬虫——爬取淘宝图片和知乎内容

    本文主要内容: 目标:使用python爬取淘宝图片:使用python的一个开源框架pyspider(非常好用,一个国人写的)爬取知乎上的每个问题,及这个问题下的所有评论 最简单的爬虫--如下pytho ...

  7. python爬虫实战(1)——爬取知乎热门回答图片

    文章目录 一.前期准备 1.查看网页源代码 2.看图片在什么位置 二.python代码实现 1.解析网页 2.获取问题标题 3.获取回答者信息 4.图片保存到本地 5.完整代码 三.最终结果 一.前期 ...

  8. python爬虫实战(2)——爬取知乎热榜内容

    文章目录 一.前期准备 1.获取headers 2.查看网页源代码 二.python代码实现 1.解析网页 2.获取标签 3.完整代码 三.最终结果 一.前期准备 1.获取headers 登录知乎官网 ...

  9. Python爬虫初学(三)—— 模拟登录知乎

    模拟登录知乎 这几天在研究模拟登录, 以知乎 - 与世界分享你的知识.经验和见解为例.实现过程遇到不少疑问,借鉴了知乎xchaoinfo的代码,万分感激! 知乎登录分为邮箱登录和手机登录两种方式,通过 ...

最新文章

  1. uboot环境变量-带分号的环境变量
  2. java 关闭按钮监听_Java事件处理(1)——实现简单的事件监听功能
  3. “面试不败计划”:集合知识整体总结
  4. mysql1526错误_mysql 分区 1526错误
  5. python中raise stoplteration_Python迭代器
  6. QAQorz的训练记录
  7. Java集合之ArrayList
  8. 每个Java开发者应该知道(并爱上)的8个工具
  9. Linux常用软件包
  10. 独立游戏如何对接STEAM SDK
  11. selenium报错信息-- Python 中 'unicodeescape' codec can't decode bytes in position XXX: trun错误解决方案...
  12. c语言24小时制转化12,在C ++中将时间从24小时制转换为12小时制
  13. 新年到,小飞猫来啦~
  14. 云原生Java架构师——KubeSphere DevOps流水线部署RuoyiCloud
  15. python如何微信公众号刷票_问卷星刷票
  16. 微型计算机原理8255并行接口实验,微机原理实验二 8255A并行接口应用.pdf
  17. JEPF软件快速开发平台学习心得之请假单功能的完成(一)
  18. 悟空分词与mysql结合_中文分词与关键词提取实践小结
  19. 使用浏览器自带打印功能,去除页眉页脚,横屏打印等
  20. windows下批量生成文件夹

热门文章

  1. 无法分配更多的internet句柄怎么回事_一文精通Java NIO(内容较多,无耐心者勿点)...
  2. java与sql用windows身份连接,使用Windows身份验证将我的Sql Server 2008数据库连接到我的Java项目...
  3. 3399 mysql_MySQL索引
  4. mysql id in set_mysql数据库中find_in_set()和in()用法区别
  5. nebula注释符号
  6. 收费最低的云存储_百度云:虚拟主机11元/6个月,入门级云服务器60元/年
  7. matlab中inband函数,pjsip 实现 DTMF 数据获取,并解析按键信息
  8. 讲解虚拟服务器的书_程序员不得不看的书
  9. LeetCode-53. 最大子序和-最简单的动态规划(Python3)
  10. 百练OJ:1007:DNA排序