免责声明:本项目仅供学习使用,请勿用于其他用途
预览地址:https://tx.lgpqkl.cn/static/meizi/#/ 我先爬取了5000张图片,放到腾讯云存储上,然后做了一个前端项目来随机加载并显示图片,现在界面比较简陋,日后会逐渐完善。
如果想要本项目源码或打包图片可以添加我的微信(加备注):lgp15732461131
图片总大小截图 部分图片截图
爬数据
本来想去网站上爬取图片,却不曾想作者是通过接口方式来返回图片,便不需要去分析网页爬取图片了,只需要调用接口,获取图片地址和标签,将图片下载,再将图片信息存储到数据库,便大功告成了!二话不说,先上代码
import requests
import json
import pymysql
def doMysql(_id,_tag):
db = pymysql.connect(host='127.0.0.1',user='root',passwd='root',db='images')
cur=db.cursor()
sql = "INSERT INTO alls(id,tag) VALUES (%s,%s);"
val=(item['id'],str(",".join(item['tag'])))
try:
cur.execute(sql,val)
db.commit()
print('sql执行成功')
return True
except:
print('sql执行失败')
db.rollback()
return False
db.close()
for count in range(0,4980,30):
print(count)
all_image_url="http://这里是接口地址"
res=requests.get(all_image_url)
response=json.loads(res.text)
print(response['res']['wallpaper'][0]['preview'])
for index,item in enumerate(response['res']['wallpaper']):
print(index)
r=requests.get(item['preview'])
with open(r"pictures/"+item['id']+".png",'wb') as f:
f.write(r.content)
doMysql_result=doMysql(item['id'],str("".join(item['tag'])))
print(type(item['id']),str(item['tag']))
if(not doMysql_result):
break
db.close()
print('ok')
服务端
服务端采用nodejs实现,主要负责随机从数据库获取图片,返回给客户端,部分代码如下(加密部分以省略)
const mysql = require('mysql');
router.get('/get', function(req, res) {
mysql_query(function (result) {
if (result.length){
res.send(result)
add_request();
}
else {
res.send('err')
}
})
});
function add_request() {
const connection = mysql.createConnection({
host : '127.0.0.1',
user : 'root',
password : 'root',
database : 'images'
});
connection.connect(function(err) {
if (err) {
console.error('连接失败: ' + err.stack);
}
else {
var time_now=String(new Date());
var sql='INSERT INTO requests(time_req) VALUES(?);'
connection.query(sql,time_now, (err, results, fields) => {
if(err){
console.log(err);
}
else {
}
})
}
});
}
function mysql_query(callback){
const connection = mysql.createConnection({
host : '127.0.0.1',
user : 'root',
password : 'root',
database : 'images'
});
connection.connect(function(err) {
if (err) {
callback([]);
}
else {
connection.query('SELECT * FROM alls ORDER BY RAND() LIMIT 10;', (err, results, fields) => {
if(err){
console.log(err);
callback([]);
}
else {
callback(results)
}
})
}
});
}
客户端
客户端采用uniapp实现,由于页面较简单,只有对服务器发起请求获取图片这样一部操作,这里不展示相应代码。
部署
下载完所有图片后觉得服务器空间已经快不够了,就开通了腾讯云的对象存储,将所用图片上传,并打开权限,共有读私有写,客户端根据图片id和腾讯云地址进行拼接即可找到图片的真实地址。 介绍结束,有什么问题的小伙伴可以私信我哦
|