免責宣告:本專案僅供學習使用,請勿用于其他用途
預覽地址: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 插入陳述句 里面的資料型別要對應
sql = "INSERT INTO alls(id,tag) VALUES (%s,%s);"
val=(item['id'],str(",".join(item['tag'])))
try:
# 執行sql陳述句
cur.execute(sql,val)
# 執行sql陳述句
db.commit()
print('sql執行成功')
return True
except:
# 發生錯誤時回滾
print('sql執行失敗')
db.rollback()
return False
# 關閉資料庫連接
db.close()
# 多次獲取資料,每次30條
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'])
# 遍歷每一次請求的30條資料,分別下載每一章圖片
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(",".join(response['res']['wallpaper'][0]['tag']))
print('ok')
服務端
服務端采用nodejs實作,主要負責隨機從資料庫獲取圖片,回傳給客戶端,部分代碼如下(加密部分以省略)
//引入mysql模塊
const mysql = require('mysql');
// console.log(md5.hex_md5('123'))
/* GET home page. */
router.get('/get', function(req, res) {
//先檢測時間戳是否在范圍內,先后哈希運算進行檢測真實性
mysql_query(function (result) {
if (result.length){
res.send(result)
add_request();
}
else {
res.send('err')
}
})
});
//每請求一次,插入一條記錄,記錄時間,ip等
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);
// callback([]);
}
else {
var time_now=String(new Date());
// console.log('連接成功 id ' + connection.threadId);
//隨機查詢10條資料
var sql='INSERT INTO requests(time_req) VALUES(?);'
connection.query(sql,time_now, (err, results, fields) => {
if(err){
console.log(err);
// callback([]);
}
else {
// console.log(results);
// callback(results)
}
})
}
});
}
//隨機獲取10條資料函式
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) {
// console.error('連接失敗: ' + err.stack);
callback([]);
}
else {
// console.log('連接成功 id ' + connection.threadId);
//隨機查詢10條資料
connection.query('SELECT * FROM alls ORDER BY RAND() LIMIT 10;', (err, results, fields) => {
if(err){
console.log(err);
callback([]);
}
else {
// console.log(results);
callback(results)
}
})
}
});
}
客戶端
客戶端采用uniapp實作,由于頁面較簡單,只有對服務器發起請求獲取圖片這樣一部操作,這里不展示相應代碼,
部署
下載完所有圖片后覺得服務器空間已經快不夠了,就開通了騰訊云的物件存盤,將所用圖片上傳,并打開權限,共有讀私有寫,客戶端根據圖片id和騰訊云地址進行拼接即可找到圖片的真實地址,

介紹結束,有什么問題的小伙伴可以私信我哦
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/290435.html
標籤:python
下一篇:如何系統地自學 Python?
