[python](爬虫)如何使用正确的姿势欣赏知乎的“长得好看是怎样一种体验呢?”问答中的相片...
从在知乎关注了几个大神,我发现我知乎的主页画风突变。经常会出现
***长得好看是怎样一种体验呢? 不用***,却长得好看是一种怎样的体验? 什么样***作为头像? ...
诸如此类的问答。点进去之后发现果然很不错啊,大神果然是大神,关注的焦点就是不一样。
看多了几次之后,觉得太麻烦了。作为一个基佬,不,直男,其实并不关注中间的过程(文字)。其实就是喜欢看图片而已,得想个法子方便快捷地浏览,不,是欣赏这些图片。
下载图片(第一版)
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!"
运行脚本
(好像画风不太对啊)
怎么才几张图片,原文里面应该很多图片的。
下载图片(第二版)
调试一下可以发现,网页并不是一次性加载出所有答案的。点击网页最底下的【更多】按钮,服务端才会返回剩下的内容。那么脚本就需要修改一下了:
- 先获取页面,从页面中获取页码;
- 根据页码,下载下所有页中的图片。
#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](爬虫)如何使用正确的姿势欣赏知乎的“长得好看是怎样一种体验呢?”问答中的相片...相关推荐
- python爬虫实战(一)--爬取知乎话题图片
原文链接python爬虫实战(一)–爬取知乎话题图片 前言 在学习了python基础之后,该尝试用python做一些有趣的事情了–爬虫. 知识准备: 1.python基础知识 2.urllib库使用 ...
- Python re 库的正确使用姿势
前提假设: 已经充分掌握 PCRE 风格正则表达式 熟读 re 库文档 Why 正则表达式的强大已不用我赘述,Python 对此的支持也是十分强大,只不过: re.search(pattern, st ...
- python爬虫 - 代理ip正确使用方法
主要内容:代理ip使用原理,怎么在自己的爬虫里设置代理ip,怎么知道代理ip是否生效,没生效的话哪里出了问题,个人使用的代理ip(付费). 目录 代理ip原理 输入网址后发生了什么呢? 代理ip做了什 ...
- [python爬虫] BeautifulSoup和Selenium简单爬取知网信息测试
作者最近在研究复杂网络和知识图谱内容,准备爬取知网论文相关信息进行分析,包括标题.摘要.出版社.年份.下载数和被引用数.作者信息等.但是在爬取知网论文时,遇到问题如下: 1.爬取内容总为空,其原因 ...
- python爬虫菜鸟教程-python爬虫项目(新手教程)之知乎(requests方式)
-前言 之前一直用scrapy与urllib姿势爬取数据,最近使用requests感觉还不错,这次希望通过对知乎数据的爬取为 各位爬虫爱好者和初学者更好的了解爬虫制作的准备过程以及requests请求 ...
- 使用python爬虫——爬取淘宝图片和知乎内容
本文主要内容: 目标:使用python爬取淘宝图片:使用python的一个开源框架pyspider(非常好用,一个国人写的)爬取知乎上的每个问题,及这个问题下的所有评论 最简单的爬虫--如下pytho ...
- python爬虫实战(1)——爬取知乎热门回答图片
文章目录 一.前期准备 1.查看网页源代码 2.看图片在什么位置 二.python代码实现 1.解析网页 2.获取问题标题 3.获取回答者信息 4.图片保存到本地 5.完整代码 三.最终结果 一.前期 ...
- python爬虫实战(2)——爬取知乎热榜内容
文章目录 一.前期准备 1.获取headers 2.查看网页源代码 二.python代码实现 1.解析网页 2.获取标签 3.完整代码 三.最终结果 一.前期准备 1.获取headers 登录知乎官网 ...
- Python爬虫初学(三)—— 模拟登录知乎
模拟登录知乎 这几天在研究模拟登录, 以知乎 - 与世界分享你的知识.经验和见解为例.实现过程遇到不少疑问,借鉴了知乎xchaoinfo的代码,万分感激! 知乎登录分为邮箱登录和手机登录两种方式,通过 ...
最新文章
- uboot环境变量-带分号的环境变量
- java 关闭按钮监听_Java事件处理(1)——实现简单的事件监听功能
- “面试不败计划”:集合知识整体总结
- mysql1526错误_mysql 分区 1526错误
- python中raise stoplteration_Python迭代器
- QAQorz的训练记录
- Java集合之ArrayList
- 每个Java开发者应该知道(并爱上)的8个工具
- Linux常用软件包
- 独立游戏如何对接STEAM SDK
- selenium报错信息-- Python 中 'unicodeescape' codec can't decode bytes in position XXX: trun错误解决方案...
- c语言24小时制转化12,在C ++中将时间从24小时制转换为12小时制
- 新年到,小飞猫来啦~
- 云原生Java架构师——KubeSphere DevOps流水线部署RuoyiCloud
- python如何微信公众号刷票_问卷星刷票
- 微型计算机原理8255并行接口实验,微机原理实验二 8255A并行接口应用.pdf
- JEPF软件快速开发平台学习心得之请假单功能的完成(一)
- 悟空分词与mysql结合_中文分词与关键词提取实践小结
- 使用浏览器自带打印功能,去除页眉页脚,横屏打印等
- windows下批量生成文件夹
热门文章
- 无法分配更多的internet句柄怎么回事_一文精通Java NIO(内容较多,无耐心者勿点)...
- java与sql用windows身份连接,使用Windows身份验证将我的Sql Server 2008数据库连接到我的Java项目...
- 3399 mysql_MySQL索引
- mysql id in set_mysql数据库中find_in_set()和in()用法区别
- nebula注释符号
- 收费最低的云存储_百度云:虚拟主机11元/6个月,入门级云服务器60元/年
- matlab中inband函数,pjsip 实现 DTMF 数据获取,并解析按键信息
- 讲解虚拟服务器的书_程序员不得不看的书
- LeetCode-53. 最大子序和-最简单的动态规划(Python3)
- 百练OJ:1007:DNA排序