文章目录

  • 前言
  • 一、极简壁纸的反爬手段
  • 二、爬取过程
    • 1.调出抓包工具
    • 2.查找图片的地址
    • 3. 图片地址的解析
    • 4. 下载图片
  • 总结

前言

作者增加了反爬手段,这些方法都用不了了

本文主要介绍的技术要点:

  1. 基于requests模块的post请求
  2. 了解一些js逆向

一、极简壁纸的反爬手段

  1. 无法使用F12调出抓包工具
  2. js反爬
  3. 基于人道主义,国内很良心的壁纸,希望各位做只善良的爬虫

二、爬取过程

1.调出抓包工具




从上面我们可以看出抓包获取到的图片网址的大小和网页中展示给出的比例不一样,同时从a标签的网址中我们看出图片应该为缩略图,只是用来展示。

2.查找图片的地址

既然在网页源代码中找不到图片,我们则一直加载图片,发现其实动态加载,则我们可以从抓包工具的Network中查找

一般动态加载的文件都放到了XHR这个选项中,随着滑动滚轮,我们发现getJson这个文件一直在增加,由此断定图片的网址在这里

但是当我们打开文件的内容时,发现是这些东西

当时就处于了懵逼状态,这是什么了(我的fuck)然后放弃了……
当然这是不可能的,既然动态加载获取的是这些东西,那应该与图片的地址肯定有关系,于是在我点开一张图片时

发现抓包工具中多出来一个网址,然后获取到网址打开一看,果然是图片的地址,这样我们就获取到了图片的地址

3. 图片地址的解析

我们多获取一些图片的地址,看其中有什么区别:
https://w.wallhaven.cc/full/5w/wallhaven-5wo3j8.jpg
https://w.wallhaven.cc/full/ym/wallhaven-ym3veg.jpg
https://w.wallhaven.cc/full/83/wallhaven-836rgy.jpg

我们可以发现每个网址大体就是后面的不一样,同时突然想起了getJson中的源码,在其源码中搜索5wo3j8

由此我们知道了这里面这个就是图片地址中的部分,我们只需获取到getJson中的源码即可。

4. 下载图片

当我们查看getJson的请求时,发现是post请求(啊,好久没用过post请求了,然后打开笔记又看了下post请求的过程)
首先编写请求头

headers = {"accept-encoding": "gzip,deflate,br","accept-language": "zh-CN, zh,q = 0.9, en - US,q = 0.8, en,q = 0.7, zh - TW,q = 0.6","access": "918c3eb8f5d471ffdc7a34365152b220b07d8bdc5c991a47961564a62b84834","content-length": "30","content-type": "application/json","location": "bz.zzzmh.cn","origin": "https://bz.zzzmh.cn","referer": "https://bz.zzzmh.cn/","sign": "273a3b6b44a285e367af744c37eb30f6","timestamp": "1614348146725","User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36",}

在这里我们分析下每个getJson页面的请求头


我们会发现每个getJson文件的access和timestamp不一样
这里的access使用了加密算法(安全散列算法)
至于这里如何加密的,我们需要查看access的形成


import time
import hashlib
timestamp = str(int(time.time()*1000))   # 时间戳的长度要与请求到的时间戳对应
# print(timestamp)
access = "application/json" + "bz.zzzmh.cn" + "273a3b6b44a285e367af744c37eb30f6"+ timestamp
access = hashlib.sha256(access.encode("utf-8")).hexdigest()

在这里我们获取到了access和timestamp
至此我们可以编写代码了

import json
import requests
import time
import hashlib"""post请求需要携带参数"content-type": "application/json"当content-type的值为json格式时,post请求时必须为json格式当content-type的值为键值对格式时,post请求时必须为键值对格式每个网址不一样的地方timestamp: 时间戳access:加密算法:sha家族(安全散列算法)
"""timestamp = str(int(time.time()*1000))   # 时间戳的长度要与请求到的时间戳对应
# print(timestamp)
access = "application/json" + "bz.zzzmh.cn" + "273a3b6b44a285e367af744c37eb30f6"+ timestamp
access = hashlib.sha256(access.encode("utf-8")).hexdigest()def main():url = "https://api.zzzmh.cn/bz/getJson"headers = {"accept-encoding": "gzip,deflate,br","accept-language": "zh-CN, zh,q = 0.9, en - US,q = 0.8, en,q = 0.7, zh - TW,q = 0.6","access": access,"content-length": "30","content-type": "application/json","location": "bz.zzzmh.cn","origin": "https://bz.zzzmh.cn","referer": "https://bz.zzzmh.cn/","sign": "273a3b6b44a285e367af744c37eb30f6","timestamp": timestamp,"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36",}data = {"pageNum": "1","target": "index"}response = requests.post(url, headers=headers, data=json.dumps(data)).json()imageList = response.get("result").get("records")for image in imageList:imageType = image.get("t")imageNum = image.get("i")newurl = "https://w.wallhaven.cc/full/{}/wallhaven-{}.{}"if imageType == "j":newurl = newurl.format(imageNum[:2],imageNum, "jpg")elif imageType == "p":newurl = newurl.format(imageNum[:2],imageNum, "png")print("正在下载:"+newurl)image = requests.get(newurl).contentpath = "D:\Code\spider\douban\python爬虫进阶\图片\\" + imageNum + ".jpg"with open(path, 'wb') as f:f.write(image)if __name__ == '__main__':main()

