鱼C论坛

 找回密码
 立即注册
查看: 864|回复: 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之后,这句话就没了?

求大神指点
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

  2. url = 'http://jandan.net/ooxx/page-36#comments'
  3. repoense = urllib.request.urlopen(url)
  4. html = repoense.read().decode('utf-8')
  5. a = html.find('img src=')
  6. b = html.find('.jpg',a,a+255)
  7. print(html[a:b])
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

然后print(html)的内容里,确实没有图片原地址,太奇怪了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

动态加载吧,所以网页源代码没有数据。  
数据都是用js写进去的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

谢谢啦
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2018-10-9 13:01:20 | 显示全部楼层
楼主解决了吗  我也出现同样的问题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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

你也是匹配不到图片链接吧?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

没有的,不用看。  
在网页源代码中,图片附近只是一堆哈希值
图片地址是要把哈希值通过js转化后才能看到的。  
js代码如下:
  1. function md5(a) {
  2.     return hex_md5(a) //找不到hex_md5都函数
  3. }
  4. var jd82tylpAK1P0Tvmga2rljssRTRVhio67x = function(n, t, e) {
  5.     var f = "DECODE";
  6.     var t = t ? t : "";
  7.     var e = e ? e : 0;
  8.     var r = 4;
  9.     t = md5(t);
  10.     var d = n;
  11.     var p = md5(t.substr(0, 16));
  12.     var o = md5(t.substr(16, 16));
  13.     if (r) {
  14.         if (f == "DECODE") {
  15.             var m = n.substr(0, r)
  16.         }
  17.     } else {
  18.         var m = ""
  19.     }
  20.     var c = p + md5(p + m);
  21.     var l;
  22.     if (f == "DECODE") {
  23.         n = n.substr(r);
  24.         l = base64_decode(n)
  25.     }
  26.     var k = new Array(256);
  27.     for (var h = 0; h < 256; h++) {
  28.         k[h] = h
  29.     }
  30.     var b = new Array();
  31.     for (var h = 0; h < 256; h++) {
  32.         b[h] = c.charCodeAt(h % c.length)
  33.     }
  34.     for (var g = h = 0; h < 256; h++) {
  35.         g = (g + k[h] + b[h]) % 256;
  36.         tmp = k[h];
  37.         k[h] = k[g];
  38.         k[g] = tmp
  39.     }
  40.     var u = "";
  41.     l = l.split("");
  42.     for (var q = g = h = 0; h < l.length; h++) {
  43.         q = (q + 1) % 256;
  44.         g = (g + k[q]) % 256;
  45.         tmp = k[q];
  46.         k[q] = k[g];
  47.         k[g] = tmp;
  48.         u += chr(ord(l[h]) ^ (k[(k[q] + k[g]) % 256]))
  49.     }
  50.     if (f == "DECODE") {
  51.         if ((u.substr(0, 10) == 0 || u.substr(0, 10) - time() > 0) && u.substr(10, 16) == md5(u.substr(26) + o).substr(0, 16)) {
  52.             u = u.substr(26)
  53.         } else {
  54.             u = ""
  55.         }
  56.         u = base64_decode(d)
  57.     }
  58.     return u
  59. };

  60. function jandan_load_img(b) {
  61.     var d = $(b);
  62.     var f = d.next("span.img-hash");
  63.     var e = f.text();
  64.     f.remove();
  65.     var c = jd82tylpAK1P0Tvmga2rljssRTRVhio67x(e, "Bd7a2II4A1V50tQ92EKDtvTIUxJ9Smvt");
  66.     var a = $('<a href="' + c.replace(/(\/\/\w+\.sinaimg\.cn\/)(\w+)(\/.+\.(gif|jpg|jpeg))/, "$1large$3") + '" target="_blank" class="view_img_link">[鏌ョ湅鍘熷浘]</a>');
  67.     d.before(a);
  68.     d.before("<br>");
  69.     d.removeAttr("onload");
  70.     d.attr("src", location.protocol + c.replace(/(\/\/\w+\.sinaimg\.cn\/)(\w+)(\/.+\.gif)/, "$1thumb180$3"));
  71.     if (/\.gif$/.test(c)) {
  72.         d.attr("org_src", location.protocol + c);
  73.         b.onload = function() {
  74.             add_img_loading_mask(this, load_sina_gif)
  75.         }
  76.     }
  77. }
复制代码

如果找到那个hex_ma5()函数,我就有办法拿到地址。   
问题是我整个页面找了好几次,都找不到
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-6 23:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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