从在知乎关注了几个大神,我发现我知乎的主页画风突变。经常会出现
***长得好看是怎样一种体验呢?
不用***,却长得好看是一种怎样的体验?
什么样***作为头像?
...
诸如此类的问答。点进去之后发现果然很不错啊,大神果然是大神,关注的焦点就是不一样。
看多了几次之后,觉得太麻烦了。作为一个基佬,不,直男,其实并不关注中间的过程(文字)。其实就是喜欢看图片而已,得想个法子方便快捷地浏览,不,是欣赏这些图片。
下载图片(第一版)
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!"
运行脚本
(好像画风不太对啊)
怎么才几张图片,原文里面应该很多图片的。
下载图片(第二版)
调试一下可以发现,网页并不是一次性加载出所有答案的。点击网页最底下的【更多】按钮,服务端才会返回剩下的内容。那么脚本就需要修改一下了:
- 先获取页面,从页面中获取页码;
- 根据页码,下载下所有页中的图片。
#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页中的所有图片。
呃,我赶着去欣赏图片去了,拜了个拜。