IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 我用python一个小时爬了10.9G图片 -> 正文阅读

[Python知识库]我用python一个小时爬了10.9G图片

免责声明:本项目仅供学习使用,请勿用于其他用途

预览地址: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和腾讯云地址进行拼接即可找到图片的真实地址。
在这里插入图片描述
介绍结束,有什么问题的小伙伴可以私信我哦

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-07-26 12:02:42  更:2021-07-26 12:04:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/25 14:10:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计