当前位置: 首页 > article >正文

[Python爬虫]煎蛋网OOXX妹子图爬虫(1)——解密图片地址

之前在鱼C论坛的时候,看到很多人都在用Python写爬虫爬煎蛋网的妹子图,当时我也写过,爬了很多的妹子图片。后来煎蛋网把妹子图的网页改进了,对图片的地址进行了加密,所以论坛里面的人经常有人问怎么请求的页面没有链接。这篇文章就来说一下煎蛋网OOXX妹子图的链接获取方式。

首先说明一下,之前煎蛋网之所以增加了反爬虫机制,应该就是因为有太多的人去爬他们的网站了。爬虫频繁的访问网站会给网站带来压力,所以,建议大家写爬虫简单的运行成功就适可而止,不要过分地去爬别人的东西。

爬虫思路分析

图片下载流程图

首先,用一张简单的流程图(非规范流程图格式)来展示一下爬取简单网的妹子图的整个流程:

煎蛋网爬虫流程图

流程图解读

1、爬取煎蛋网的妹子图,我们首先要打开任意一个妹子图的页面,比如 http://jandan.net/ooxx/page-44#comments 然后,我们需要请求这个页面,获取2个关键的信息(后续会说明信息的具体作用),其中第一个信息是每个妹子图片的 hash 值,这个是后续用来解密生成图片地址的关键信息。

2、在页面中除了提取到图片的 hash 之外,还有提取到当前页的一个关键的js文件的地址,这个js文件中包含了一个同样是用来生成图片地址的关键参数,要得到这个参数,必须去请求这个JS地址,当时妹子图的每个页面的js地址是不同的,所以需要从页面中提取。

3、得到了图片的 hash 和 js 中的关键参数之后,可以根据js 中提供的解密方式,得到图片的链接,这个解密方式后续用Python代码和js代码的参照来说明。

4、有了图片链接,下载图片就不多说了,后续会有第二篇文章,来使用多线程+多进程的方式下载图片。

页面分析

网页源代码解读

我们可以打开一个妹子图的页面,还是最开始的 http://jandan.net/ooxx/page-44#comments 为例,然后查看源代码(注意,不是审查元素),可以看到本应该放图片地址的地方并没有图片地址,而是类似于下面的代码:

<p><img src="//img.jandan.net/img/blank.gif" onload="jandan_load_img(this)" /><span class="img-hash">ece8ozWUT/VGGxW1hlbITPgE0XMZ9Y/yWpCi5Rz5F/h2uSWgxwV6IQl6DAeuFiT9mH2ep3CETLlpwyD+kU0YHpsHPLnY6LMHyIQo6sTu9/UdY5k+Vjt3EQ</span></p>

从这个代码可以看出来,图片地址被一个js函数代替了,也就是说图片地址是由这个jandan_load_img(this)函数来获取并加载的,所以,现在的关键是,需要到JS文件中查找这个函数的意义。

js文件解读

通过在每个js文件中搜索jandan_load_img,最后可以在一个地址类似于 http://cdn.jandan.net/static/min/1d694f08895d377af4835a24f06090d0.29100001.js 的文件中找到这个函数的定义,将压缩的JS代码格式化查看,可以看到具体的定义如下片段:

function jandan_load_img(b) {var d = $(b);var f &
http://www.lryc.cn/news/2414755.html

相关文章:

  • 南大通用GBase 8d产品ldapsearch命令详解
  • 3-8译码器
  • 电子元器件基础6---三极管
  • Java Applet的运行原理和生命周期
  • 运维面板推荐
  • SHELL 基础语法
  • EVN双归组网环路问题解决
  • dbscan算法_聚类算法_层次聚类_密度聚类(dbscan,meanshift)_划分聚类(Kmeans)详解
  • windows命令_在Windows中管理无线网络的8个CMD命令
  • 对达梦数据库CASE_SENSITIVE参数的探讨
  • KVM详解,太详细太深入了,经典
  • Android性能优化第(六)篇---TraceView 分析图怎么看
  • P2P(Peer to Peer)网络的原理
  • 【Android TV 开发】-->一些优秀 TV 开发相关框架 文章
  • OpenGL绘图基础
  • 基础电子元器件介绍-4.二极管
  • 第十三篇 Python建模库介绍
  • Sudoku Problem Solver (数独游戏解谜器)
  • 什么是腾讯云轻量应用服务器?2023年腾讯云轻量与云服务器对比区别有哪些?
  • 洗牌算法
  • 网站设计基础:简述各类有创意的导航方式
  • AutobahnPython: 功能强大的实时通信框架
  • 如何在 Linux下进行文件切割操作?
  • .net面试问答(大汇总)
  • 记一次配置华为路由器DDNS(花生壳)动态域名解析
  • awstats的安装和配置
  • C# System.NullReferenceException 异常与回调函数初始化
  • CSDN积分获取方法(转)
  • 101个微软提供的Visual Studio 2005示例
  • 谷歌浏览器GoogleChrome“无法访问此网站”问题解决