开始我学习爬虫的目标 ----> 煎蛋网

通过设置User-Agent获取网页,发现本该是图片链接的地方被一个js函数代替了

于是全局搜索到该函数

  1. function jandan_load_img(b){
  2. var d = $(b);
  3. var f = d.next("span.img-hash");
  4. var e = f.text();
  5. f.remove();
  6. var c = jdPwA5ybKhQWGy2rZybAF2StIBxrQ6NvYC(e, "pAqWmGD1GsmY5kVokg1a2eyQ3Shj1Usq");
  7. var a = $('<a href = "'+c.replace(/(\/\/\w+\.sinaimg\.cn\/)(\w+)(\/.+\.(gif|jpg|jpeg))/, "$1large$3")+'" target = "_blank" class = "view_img_link">[查看原图]</a>');
  8. d.before(a);
  9. d.before("<br>");
  10. d.removeAttr("onload");
  11. d.attr("src", location.protocol+c.replace(/(\/\/\w+\.sinaimg\.cn\/)(\w+)(\/.+\.gif)/, "$1thumb180$3"));
  12. if(/\.gif$/.test(c)){
  13. d.attr("org_src", location.protocol+c);
  14. b.onload = function(){
  15. add_img_loading_mask(this, load_sina_gif)
  16. }
  17. }
  18. }

该函数提取span.img-hsah传到另一个函数中,继续查找,有两个定义,于是选择靠后的那个

  1. var jdTzcXZnL0V2WZZ8eq9786xeOdkyoBXlDR=function(m,r,d){
  2. var e="DECODE";
  3. var r=r?r:"";
  4. var d=d?d:0;
  5. var q=4;
  6. r=md5(r);
  7. var o=md5(r.substr(0,16));
  8. var n=md5(r.substr(16,16));
  9. if(q){if(e=="DECODE"){var l=m.substr(0,q)}}
  10. else{var l=""}
  11. var c=o+md5(o+l);
  12. var k;
  13. if(e=="DECODE"){m=m.substr(q);
  14. k=base64_decode(m)}
  15. var h=new Array(256);
  16. for(var g=0;g<;g++){h[g]=g}
  17. var b=new Array();
  18. for(var g=0;g<256;g++){b[g]=c.charCodeAt(g%c.length)}
  19. for(var f=g=0;g<256;g++){f=(f+h[g]+b[g])%256;
  20. tmp=h[g];
  21. h[g]=h[f];
  22. h[f]=tmp}
  23. var t="";
  24. k=k.split("");
  25. for(var p=f=g=0;
  26. g<k.length;
  27. g++){p=(p+1)%256;
  28. f=(f+h[p])%256;
  29. tmp=h[p];
  30. h[p]=h[f];
  31. h[f]=tmp;
  32. t+=chr(ord(k[g])^(h[(h[p]+h[f])%256]))}
  33. if(e=="DECODE"){if((t.substr(0,10)==0||t.substr(0,10)-time()>0)&&t.substr(10,16)==md5(t.substr(26)+n).substr(0,16)){t=t.substr(26)}
  34. else{t=""}
  35. }
  36. return t
  37. };

参考文章:  http://www.tendcode.com/article/jiandan-meizi-spider/

其中有对js的函数的改写

