[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!"
复制代码

运行脚本

(好像画风不太对啊)

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

下载图片(第二版)

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

  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页中的所有图片。

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

本文转自 Ron Ngai 博客园博客,原文链接:http://www.cnblogs.com/rond/p/5585706.html  ,如需转载请自行联系原作者

相关文章
|
3月前
|
数据采集 Web App开发 数据安全/隐私保护
实战:Python爬虫如何模拟登录与维持会话状态
实战:Python爬虫如何模拟登录与维持会话状态
|
4月前
|
数据采集 Web App开发 自然语言处理
新闻热点一目了然:Python爬虫数据可视化
新闻热点一目了然:Python爬虫数据可视化
|
5月前
|
数据采集 数据挖掘 测试技术
Go与Python爬虫实战对比:从开发效率到性能瓶颈的深度解析
本文对比了Python与Go在爬虫开发中的特点。Python凭借Scrapy等框架在开发效率和易用性上占优,适合快速开发与中小型项目;而Go凭借高并发和高性能优势,适用于大规模、长期运行的爬虫服务。文章通过代码示例和性能测试,分析了两者在并发能力、错误处理、部署维护等方面的差异,并探讨了未来融合发展的趋势。
481 0
|
3月前
|
数据采集 监控 数据库
Python异步编程实战:爬虫案例
🌟 蒋星熠Jaxonic,代码为舟的星际旅人。从回调地狱到async/await协程天堂,亲历Python异步编程演进。分享高性能爬虫、数据库异步操作、限流监控等实战经验,助你驾驭并发,在二进制星河中谱写极客诗篇。
Python异步编程实战:爬虫案例
|
4月前
|
数据采集 存储 XML
Python爬虫技术:从基础到实战的完整教程
最后强调: 父母法律法规限制下进行网络抓取活动; 不得侵犯他人版权隐私利益; 同时也要注意个人安全防止泄露敏感信息.
836 19
|
3月前
|
数据采集 存储 JSON
Python爬虫常见陷阱:Ajax动态生成内容的URL去重与数据拼接
Python爬虫常见陷阱:Ajax动态生成内容的URL去重与数据拼接
|
3月前
|
数据采集 存储 JavaScript
解析Python爬虫中的Cookies和Session管理
Cookies与Session是Python爬虫中实现状态保持的核心。Cookies由服务器发送、客户端存储,用于标识用户;Session则通过唯一ID在服务端记录会话信息。二者协同实现登录模拟与数据持久化。
|
4月前
|
数据采集 存储 Web App开发
处理Cookie和Session:让Python爬虫保持连贯的"身份"
处理Cookie和Session:让Python爬虫保持连贯的"身份"
|
5月前
|
数据采集 存储 JSON
地区电影市场分析:用Python爬虫抓取猫眼/灯塔专业版各地区票房
地区电影市场分析:用Python爬虫抓取猫眼/灯塔专业版各地区票房
|
4月前
|
数据采集 Web App开发 前端开发
处理动态Token:Python爬虫应对AJAX授权请求的策略
处理动态Token:Python爬虫应对AJAX授权请求的策略

推荐镜像

更多