网页抓取解密(用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作为例子,然后查看源码(注意不是review元素),可以看到图片地址应该是没有图片地址的可以放置,但是类似下面的代码:
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