鱼C论坛

 找回密码
 立即注册
查看: 735|回复: 2

[已解决]小甲鱼新手教程ooxx这一节,按照小甲鱼的代码敲为什么不能爬虫

[复制链接]
发表于 2018-10-10 15:05:09 | 显示全部楼层 |阅读模式

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

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

x
代码如下:测试的时候在 def find_imgs(url) 函数中不能获取图片网址,不知道什么原因,求大神解答。
import urllib.request
import os

def url_open(url):
    req = urllib.request.Request(url)
    req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36')
    response = urllib.request.urlopen(url)
    html = response.read()
   
    return html

def get_page(url):
    html=url_open(url).decode('utf-8')

    a=html.find('current-comment-page')+23
    b=html.find(']',a)

    return html[a:b]
   
def find_imgs(url):
   
    html=url_open(url).decode('utf-8')
    img_addrs = []

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

    while a != -1:
        b = html.find('.jpg',a,a+255)
        if b != -1:
            img_addrs.append(html[a+9:b+4])
            
        else:
            b=a+9

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

    return img_addrs
   
   

def save_imgs(folder,img_addrs):
    for each in img_addrs:
        filename=each.apilt('/')[-1]

        with open(filename,'wb') as f:
            img = open_url(each)
            f.write(img)

def downlaod_mm(folder='oooxx',pages=10):
    os.mkdir(folder)
    os.chdir(folder)

    url="http://jandan.net/ooxx/"
    page_num=int(get_page(url))

    for i in range(pages):
        page_num -= i
        page_url = url + 'page-'+str(page_num)+'#comments'
        img_addrs = find_imgs(page_url)
        save_imgs(folder,img_addrs)

if __name__ == '__main__':
    downlaod_mm()

最佳答案
2018-10-10 15:53:36
本帖最后由 wongyusing 于 2018-10-10 16:05 编辑

反爬了,5年前的代码已经不能用了。  
如果你要爬,需要抓取网页源代码的哈希值。  
然后通过下面的js代码进行编译后就可以获取真正的图片url地址了
注意,还是不行,原因是不知道这个网站从哪里调用了16进制的md5解密函数。  
所以换网站吧。
  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. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-10-10 15:42:15 | 显示全部楼层
反扒了,你打印下html就知道了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-10 15:53:36 | 显示全部楼层    本楼为最佳答案   
本帖最后由 wongyusing 于 2018-10-10 16:05 编辑

反爬了,5年前的代码已经不能用了。  
如果你要爬,需要抓取网页源代码的哈希值。  
然后通过下面的js代码进行编译后就可以获取真正的图片url地址了
注意,还是不行,原因是不知道这个网站从哪里调用了16进制的md5解密函数。  
所以换网站吧。
  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. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-19 18:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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