最后代码如下

  1. # -*- coding = UTF-8 -*-
  2. '''
  3. 目标:煎蛋网妹子图
  4. 2018/4/22
  5. 环境:pyhton3
  6.  
  7. '''
  8.  
  9. import urllib.request #使用url处理包,urllib.request模块是用来打开和读取URLs的
  10. import re #使用正则表达式
  11. import hashlib #
  12. import base64 #
  13. from bs4 import BeautifulSoup #
  14. import time #time
  15. import logging #log
  16. import sys #
  17.  
  18. '''
  19. 下载单张图片到制定的文件夹下
  20. '''
  21. def load_img(imgurl, file):
  22. name = imgurl.split('/')[-1]
  23. item = urllib.request.urlretrieve('http:'+imgurl,\
  24. #'C:\\Users\\74172\\Pictures\\jandan2\\%s'%(name))
  25. file+'\\%s'%(name))
  26. print(name+' is loaded')
  27.  
  28. '''
  29. md5加密
  30. '''
  31. def _md5(value):
  32. m = hashlib.md5()
  33. m.update(value.encode('utf-8'))
  34. return m.hexdigest()
  35.  
  36. '''
  37. bash64解码
  38. 注意 原字符串长度报错问题
  39. '''
  40. def _base64_decode(data):
  41. missing_padding = 4 - len(data) % 4
  42. if missing_padding:
  43. data += '=' * missing_padding
  44. return base64.b64decode(data)
  45.  
  46. '''
  47. 解密获取图片链接
  48. '''
  49. def get_imgurl(m, r='', d=0):
  50. e = "DECODE"
  51. q = 4
  52. r = _md5(r)
  53. o = _md5(r[0:0 + 16])
  54. n = _md5(r[16:16 + 16])
  55. l = m[0:q]
  56. c = o + _md5(o + l)
  57. m = m[q:]
  58. k = _base64_decode(m)
  59. h = list(range(256))
  60. b = [ord(c[g % len(c)]) for g in range(256)]
  61.  
  62. f = 0
  63. for g in range(0, 256):
  64. f = (f + h[g] + b[g]) % 256
  65. tmp = h[g]
  66. h[g] = h[f]
  67. h[f] = tmp
  68.  
  69. t = ""
  70. p, f = 0, 0
  71. for g in range(0, len(k)):
  72. p = (p + 1) % 256
  73. f = (f + h[p]) % 256
  74. tmp = h[p]
  75. h[p] = h[f]
  76. h[f] = tmp
  77. t += chr(k[g] ^ (h[(h[p] + h[f]) % 256]))
  78. t = t[26:]
  79. return t
  80.  
  81. '''
  82. 获取关键字符串
  83. '''
  84. def get_r(js_url):
  85. js_respon = urllib.request.urlopen(js_url)
  86. js = js_respon.read().decode('utf-8')
  87. _r = re.findall('c=[\w\d]+\(e,"(.*?)"\)', js)
  88. return _r
  89.  
  90. '''
  91. 获取一个页面的所有图片的链接
  92. '''
  93. def get_urls(url,pages,file):
  94. page = 0
  95. imagNum = 0
  96. headers = {
  97. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36',
  98. 'Host': 'jandan.net'
  99. }
  100. #########################################
  101. while page < pages:
  102. req = urllib.request.Request(url, headers=headers)
  103. respon = urllib.request.urlopen(req)
  104. html = respon.read().decode('utf-8')
  105. ##########################################
  106. js_url = 'http:' + re.findall('<script src="(//cdn.jandan.net/static/min/[\w\d]+\.\d+\.js)"></script>', html)[-1]
  107. _r = get_r(js_url)[0]
  108. soup = BeautifulSoup(html, 'lxml')
  109. tags = soup.select('.img-hash')
  110. for tag in tags:
  111. img_hash = tag.text
  112. img_url = get_imgurl(img_hash,_r)
  113. print(imagNum,'------>',img_url)
  114. imagNum = imagNum+1
  115. load_img(img_url,file)
  116. ############################################
  117. nextUrl = re.findall(r'Older Comments" href=".+?.#comments"',html)[0]
  118. print('page#',90-page,'---->done!')
  119. url = 'http:' + nextUrl[22:-1]
  120. page += 1
  121. time.sleep(10)
  122. print('done all!')
  123. print('located---->',file)
  124.  
  125. if __name__ == '__main__':
  126. url = 'http://jandan.net/ooxx/'
  127. pages = 1      
  128. file = 'C:\\jandan_meizi'
  129. get_urls(url,pages,file)

//************2018.05.03*******************************

刚下班回来爬图,发现中间有个报错,

是get_url一次返回的多张图片链接,于是的改段

  1. for tag in tags:
  2. img_hash = tag.text
  3. img_urls = get_imgurl(img_hash,_r)
  4. img_urls = re.findall(r'//wx.+?.jpg',img_urls)
  5. for img_url in img_urls:
  6. print(imagNum,'------>',img_url)
  7. imagNum = imagNum+1
  8. load_img(img_url,file)

//************2018.5.23***********************************

又报错了,暂时没有解决。

