|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 gopythoner 于 2018-5-2 10:27 编辑
前两天写了一个有道翻译的的爬虫http://bbs.fishc.com/thread-106892-1-1.html,解密的了有道翻译的反爬虫机制
主要是因为群里面经常有人会遇到{"errorCode":50}所以去写的
今天又写了另一个论坛经常会问到的爬虫,是关于煎蛋网的妹子图爬虫
很多爬虫煎蛋网妹子图的都知道,现在妹子图的链接加密了,请求的网页根本没有图片链接,所以无法下载图片
当然,可以通过selenium模拟浏览器去爬
不过,我这篇不是用的这个,而是解密了煎蛋网的加密方式,直接获取图片链接了
爬虫思路:
直接贴源代码吧
- # -*- coding: utf-8 -*-
- import requests
- from bs4 import BeautifulSoup
- import hashlib
- import re
- import base64
- def _md5(value):
- '''md5加密'''
- m = hashlib.md5()
- m.update(value.encode('utf-8'))
- return m.hexdigest()
- def _base64_decode(data):
- '''bash64解码,要注意原字符串长度报错问题'''
- missing_padding = 4 - len(data) % 4
- if missing_padding:
- data += '=' * missing_padding
- return base64.b64decode(data)
- def get_imgurl(m, r='', d=0):
- '''解密获取图片链接'''
- e = "DECODE"
- q = 4
- r = _md5(r)
- o = _md5(r[0:0 + 16])
- n = _md5(r[16:16 + 16])
- l = m[0:q]
- c = o + _md5(o + l)
- m = m[q:]
- k = _base64_decode(m)
- h = list(range(256))
- b = [ord(c[g % len(c)]) for g in range(256)]
- f = 0
- for g in range(0, 256):
- f = (f + h[g] + b[g]) % 256
- tmp = h[g]
- h[g] = h[f]
- h[f] = tmp
- t = ""
- p, f = 0, 0
- for g in range(0, len(k)):
- p = (p + 1) % 256
- f = (f + h[p]) % 256
- tmp = h[p]
- h[p] = h[f]
- h[f] = tmp
- t += chr(k[g] ^ (h[(h[p] + h[f]) % 256]))
- t = t[26:]
- return t
- def get_r(js_url):
- '''获取关键字符串'''
- js = requests.get(js_url).text
- # _r = re.findall('c=f_[\w\d]+\(e,"(.*?)"\)', js)[0] 这个已经改了
- _r = re.findall('c=[\w\d]+\(e,"(.*?)"\)', js)[0]
- return _r
- def get_urls(url):
- '''获取一个页面的所有图片的链接'''
- headers = {
- 'user-agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0',
- 'Host': 'jandan.net'
- }
- html = requests.get(url, headers=headers).text
- js_url = 'http:' + re.findall('<script src="(//cdn.jandan.net/static/min/[\w\d]+\.\d+\.js)"></script>', html)[-1]
- _r = get_r(js_url)
- soup = BeautifulSoup(html, 'lxml')
- tags = soup.select('.img-hash')
- for tag in tags:
- img_hash = tag.text
- img_url = get_imgurl(img_hash,_r)
- print(img_url)
- if __name__ == '__main__':
- get_urls('http://jandan.net/ooxx/page-44')
复制代码
上面的代码运行的部分结果:
- //ww3.sinaimg.cn/mw600/0073ob6Pgy1fpet9wku7dj30hs0qljuz.jpg
- //ww3.sinaimg.cn/mw600/0073tLPGgy1fpet9mszjwj30hs0g1jsv.jpg
- //ww3.sinaimg.cn/mw600/0073ob6Pgy1fpesskkgobj31jk1jkk5b.jpg
- //wx3.sinaimg.cn/mw600/006XfbArly1fpesq2jn1vj30j60svaz3.jpg
- //wx3.sinaimg.cn/mw600/6967abd2gy1fpenoyobrcj20u03d0b2d.jpg
- //wx3.sinaimg.cn/mw600/6967abd2gy1fpenp38v9uj20u03zkhdy.jpg
复制代码
这里我打印了一个页面的全部图片链接,没有下载,下载的事情你们自己去写吧
具体的分析过程可以看我博客文章解析,论坛不支持markdown,贴过来是真的麻烦
http://www.tendcode.com/article/jiandan-meizi-spider/
|
评分
-
参与人数 4 | 荣誉 +15 |
鱼币 +15 |
贡献 +9 |
收起
理由
|
小甲鱼
| + 6 |
+ 6 |
+ 6 |
热爱鱼C^_^ |
ド゛゜范
| + 1 |
+ 1 |
|
感谢楼主无私奉献! |
ba21
| + 3 |
+ 3 |
+ 3 |
感谢楼主无私奉献! |
°蓝鲤歌蓝
| + 5 |
+ 5 |
|
666 |
查看全部评分
|