[python](爬虫)如何使用正确的姿势欣赏知乎的“长的XXX是怎样体验”这一类中的图片

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

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

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

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

下载图片(第一版)

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

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

时间: 2024-10-19 03:31:57

[python](爬虫)如何使用正确的姿势欣赏知乎的“长的XXX是怎样体验”这一类中的图片的相关文章

python爬虫项目(新手教程)之知乎(requests方式)

-前言 之前一直用scrapy与urllib姿势爬取数据,最近使用requests感觉还不错,这次希望通过对知乎数据的爬取为 各位爬虫爱好者和初学者更好的了解爬虫制作的准备过程以及requests请求方式的操作和相关问题.当然这是一个简单的爬虫项目,我会用重点介绍爬虫从开始制作的准备过程,目的是为了让和我一样自学的爬虫爱好者和初学者更多的了解爬虫工作. 一.观察目标网页模板和策略 很多人都忽略这一步,其实这一步最为重要,因为它决定了你将采取什么策略来获取数据,也可以评估出你能够做到什么程度 (1

Python 爬虫入门(二)—— IP代理使用

上一节,大概讲述了Python 爬虫的编写流程, 从这节开始主要解决如何突破在爬取的过程中限制.比如,IP.JS.验证码等.这节主要讲利用IP代理突破. 1.关于代理 简单的说,代理就是换个身份.网络中的身份之一就是IP.比如,我们身在墙内,想要访问google.u2b.fb等,直接访问是404,所以要换个不会被墙的IP,比如国外的IP等.这个就是简单的代理. 在爬虫中,有些网站可能为了防止爬虫或者DDOS等,会记录每个IP的访问次数,比如,有些网站允许一个IP在1s(或者别的)只能访问10次等

小白学 Python 爬虫(17):Requests 基础使用

人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Linux基础入门 小白学 Python 爬虫(4):前置准备(三)Docker基础入门 小白学 Python 爬虫(5):前置准备(四)数据库基础 小白学 Python 爬虫(6):前置准备(五)爬虫框架的安装 小白学 Python 爬虫(7):HTTP 基础 小白学 Python 爬虫(8):网页基

Python 操作 MySQL 的正确姿势

欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者:邵建永 使用Python进行MySQL的库主要有三个,Python-MySQL(更熟悉的名字可能是MySQLdb),PyMySQL和SQLAlchemy. Python-MySQL资格最老,核心由C语言打造,接口精炼,性能最棒,缺点是环境依赖较多,安装复杂,近两年已停止更新,只支持Python2,不支持Python3. PyMySQL为替代Python-MySQL而生,纯python打造,接口与Pyt

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

通过 python爬虫入门:什么是爬虫,怎么玩爬虫? 我们知道了什么是爬虫 也知道了爬虫的具体流程 那么在我们要对某个网站进行爬取的时候 要对其数据进行分析 就要知道应该怎么请求 就要知道获取的数据是什么样的 所以我们要学会怎么抓咪咪! 哦,不对. 我们要学会怎么数据抓包   虽然小馒头也是包的一种 ok...anyway... 打开我们的 Chrome 浏览器 在这里 小帅b 提醒大家一句 尽量不要用国产浏览器 很多是有后门的 所以 Chrome 是首选! ok,打开 Chrome 浏览器之后

python爬虫19 | 遇到需要的登录的网站怎么办?用这3招轻松搞定!

你好 由于你是游客 无法查看本文 请你登录再进 谢谢合作 当你在爬某些网站的时候 需要你登录才可以获取数据 咋整? 莫慌 小帅b把这几招传授给你 让你以后从容应对 那么 接下来就是 学习 python 的正确姿势 登录的常见方法无非是这两种 1.让你输入帐号和密码登录 2.让你输入帐号密码+验证码登录 今天 小帅b先跟你说说第一种 需要验证码的咱们下一篇再讲 第一招 Cookie大法 你平常在上某个不为人知的网站的时候 是不是发现你只要登录一次 就可以一直看到你想要的内容 过了一阵子才需要再次登

python爬虫22 | 以后我再讲python「模拟登录」我就是狗

接下来就是 学习python的正确姿势 做爬虫 绕不开模拟登录 为此小帅b给大家支了几招 python爬虫19 | 遇到需要的登录的网站怎么办?用这3招轻松搞定! 有些网站的登录很弱鸡 传个用户名和密码 来个 POST 请求就搞定了 但还是少数 大多网站还是需要验证码的 登录需要验证码 频繁请求需要验证码 为此小帅b教你如何自动识别 python爬虫20 | 小帅b教你如何识别图片验证码 python爬虫21 | 对于b站这样的滑动验证码,不好意思,照样自动识别 当然了 市面上还有许多打码验证平

简谈-Python爬虫破解JS加密的Cookie

通过Fiddler抓包比较,基本可以确定是JavaScript生成加密Cookie导致原来的请求返回521. 发现问题: 打开Fiddler软件,用浏览器打开目标站点(http://www.kuaidaili.com/proxylist/2/) .可以发现浏览器对这个页面加载了两次,第一次返回521,第二次才正常返回数据.很多没有写过网站或是爬虫经验不足的童鞋,可能就会觉得奇怪为什么会这样?为什么浏览器可能正常返回数据而代码却不行? 仔细观察两次返回的结果可以发现: 1.第二次请求比第一次请求的

[Python爬虫] 中文编码问题:raw_input输入、文件读取、变量比较等str、unicode、utf-8转换问题

最近研究搜索引擎.知识图谱和Python爬虫比较多,中文乱码问题再次浮现于眼前.虽然市面上讲述中文编码问题的文章数不胜数,同时以前我也讲述过PHP处理数据库服务器中文乱码问题,但是此处还是准备简单做下笔记.方便以后查阅和大家学习. 中文编码问题的处理核心都是--保证所有的编码方式一致即可,包括编译器.数据库.浏览器编码方式等,而Python通常的处理流程是将unicode作为中间转换码进行过渡.先将待处理字符串用unicode函数以正确的编码转换为Unicode码,在程序中统一用Unicode字