[python](爬虫)如何使用正确的姿势欣赏知乎的“长得好看是怎样一种体验呢?”问答中的相片
从在知乎关注了几个大神,我发现我知乎的主页画风突变。经常会出现
***长得好看是怎样一种体验呢?
不用***,却长得好看是一种怎样的体验?
什么样***作为头像?
...
诸如此类的问答。点进去之后发现果然很不错啊,大神果然是大神,关注的焦点就是不一样。

看多了几次之后,觉得太麻烦了。作为一个基佬,不,直男,其实并不关注中间的过程(文字)。其实就是喜欢看图片而已,得想个法子方便快捷地浏览,不,是欣赏这些图片。
下载图片(第一版)
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页中的所有图片。
呃,我赶着去欣赏图片去了,拜了个拜。
[python](爬虫)如何使用正确的姿势欣赏知乎的“长得好看是怎样一种体验呢?”问答中的相片的更多相关文章
- python爬虫项目(新手教程)之知乎(requests方式)
-前言 之前一直用scrapy与urllib姿势爬取数据,最近使用requests感觉还不错,这次希望通过对知乎数据的爬取为 各位爬虫爱好者和初学者更好的了解爬虫制作的准备过程以及requests请求 ...
- Python爬虫初学(三)—— 模拟登录知乎
模拟登录知乎 这几天在研究模拟登录, 以知乎 - 与世界分享你的知识.经验和见解为例.实现过程遇到不少疑问,借鉴了知乎xchaoinfo的代码,万分感激! 知乎登录分为邮箱登录和手机登录两种方式,通过 ...
- 小白学 Python 爬虫(2):前置准备(一)基本类库的安装
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 本篇内容较长,各位同学可以先收藏后再看~~ 在开始讲爬虫之前,还是先把环境搞搞好,工欲善其事必先利其器嘛~~~ 本篇 ...
- Python爬虫初探 - selenium+beautifulsoup4+chromedriver爬取需要登录的网页信息
目标 之前的自动答复机器人需要从一个内部网页上获取的消息用于回复一些问题,但是没有对应的查询api,于是想到了用脚本模拟浏览器访问网站爬取内容返回给用户.详细介绍了第一次探索python爬虫的坑. 准 ...
- Python爬虫的N种姿势
问题的由来 前几天,在微信公众号(Python爬虫及算法)上有个人问了笔者一个问题,如何利用爬虫来实现如下的需求,需要爬取的网页如下(网址为:https://www.wikidata.org/w/ ...
- 转载 Python 操作 MySQL 的正确姿势 - 琉璃块
Python 操作 MySQL 的正确姿势 收录待用,修改转载已取得腾讯云授权 作者 |邵建永 编辑 | 顾乡 使用Python进行MySQL的库主要有三个,Python-MySQL(更熟悉的名字可能 ...
- 一个月入门Python爬虫,轻松爬取大规模数据
Python爬虫为什么受欢迎 如果你仔细观察,就不难发现,懂爬虫.学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方面,像 Python这样的编程语言提供越来越多的优秀工具,让爬虫变得 ...
- python爬虫入门02:教你通过 Fiddler 进行手机抓包
哟~哟~哟~ hi起来 everybody 今天要说说怎么在我们的手机抓包 通过 python爬虫入门01:教你在Chrome浏览器轻松抓包 我们知道了 HTTP 的请求方式 以及在 Chrome 中 ...
- python爬虫入门01:教你在 Chrome 浏览器轻松抓包
通过 python爬虫入门:什么是爬虫,怎么玩爬虫? 我们知道了什么是爬虫 也知道了爬虫的具体流程 那么在我们要对某个网站进行爬取的时候 要对其数据进行分析 就要知道应该怎么请求 就要知道获取的数据是 ...
随机推荐
- php工作笔记2-php编码效率
1.尽量静态化: 如果一个方法能被静态,那就声明它为静态的,速度可提高1/4,甚至我测试的时候,这个提高了近三倍.当然了,这个测试方法需要在十万级以上次执行,效果才明显.其实静态方法和非静态方法的效率 ...
- CountDownLatch如何使用
正如每个Java文档所描述的那样,CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行.在Java并发中,countdownlatch的概念是一 ...
- Druid Monitor监控JavaSE,杀cmd端口进程
1.需要在启动命令添加相关jvm参数 -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname -Dcom.sun.management.jm ...
- Java基础常见英语词汇
Java基础常见英语词汇(共70个) ['ɔbdʒekt] ['ɔ:rientid]导向的 ['prəʊɡræmɪŋ]编程 OO: object ...
- MySql开始日期、结束日期查询
str_to_date('2016-08-24', '%Y-%m-%d %H') validStartTime str_to_date('2016-09-16', '%Y-%m-%d %H') val ...
- Vim特定行行尾追加
python print 替换 logging 1.print语句最后追加")". :%s/\(.*\)print \(.*\)/\1print \2)/g 2." ...
- ZOJ
某年浙大研究生考试的题目. 题目描述: 对给定的字符串(只包含'z','o','j'三种字符),判断他是否能AC. 是否AC的规则如下:1. zoj能AC:2. 若字符串形式为xzojx,则也能AC, ...
- MVC开发基础
新建--项目--ASP.NET MVC 4 WEB 应用程序 MVC: M--Model 模型层 放置数据访问类,linq V--View 视图层 界面层 aspx文件.只 ...
- 什么时候该用NoSQL?
: 杂谈 NoSQL这两年越来越热,尤其是大型互联网公司非常热衷这门技术.根据笔者的经验,并不是任何场景,NoSQL都要优于关系型数据库.下面我们来具体聊聊,什么时候使用NoSQL比较给力: 1) ...
- Android笔记之——消息Toast
java: package com.example.myapplication;import android.support.v7.app.AppCompatActivity;import andro ...