今天闲来无事,抓取煎蛋网上的妹子图,之前就知道源代码中找不到img的真实地址,被换成了jandan_load_img(this)这个函数,这个函数定义很复杂,而我又不懂JS,没办法,只有硬着头皮上。
在网上找了各种办法,大概花了3个多小时,还是一无所获,正准备放弃时,看到代码中有调用这个函数:
function base64_encode(a) {
return window.btoa(a)
};
这是干嘛的呢?百度得知是base64转ascii码,闲来无事将
<span class="img-hash">Ly93eDEuc2luYWltZy5jbi9tdzYwMC8wMDZyRkhuQWx5MWZ2c2xvdjVnbnFqMzBnczBkdTc1eS5qcGc=</span>
标签中的Text转试试,得到了如下结果
//wx1.sinaimg.cn/mw600/006rFHnAly1fvslov5gnqj30gs0du75y.jpg
之前也有爬取过煎蛋网上的妹子图,一眼看出这就是图片的原地址啊,绕来绕去原来这么简单!!!!!
赶紧写下代码验证,果然都可以正确获取。
代码如下:
#coding=utf-8
import base64
import requests
from bs4 import BeautifulSoup
def getHtml(url):
try:
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0'}
response = requests.get(url,headers = headers)
if response.status_code == 200:
return response.text
return None
except RequestException:
return None
def getimgurl(html,imglist):
soup = BeautifulSoup(html, 'lxml')
imgs = soup.select('.img-hash')
for img in imgs:
imgurl = base64.b64decode(img.text).decode()
imgurl = 'http://' + imgurl
imglist.append(imgurl)
if __name__=='__main__':
imglist = []
for i in range(1,2):
url = ("http://jandan.net/ooxx/page-%s#comments" % str(i))
html = getHtml(url)
getimgurl(html,imglist)
for img in imglist:
print (img)
就这么简单!