网页抓取解密(用Python写爬虫爬煎蛋网的妹子图的链接获取方式)

优采云 发布时间: 2022-01-13 00:09

  网页抓取解密(用Python写爬虫爬煎蛋网的妹子图的链接获取方式)

  之前在鱼C论坛的时候,看到很多人都在用Python写女生在煎蛋网络上爬行的图片。那个时候还写爬爬了很多女生的照片。后来,简单网对女孩图片的网页进行了改进,并对图片地址进行了加密,所以论坛里经常有人问,请求的页面怎么没有链接。在这篇文章文章中,我将讨论如何获取的OOXX女孩图片的链接。

  首先说明一下,炒蛋网之前之所以加入反爬机制,是因为爬他们的网站的人太多了。爬虫网站的频繁访问会给网站带来压力,所以建议大家编写简单运行成功的爬虫,不要过多爬取。

  爬虫思路分析图片下载流程图

  首先用一个简单的流程图(非标准流程图格式)来展示爬取简单网络的姐妹图的*敏*感*词*:

  

  流程图解读

  1、 爬取炒蛋的姐妹图,首先需要打开姐妹图的任意页面,比如#comments,然后我们需要请求这个页面获取2个关键信息(信息的具体作用后面会解释),其中第一个信息是每个女孩的图片的hash值,是后面用来解密生成的图片地址的关键信息。

  2、除了页面中提取的图片的hash,还有提取到当前页面的一个关键js文件的地址。这个js文件收录一个关键参数,也是用来生成图片地址的。要获取这个参数,你必须请求这个JS地址。那个时候姐妹图每个页面的js地址都不一样,所以需要从页面中提取出来。

  3、在js中获取到图片的hash和key参数后,根据js中提供的解密方式,即可获取到图片的链接。这个解密方法后面会参考Python代码和js代码来说明。

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

  页面分析网页源码解读

  我们可以打开一个女生图片的页面,或者先#comments作为例子,然后查看源码(注意不是rev​​iew元素),可以看到图片地址应该是没有图片地址的可以放置,但是类似下面的代码:

  ece8ozWUT/VGGxW1hlbITPgE0XMZ9Y/yWpCi5Rz5F/h2uSWgxwV6IQl6DAeuFiT9mH2ep3CETLlpwyD+kU0YHpsHPLnY6LMHyIQo6sTu9/UdY5k+Vjt3EQ

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

  js文件解释

  通过在每个js文件中搜索jandan_load_img,最终可以在一个类似地址的文件中找到该函数的定义,并将压缩后的js代码格式化,查看具体定义如下:

  function jandan_load_img(b) {

var d = $(b);

var f = d.next("span.img-hash");

var e = f.text();

f.remove();

var c = f_Qa8je29JONvWCrmeT1AJocgAtaiNWkcN(e, "agC37Is2vpAYzkFI9WVObFDN5bcFn1Px");

  这段代码的意思很容易理解。首先,它提取当前标签下CSS为img-hash的span标签的文本,也就是我们一开始提到的图片的hash值,然后把这个值和一个字符串参数(每个页面的这个参数)结合起来改了。这个页面是agC37Is2vpAYzkFI9WVObFDN5bcFn1Px),并传递给了另一个函数f_Qa8je29JONvWCrmeT1AJocgAtaiNWkcN,所以我们要检查这个函数的含义。这个函数就是用来生成图片链接的函数。

  f_函数的解释

  可以在js中找到这个f_函数的定义,可以看到有两个,不过没关系,按照代码从上到下的执行规律,我们只需要看后面的一个即可。完整内容如下:

<p>var f_Qa8je29JONvWCrmeT1AJocgAtaiNWkcN = function(m, r, d) {

var e = "DECODE";

var r = r ? r : "";

var d = d ? d : 0;

var q = 4;

r = md5(r);

var o = md5(r.substr(0, 16));

var n = md5(r.substr(16, 16));

if (q) { if (e == "DECODE") { var l = m.substr(0, q) } } else { var l = "" }

var c = o + md5(o + l);

var k;

if (e == "DECODE") {

m = m.substr(q);

k = base64_decode(m)

}

var h = new Array(256);

for (var g = 0; g

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线