鱼C论坛

 找回密码
 立即注册
查看: 700|回复: 8

请问《零基础56讲ooxx》爬图片,匹配到不到img src...jpg

[复制链接]
发表于 2018-9-28 09:32:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
现在是不是网页有什么机制,当用
html = open_url(url).decode('utf-8')
    img_addrs = []

    a = html.find('img src=')

    while a != -1:
        b = html.find('.jpg', a, a+255)
        # print(html[a:b])
        # print('我是分隔符###################################################')
        if b != -1:
            print(222222222222)
            img_addrs.append(html[a+9:b+4])
        else:
            b = a + 9

        a = html.find('img src=', b)

永远都匹配不到从img src开始到.jpg结束的内容。。
我单独urlopen('http://jandan.net/ooxx/page-36#comments'),然后print网页内容,发现确实没有“<img src="http://ww3.sinaimg.cn/mw600/0073tLPGgy1fvokmwdbopj30k00zkdlt.jpg" style="max-width: 480px; max-height: 750px;">”这串内容,所以匹配不到。

但是网页审查元素element里确实有这个图片的原地址啊,为啥urlopen之后,这句话就没了?

求大神指点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-28 10:49:57 | 显示全部楼层
你应该是没有解码
import urllib.request

url = 'http://jandan.net/ooxx/page-36#comments'
repoense = urllib.request.urlopen(url)
html = repoense.read().decode('utf-8')
a = html.find('img src=')
b = html.find('.jpg',a,a+255)
print(html[a:b])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-28 11:32:03 | 显示全部楼层
RIXO 发表于 2018-9-28 10:49
你应该是没有解码

我解码了,html = response.read().decode('utf-8')

然后print(html)的内容里,确实没有图片原地址,太奇怪了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-28 11:37:29 | 显示全部楼层
狂风¢舞蹈 发表于 2018-9-28 11:32
我解码了,html = response.read().decode('utf-8')

然后print(html)的内容里,确实没有图片原地址 ...

动态加载吧,所以网页源代码没有数据。  
数据都是用js写进去的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-28 11:40:50 | 显示全部楼层
wongyusing 发表于 2018-9-28 11:37
动态加载吧,所以网页源代码没有数据。  
数据都是用js写进去的

也就是说直接爬肯定是爬不到图片源地址了哇?

谢谢啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-28 11:43:58 | 显示全部楼层
额,能的啊,我给你的代码不是已经有返回值了吗?不过你的find写的不对,需要改,没发现返回的都是gif吗?你要接着改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-9 13:01:20 | 显示全部楼层
楼主解决了吗  我也出现同样的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-9 14:32:44 | 显示全部楼层
有理想的咸鱼_超 发表于 2018-10-9 13:01
楼主解决了吗  我也出现同样的问题

没解决,urlopen里面还是没有原图片的地址。

我现在接着往后学,看看后面又没啥解决思路

你也是匹配不到图片链接吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-9 14:48:55 | 显示全部楼层
狂风¢舞蹈 发表于 2018-10-9 14:32
没解决,urlopen里面还是没有原图片的地址。

我现在接着往后学,看看后面又没啥解决思路

没有的,不用看。  
在网页源代码中,图片附近只是一堆哈希值
图片地址是要把哈希值通过js转化后才能看到的。  
js代码如下:
function md5(a) {
    return hex_md5(a) //找不到hex_md5都函数
}
var jd82tylpAK1P0Tvmga2rljssRTRVhio67x = function(n, t, e) {
    var f = "DECODE";
    var t = t ? t : "";
    var e = e ? e : 0;
    var r = 4;
    t = md5(t);
    var d = n;
    var p = md5(t.substr(0, 16));
    var o = md5(t.substr(16, 16));
    if (r) {
        if (f == "DECODE") {
            var m = n.substr(0, r)
        }
    } else {
        var m = ""
    }
    var c = p + md5(p + m);
    var l;
    if (f == "DECODE") {
        n = n.substr(r);
        l = base64_decode(n)
    }
    var k = new Array(256);
    for (var h = 0; h < 256; h++) {
        k[h] = h
    }
    var b = new Array();
    for (var h = 0; h < 256; h++) {
        b[h] = c.charCodeAt(h % c.length)
    }
    for (var g = h = 0; h < 256; h++) {
        g = (g + k[h] + b[h]) % 256;
        tmp = k[h];
        k[h] = k[g];
        k[g] = tmp
    }
    var u = "";
    l = l.split("");
    for (var q = g = h = 0; h < l.length; h++) {
        q = (q + 1) % 256;
        g = (g + k[q]) % 256;
        tmp = k[q];
        k[q] = k[g];
        k[g] = tmp;
        u += chr(ord(l[h]) ^ (k[(k[q] + k[g]) % 256]))
    }
    if (f == "DECODE") {
        if ((u.substr(0, 10) == 0 || u.substr(0, 10) - time() > 0) && u.substr(10, 16) == md5(u.substr(26) + o).substr(0, 16)) {
            u = u.substr(26)
        } else {
            u = ""
        }
        u = base64_decode(d)
    }
    return u
};

function jandan_load_img(b) {
    var d = $(b);
    var f = d.next("span.img-hash");
    var e = f.text();
    f.remove();
    var c = jd82tylpAK1P0Tvmga2rljssRTRVhio67x(e, "Bd7a2II4A1V50tQ92EKDtvTIUxJ9Smvt");
    var a = $('<a href="' + c.replace(/(\/\/\w+\.sinaimg\.cn\/)(\w+)(\/.+\.(gif|jpg|jpeg))/, "$1large$3") + '" target="_blank" class="view_img_link">[鏌ョ湅鍘熷浘]</a>');
    d.before(a);
    d.before("<br>");
    d.removeAttr("onload");
    d.attr("src", location.protocol + c.replace(/(\/\/\w+\.sinaimg\.cn\/)(\w+)(\/.+\.gif)/, "$1thumb180$3"));
    if (/\.gif$/.test(c)) {
        d.attr("org_src", location.protocol + c);
        b.onload = function() {
            add_img_loading_mask(this, load_sina_gif)
        }
    }
}
如果找到那个hex_ma5()函数,我就有办法拿到地址。   
问题是我整个页面找了好几次,都找不到
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 10:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表