python3爬虫.4.下载煎蛋网妹子图的更多相关文章

  1. python3爬虫爬取煎蛋网妹纸图片(上篇)

    其实之前实现过这个功能,是使用selenium模拟浏览器页面点击来完成的,但是效率实际上相对来说较低.本次以解密参数来完成爬取的过程. 首先打开煎蛋网http://jandan.net/ooxx,查看 ...

  2. python3爬虫爬取煎蛋网妹纸图片(下篇)2018.6.25有效

    分析完了真实图片链接地址,下面要做的就是写代码去实现了.想直接看源代码的可以点击这里 大致思路是:获取一个页面的的html---->使用正则表达式提取出图片hash值并进行base64解码--- ...

  3. 项目: python爬虫 福利 煎蛋网妹子图

    嘿嘿嘿! 嘿嘿嘿! 福利一波, 之前看小甲鱼的python教学视频的时候, 看到上面教的爬虫, 爬美女图片的, 心很痒痒, 但是不知道为啥, 按照视频一个字一个字敲的代码,总是报错, 有一天花了 一下 ...

  4. Python 爬虫:煎蛋网妹子图

    使用 Headless Chrome 替代了 PhatomJS. 图片保存到指定文件夹中. import requests from bs4 import BeautifulSoup from sel ...

  5. python学习笔记(12)--爬虫下载煎蛋网图片

    说明: 1. 这个其实是在下载漫画之前写的,比那个稍微简单点,之前忘放到博客备份了. 2. 不想说啥了,总结放到漫画那个里面吧! import urllib.request import re imp ...

  6. Python 爬虫 爬取 煎蛋网 图片

    今天, 试着爬取了煎蛋网的图片. 用到的包: urllib.request os 分别使用几个函数,来控制下载的图片的页数,获取图片的网页,获取网页页数以及保存图片到本地.过程简单清晰明了 直接上源代 ...

  7. python爬虫–爬取煎蛋网妹子图片

    前几天刚学了python网络编程,书里没什么实践项目,只好到网上找点东西做. 一直对爬虫很好奇,所以不妨从爬虫先入手吧. Python版本:3.6 这是我看的教程:Python - Jack -Cui ...

  8. python爬虫爬取煎蛋网妹子图片

    import urllib.request import os def url_open(url): req = urllib.request.Request(url) req.add_header( ...

  9. Python Scrapy 爬取煎蛋网妹子图实例(一)

    前面介绍了爬虫框架的一个实例,那个比较简单,这里在介绍一个实例 爬取 煎蛋网 妹子图,遗憾的是 上周煎蛋网还有妹子图了,但是这周妹子图变成了 随手拍, 不过没关系,我们爬图的目的是为了加强实战应用,管 ...

随机推荐

  1. 虚拟机Centos设置静态IP

    首先确保虚拟网卡(VMware Network Adapter VMnet8)是开启的,然后在windows的命令行里输入“ipconfig /all”,找到VMware Network Adapte ...

  2. javascript与python的比较

    1:javascript与python大小写皆敏感 2:javascript使用{}来组织代码块,与大部分语言相同  python使用缩进来组织代码块,与大部分语言不同,请务必遵守约定俗成的习惯,坚持 ...

  3. PHP面向对象之接口

    接口(interface)技术 什么是接口? 先看抽象类: abstract  class  类名  { 属性1: 属性2: ..... 非抽象方法1: 非抽象方法2: ...... 抽象方法1: 抽 ...

  4. [Code Festival 2017 qual A] C: Palindromic Matrix

    题意 给出一个小写字母组成的字符矩阵,问能否通过重排其中的字符使得每行每列都是回文串. 分析 简化版:给出一个字符串,问能否通过重排其中的字符使得它是回文串.那么如果字符串长度为偶数,就需要a到z的个 ...

  5. 【Java】JAVA开发人员常见环境工具安装

    1.安装配置JDK1.7:jdk-7u45-windows-x64.exe,环境变量配置:JAVA_HOME---[F:\1024\jdk1.7],CLASSPATH---[.;%JAVA_HOME% ...

  6. 【JavaScript】JAVA-表格里的c:foreach使用及数字总计

    两步:1.上图 2.上代码 <div class="group-accordion" collapsible="true" active="tr ...

  7. [CF1111C]Creative Snap

    题目大意:有一个长度为$2^n(n\leqslant30)$的格子,有$k(k\leqslant10^5)$个球,分布在这些格子中,有两种消灭格子的方法: 1. 若一段格子长度大于等于$2$,可以对半 ...

  8. 廖大大python学习笔记1

    列表classmates = ['Michael', 'Bob', 'Tracy']classmates.append('tom')print classmates# classmates.inser ...

  9. [CTSC2016]时空旅行

    description 题面 solution 线段树分治+斜率优化毒瘤题 题目可以简化为: 你要维护一个包含元素\((x,c)\)的集合 修改操作为从以前的一个版本更新,修改内容为添加或删除一个元素 ...

  10. 用python + openpyxl处理excel(07+)文档 + 一些中文处理的技巧

    sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005269003&am ...