总结

以后就是获取极简壁纸的高清壁纸的过程,其中的重点是js逆向,access的获取。

爬虫案例1:js逆向获取极简壁纸的高清壁纸相关推荐

  1. Python爬虫实战 使用线程池批量爬取必应1080P高清壁纸

    本文纯粹为了技术学习,内容如有侵权,请告知! 目标URL:https://bing.ioliu.cn 爬取的图片 Python用到的主要模块 import requests from lxml imp ...

  2. Python爬虫实例 wallhaven网站高清壁纸爬取。

    文章目录 Python爬虫实例 wallhaven网站高清壁纸爬取 一.数据请求 1.分析网页源码 2.全网页获取 二.数据处理 1.提取原图所在网页链接 2.获取高清图片地址及title 三.下载图 ...

  3. 爬虫系列(1):极简爬虫——基于requests和re爬取安居客上海二手房价数据

    爬虫系列(1):极简爬虫--基于requests和re爬取安居客上海二手房价数据 入坑爬虫已经有一年多,一直想好好记录下从各位前辈和大佬处学到的技术,因此开了一个爬虫系列,想借此细致地介绍和演示其中的 ...

  4. Python爬虫实战 | 利用多线程爬取 LOL 高清壁纸

    来源:公众号[杰哥的IT之旅] 作者:阿拉斯加 ID:Jake_Internet 如需获取本文完整代码及 LOL 壁纸,请为本文右下角点赞并添加杰哥微信:Hc220088 获取. 一.背景介绍 随着移 ...

  5. python手机壁纸超清_Python爬虫-王者荣耀高清壁纸下载

    绪论 网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.python是一种跨平台的计算机程序设计语言.是一种 ...

  6. Python爬虫实战| Python爬取英雄联盟高清壁纸

    先看一下最终爬取的效果,每个英雄的壁纸都被爬取下来了: "黑暗之女 安妮"的12张壁纸: 高清大图: 下面开始正式教学! 版本:Python 3.5 工具:Jupyter note ...

  7. 别人用钱,而我用python爬虫爬取了一年的4K高清壁纸

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 爬虫是什么? 网络爬虫,也叫网络蜘蛛(Web Spider).它根据网页地 ...

  8. python爬虫--王者荣耀高清壁纸下载(多线程)

    下面的代码是采用多线程的生产者消费者模式,下载速度比之前文章的普通下载快一点. 普通下载的链接:python爬虫–王者荣耀高清壁纸下载 代码在下载方面是没有问题的,可以直接运行,就是在收集打不开链接的 ...

  9. 爬虫爬取大量高清壁纸图片

    爬虫爬取大量高清壁纸 思路: 首先从网页入手,观察网页整体结构,因为本段代码使用的是Xpath解析(想了解Xpath解析可以看上一篇) import requests from lxml import ...

  10. python爬虫之抓取高清壁纸

    对于很多电脑玩家喜欢给自己电脑装饰精美的壁纸,但是碍于图片大小清晰度等原因无法找到合适的,今天我就利用爬虫技术手段,现实高清壁纸抓取,需要的小伙伴可以一起过来看看! # coding=utf-8imp ...

最新文章

  1. access oracle sql语句,在 Access 中使用 SQL 建索引
  2. 从思维导图学习操作系统(三)
  3. c语言口令验证模块加强版,[C语言学习第3章口令验证模块的开发.ppt
  4. HTC 败诉对 Android 意味着什么?
  5. Anaconda+tensorflow+keras的下载与安装
  6. #6281. 数列分块入门 5
  7. 51NOD 2026:Gcd and Lcm——题解
  8. Docker基本使用(一)
  9. Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:2.7:resources
  10. Linux中如何恢复rm命令误删除的文件之extundelete编译安装及使用
  11. 10G网络布线方案有多少种?
  12. 领域词汇知识库的类型、可用资源与构建技术漫谈
  13. 知乎提示浏览器版本过低怎么办
  14. 如果你的下属不服从你得管理,你会怎么办?
  15. Python培训价格多少
  16. SQL中连接JOINS总结
  17. Computed property was assigned to but it has no setter问题随记
  18. mmdetection训练自己的数据并评估mAP
  19. vue + echarts + ( bmap) 百度地图 实现公交、骑行、车辆 轨迹图
  20. 微云视频转码架构介绍

热门文章

  1. 深信服超融合HCI初级笔试题目(三套)
  2. 氨基-peg2000-水溶CulnS/ZnS量子点|NH2-PEG-CulnS/ZnSQDS的透射电镜(TEM)和高分辨透射电镜(HRTEM)图片
  3. 教程:如何制作一个多功能U盘
  4. java 实现搜索附近人功能
  5. 如何利用Social Listening从社会化媒体中“提炼”有价值的信息?
  6. Tomb Raider(暴力模拟)
  7. python shutil删除_Python标准库shutil中用于删除文件夹的方法是( )
  8. AABB和OBB包围盒简介
  9. AK acm/oj.aabb
  10. 考研复试中可能会被问到的40个问题