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

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

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

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

下载图片(第一版)

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

#coding=utf-8
import urllib
import re def getHtml(url):
page = urllib.urlopen(url)
html = page.read()
return html def getImg(html):
reg = r'original="([0-9a-zA-Z:/._]+?)" data-actualsrc'
imgre = re.compile(reg)
imglist = re.findall(imgre,html)
x = 0
for imgurl in imglist:
print imgurl
subreg = 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 += 1 def 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 ast count=0
def getHtml(url):
r = requests.get(url)
return r.text def saveImage(url, path):
r = requests.get(url, stream=True)
if r.status_code == 200:
with open(path, 'wb') as f:
r.raw.decode_content = True
shutil.copyfileobj(r.raw, f)
del r
return 0 def getImg(html):
global count
reg = r'original="([0-9a-zA-Z:/._]+?)" data-actualsrc'
imgre = re.compile(reg)
imglist = re.findall(imgre,html)
for imgurl in imglist:
count += 1
subreg = 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 * 10
params = '{"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.text
text = 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爬虫项目(新手教程)之知乎(requests方式)

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

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

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

  3. 小白学 Python 爬虫(2):前置准备(一)基本类库的安装

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 本篇内容较长,各位同学可以先收藏后再看~~ 在开始讲爬虫之前,还是先把环境搞搞好,工欲善其事必先利其器嘛~~~ 本篇 ...

  4. Python爬虫初探 - selenium+beautifulsoup4+chromedriver爬取需要登录的网页信息

    目标 之前的自动答复机器人需要从一个内部网页上获取的消息用于回复一些问题,但是没有对应的查询api,于是想到了用脚本模拟浏览器访问网站爬取内容返回给用户.详细介绍了第一次探索python爬虫的坑. 准 ...

  5. Python爬虫的N种姿势

    问题的由来   前几天,在微信公众号(Python爬虫及算法)上有个人问了笔者一个问题,如何利用爬虫来实现如下的需求,需要爬取的网页如下(网址为:https://www.wikidata.org/w/ ...

  6. 转载 Python 操作 MySQL 的正确姿势 - 琉璃块

    Python 操作 MySQL 的正确姿势 收录待用,修改转载已取得腾讯云授权 作者 |邵建永 编辑 | 顾乡 使用Python进行MySQL的库主要有三个,Python-MySQL(更熟悉的名字可能 ...

  7. 一个月入门Python爬虫,轻松爬取大规模数据

    Python爬虫为什么受欢迎 如果你仔细观察,就不难发现,懂爬虫.学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方面,像 Python这样的编程语言提供越来越多的优秀工具,让爬虫变得 ...

  8. python爬虫入门02:教你通过 Fiddler 进行手机抓包

    哟~哟~哟~ hi起来 everybody 今天要说说怎么在我们的手机抓包 通过 python爬虫入门01:教你在Chrome浏览器轻松抓包 我们知道了 HTTP 的请求方式 以及在 Chrome 中 ...

  9. python爬虫入门01:教你在 Chrome 浏览器轻松抓包

    通过 python爬虫入门:什么是爬虫,怎么玩爬虫? 我们知道了什么是爬虫 也知道了爬虫的具体流程 那么在我们要对某个网站进行爬取的时候 要对其数据进行分析 就要知道应该怎么请求 就要知道获取的数据是 ...

随机推荐

  1. SQL Server 数据库的维护(四)__游标(cursor)

    --维护数据库-- --游标(cursor)-- --概述: 注:使用select语句查询结果的结果集是一个整体,如果想每次处理一行或一部分行数据,游标可以提供这种处理机制.可以将游标理解为指针.指针 ...

  2. Python 2.7下载地址

    网址:https://www.python.org/downloads/release/python-2711/ Python 2.7.11 Release Date: 2015-12-05 Pyth ...

  3. 文本换行word-wrap、word-break与white-space

    本文同步至微信公众号:http://mp.weixin.qq.com/s?__biz=MzAxMzgwNDU3Mg==&mid=401671055&idx=1&sn=b88c9 ...

  4. nagios二次开发(一)---开发思想

    NAGIOS现状   从nagios的官网http://www.nagios.org/及其它已经公开的资料,我们可以知道:在web UI层nagios只提供了给我们查看图形界面的操作,界面上有简单的启 ...

  5. Java画图程序设计

    本文讲述一个画图板应用程序的设计,屏幕抓图如下: 『IShape』 这是所有图形类(此后称作模型类)都应该实现接口,外部的控制类,比如画图板类就通过这个接口跟模型类“交流”.名字开头的I表示它是一个接 ...

  6. Java数组的一些基本算法

    数组的一些算法问题:  排序:(升序)   选择排序:     求每一轮的最小值:再输出   冒泡排序:     相邻的两个数相比较,把两个数相比较,第一个大于好面的就交换位置   shell排序: ...

  7. BZOJ2037: [Sdoi2008]Sue的小球

    Description Sue 和Sandy最近迷上了一个电脑游戏,这个游戏的故事发在美丽神秘并且充满刺激的大海上,Sue有一支轻便小巧的小船.然而,Sue的目标并不是当一个海 盗,而是要收集空中漂浮 ...

  8. python之路-Day11

    引子 到目前为止,我们已经学了网络并发编程的2个套路, 多进程,多线程,这哥俩的优势和劣势都非常的明显,我们一起来回顾下 协程 协程,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程: ...

  9. 2016 China-Final-F题 ——(SA+二分)

    其实是一个很经典的字符串问题,但是我们比赛的时候没出. 先看一下UVA11107这题,题意是,找出最长的一个字符串,在至少一半的字符串中出现过.只要把所有的字符串用不同的分隔符分开,然后SA一下,最后 ...

  10. dma驱动

    http://www.crifan.com/files/doc/docbook/dma_pl08x_analysis/release/html/dma_pl08x_analysis.html#idp2 ...