分析mangabz.com的漫画图片加载方式

    选择打赏方式

最近正在用python写一个下载在线漫画的程序,其中一个漫画网站就是这个mangabz.com。在加载图片的时候,图片并不是在网页中静态加载的,而是通过Ajax动态获取图片链接再显示。其实可以通过模拟浏览器访问的方式来直接获取,但是这样效率有点低,有没有别的方式呢?

打开浏览器的开发者工具,可以看到加载完成后的网页中包含了图片:
 

但是,这是动态加载后的结果,关闭JS之后再刷新,图片就加载不出来了:
 

翻一下JS内容,在chapter.js里面找到一个“ajaxloadimage()”,根据函数名字判断,这应该就是加载图片的关键。
 

在这个函数里,通过Ajax向chapterimage.ashx发送请求,那么请求的参数都是些啥呢?

其中,参数”key“的值mkey是一个空字符串,在函数开头就能看到。
其他几个值都是全大写,应该是常量,在chapter.js里找不到,不妨回到之前的章节网页去看看:
 

知道了URL和请求参数,现在可以看看这个请求得到了什么响应内容:
 

这是一段混淆过的JS脚本,试试看直接执行可以得到什么:
 

出现了!这个数组的第一项就是这一页的图片地址。


以上操作都是在浏览器中进行的,知道了过程,接下来就可以用python来操作了。

简单来说就是以下几个步骤:
1. 访问章节网址,得到网页内容(text)
2. 用正则表达式找到上述几个变量的值,对chapterimage.ashx发送请求,得到JS脚本
3. 用execjs模块运行这个脚本(execjs.eval()),得到图片的地址。
4. 如此访问每一页,直到得到404,说明已经访问了每一页,这样就得到了所有的图片。

附上python的代码片段:

[Python] 纯文本查看 复制代码

?

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
page_no = 1
img_urls = []
 
while True:
    page_url = url + '-p' + str(page_no) + '/'
    r = requests.get(page_url)
    if r.status_code == 404:
        break
 
    cid = re.compile('var MANGABZ_CID=[^;]*;').findall(r.text)[0].lstrip('var MANGABZ_CID=').rstrip(';')
    _mid = re.compile('var MANGABZ_MID=[^;]*;').findall(r.text)[0].lstrip('var MANGABZ_MID=').rstrip(';')
    _dt = re.compile('var MANGABZ_VIEWSIGN_DT=[^;]*;').findall(r.text)[0].lstrip('var MANGABZ_VIEWSIGN_DT="').rstrip('";')
    _sign = re.compile('var MANGABZ_VIEWSIGN=[^;]*;').findall(r.text)[0].lstrip('var MANGABZ_VIEWSIGN="').rstrip('";')
 
    img_ajax_url = page_url + 'chapterimage.ashx'
    params = {
        'cid': cid,
        'page': page_no,
        'key': '',
        '_cid': cid,
        '_mid': _mid,
        '_dt': _dt,
        '_sign': _sign
    }
    ajax_r = requests.get(img_ajax_url, headers=headers, params=params)
    img_url = execjs.eval(ajax_r.text)
    img_urls.append(img_url[0])
    page_no += 1


版权声明:若无特殊注明,本文为《CBB量化机器人》原创,转载请保留文章出处。
本文链接:https://freedom518.cn/post-781.html
正文到此结束

热门推荐

发表吐槽

你肿么看?

你还可以输入 250 / 250 个字

嘻嘻 大笑 可怜 吃惊 害羞 调皮 鄙视 示爱 大哭 开心 偷笑 嘘 奸笑 委屈 抱抱 愤怒 思考 日了狗 胜利 不高兴 阴险 乖 酷 滑稽

评论信息框
可使用QQ号实时获取昵称+头像

私密评论

吃奶的力气提交吐槽中...


既然没有吐槽,那就赶紧抢沙发吧!