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爬虫 -> 正文阅读

[Python知识库]Python爬虫

Python轻松实现数据爬取和数据可视化

目录

效果演示

Python实现豆瓣top250数据演示

所需要的技术栈:

1.Python基础(这个大家只要是有一定的java基础 基本都可以类比进行学习 )

2.数据库的基础

3.Python爬虫

4flask框架(可以理解为一个轻量级的web开发框架)

5Echarts (实现我们的数据可视化的)

6.WordCloude(词云 帮助我们创建词语)

1.初始网络爬虫

#网络爬虫,就是一种按照一定规则,自动抓取互联网信息的程序或者脚本。由于互联网数据的多样性和资源的有限性,
# 根据客户需求定向的抓取网页并分析已经成为当今的主流策略

#只要是你能通过浏览器访问的数据都是可以

简单来说就是你可以利用这个来从网页上获取到你想要获取到的数据

2.如何实现这样的一个网站?

1.爬取网页

我们要想获取到数据的话 我们最重要的一点就是要如何获取网页中的全部数据

第一个就是我们要将网页的源代码获取到

这里我们如何获取 ?

其实很简单

我们的Python其实是帮助我们封装好了很多API 很多的东西都是我们可以直接去调用的

# #获得一个get的请求的
# reponse=urllib.request.urlopen("http://www.baidu.com")#就是把我们的网页的源代码封装成一个对象 这样我们就可以通过这个对象直接将我们的代码获取到了
# print(reponse.read().decode('utf-8'))#这样我们就获取到了整个页面的源代码 这个就很好的 我们把这个代码放到我们的文本文档里面去 就可以啦
# # 这个decode是可以将我们读取的数据可以得到正常的解释

说一下 这个urllib这个就是获取网页数据通过指定的url

我们通过这样的一个请求打开我们的百度的网址 会从服务器获取到响应

然后我们将这个响应进行打印并且进行解码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DEbJ3n0V-1645700766020)(在这里插入图片描述
)]

这样我们就拿到了我们想要的数据源代码了 但是只是源代码 里面的一些数据并不是我们真正想要的具体的数据

但是你也只是凑巧说是 人家百度可以让你直接爬

看一下这个

豆瓣的网站 我们这样就直接报错了

但是这样的一个报错信息的原因是什么?

其实就是因为我们被人家识别出来了 我们是一个爬虫去模仿浏览器 向服务器发送请求,但是有一个问题就是 我们的爬虫就是未必是很精准的 我们的模仿的可能根本就不像浏览器 那么就会被识破 那么我们如何伪装?

在这里插入图片描述

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36"
    }#这就是在封装我们的东西
data = bytes(urllib.parse.urlencode({"name": "jerry"}), encoding="utf-8")
url = "https://baidu.com"
req = urllib.request.Request(url=url, data=data, headers=headers, method="POST")  # 这些是封装好的数据 我们封装好一个对象
# 这个对象要尽可能的像我们的浏览器,就是这个对象 可以发送我们的数据出去
repone = urllib.request.urlopen(req)#这里我们就接收服务器发送到我们客户端的数据 进行截取到了 让 我们的服务器 认为其实是浏览器正在进行打开网页
# 实际则不然 实际是我们的爬虫在搞鬼 !! 这样就能蒙混过关其实 但是你可以继续 包装 就是在我们的头部进行包装处理 就是把你要写的东西 写进去就好了 我们不断的进行封装
#装的进来像一点 越像越好
print(repone.read().decode("utf-8"))#这个是解码 decode就是

来 看一下 这个header你可以理解为 是浏览器向我们服务器发送的信息 这个里面可能包括是 我是一个什么样的浏览器,

然后我们的服务器会根据你给的信息来返回给你数据 ,那么我们就要仿照这浏览器去实现 因为我们本是是爬虫 我们要尽可能的装的像浏览器 这样我们才可以获取到服务器器的信任 只有这样的话 我们才能拿到我们想要的数据

那么怎么封装? 就是我们刚刚那个语句 我们好好的封装一下我们的请求 只有这样 我们才能够更好的向我们的浏览器进行靠拢 然后将这个封装好的请求发送出去 这样被服务器接收之后的被认可的可能性更大

来看一下这次我们封装好我们的数据之后 看看可不可以获取到我们想要的数据
在这里插入图片描述

我们一看成功了 这就是说明 我们的豆瓣被我们骗过了 我们成功的获取到了我们的网页源代码

那么这样我们就可以将我们的刚刚写的那段代码封装成一个函数进行处理

def askURL(url):
    head = {  # 模拟浏览器头部信息,向豆瓣发送消息
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36"
    }  # head就是为了 让服务器理解我们是一个浏览器 而不是一个爬虫 用户带领就是为了告诉服务器 本质就是告诉我们是浏览器 这样  本质就是告诉浏览器 我们可以接收什么水平的数据
    request = urllib.request.Request(url, headers=head)  # 这里就是进行发消息处理 向我们的客户端进行发消息处理
    html = ""
    try:
        reponse = urllib.request.urlopen(request)
        html = reponse.read().decode("utf-8")#这个步是将我们的网页源代码以读的形式打开并且进行解码
        # print(html)
        except  urllib.error.URLError as e:
            if hasattr(e, "code"):
                print(e.code)
                if hasattr(e, "reason"):
                    print(e.reason)
                    return html

这样我们要是下次想获取其他的网页的源代码的时候 我们就可以进行使用了

2.解析数据(通常是爬取一个网页就进行一次解析处理)

通过刚刚的步骤 我们就可以获取豆瓣的网页源代码 这是一件比较高兴的事情了 那么我们可以进行下一步

解析我们的数据

在这里插入图片描述

我们想要拿到的是这些数据的信息

那么单单的获取到网页源代码是远远不够的,那么我们就要想办法将我们的获取到的网页源代码进行解析处理,得到我们想要的数据

那么我们在这里需要引入我们的bs4里面的beautifulSoup进行帮助我们解析数据

来 我们先看一下

import re#第一个是引入正则
from bs4 import BeautifulSoup#引入我们进行解析数据的东西

看一下第一个代码 进行解析

在这里插入图片描述

这个是我们的网页代码(我事先放到了我的一个目录下面 方便等会使用io流进行打开进行处理)

那么我们先进行的一波操作就是说 我们如何将我们的数据进行解析处理

file = open("./baidu.html", "rb")  # 以二进制的形式进行读取
html = file.read().decode("utf-8")  # 怎么解析这个HTML文档
bs = BeautifulSoup(html, "html.parser")  # 第一个代表我们要进行解析的文档 第二个是我们要采用的解析器

此时的bs已经是解析好的数据

我们可以现在进行将bs进行打印

# print(bs)# 你可以这么理解 这个bs里面有很多的数据 其中就是包含我们所谓的数据 就是我们的整个HTML页面 就是第一步我们会得到
print(bs.title)  # 这里我们直接拿到我们的title 就是可以直接拿出来 就是非常nb
print(bs.a)  # 这个就是获取我们的a标签

在这里插入图片描述

从这里我们可以看到的就是这些数据 title我们要是想要获取什么信息的话 我们就直接通过bs进行获取

bs.a我们就可以找到整个网页源代码里面的a标签在哪里,bs.title我们就可以找到我们的title标签的位置在哪里

但是有一个问题就是 我们的仅仅是只能拿到一条数据

我们的整个网页源代码中的数据可不止仅仅只有这些数据 那么我们就要进行另一个搜索方式进行处理

在进行讲解拿到所有数据之前 我们先说一下如何仅仅是获取到标签里面的文字 也即是字符串

print(bs.title.string)

这一步就是褪去了外部的标签title 而是直接去获取我们内部的文字
在这里插入图片描述

下面在介绍几个可以进行全篇查询的方法

bs.find_all

这一个就是我们刚刚bs对象里面的一个方法这个方法我们可以进行搜索到我们想要的数据就是find_all

t_list=bs.find_all("a")#这个直接找到我们所有的a标签获取到的 这些就是我们所需要的数据
print(t_list)

在这里插入图片描述

这样我们就获取到了所有含a标签的数据

但是有的时候我们未必想要获取那么多的数据

我们可以进行限制

t_list = bs.find_all("a", limit=3)  # 这个limit就是限制我们会有3条数据进行展示
for item in t_list:
    print(item)

这句话就是说 我们可以将我们的数据进行limit进行限制处理 就是说我们只会查询出来3条数据 3条和我们有关的数据出来

在这里插入图片描述

这样一来的话 我们的数据信息就可以得到由我们进行操控可以出现多少条信息

css选择器进行搜索处理

print(bs.select("title"))
print(bs.select(".mnav"))  # 这个就是利用我们的css的选择器进行处理操作实现我们的选择功能

这里就是和我们的css里面的选择器一样 第一个就是我们标签选择器

第二个是我们的类选择器 我们可以通过我们的类标签获取我们具体的数据
在这里插入图片描述

只要是类当中出现过的 我们这里都可以进行获取到我们想要的数据

正则

我们由于后面的数据处理会用到我们的数据的匹配处理 那么我们就应该不断的进行的是正则表达式的学习

这里我们就简单介绍一下 不做深入的学习 就是先满足我们的项目的需求

# # 创建一个模式对象出来
#
# pat = re.compile("AA")  # 此处的AA是正则表达式(这个是我们进行比对的一个对象 大家需要注意一下)
# answer = pat.search("CBAA")  # search里面的字符串是被校验的内容(只会找到第一次出现的位置 帮我们打印所出现的位置)
# print(answer)  # 这里我们进行打印的是none也就是没有的意思 我们没有找到所需要的数据

来看一下就是这个pat可以说是一个标准 这个标准就是规范了我们的数据 就是定义一个规范 re.compile的操作

但实际上还可以不创建那个规范 直接使用re进行查找

m = re.findall("aa", "asdadsadsaa")
m = re.search("aa", "asdadsadsaa")

#这个表达式的的意思就是我们寻找大写字母A-Z里面的数据 直到找到我们的
m = re.findall("[A-Z]+", "ASDAasdadADSADD")  # 这个就是我们进行处理的时候我们先是不断的进行处理 如果我们的数据到了不符合的时候


m = re.findall("[A-Z]", "ASJKDJasdkjakjdsa") 

在这里插入图片描述

m = re.findall("[A-Z]+", "ASDAasdadADSADD")  # 这个就是我们进行处理的时候我们先是不断的进行处理 如果我们的数据到了不符合的时候

这个也是进行筛选 不过这个就是如果筛选到不是我们想要的数据时候 我们就不会继续进行筛选 会先停止 从下一个位置继续进行匹配处理

在这里插入图片描述

# sub
print(re.sub("a", "A", "abcdCaA"))  # 就是找到a 用 A进行替换处理 在第三个字符串中进行查找

说一下这个sub这个是进行替换处理的一个方法

说一下这个参数 第一个是我们要进行替换掉数据

第二是我们要将这个数据替换成谁 第三个是我们要进行处理的数据

好了 现在我们的准备工作做的差不多了 我们开始进行我们的数据的解析

我们先定义一下几个表达式(就是我们要进行实际筛选的表达式)

# 中间问号的意思就是这个网址会在这个网页中出现一次或者多次都是有可能的
findLink = re.compile(r'<a href="(.*?)">')  # 这个就是我们进行比较的规范 告诉我们规范是什么 告诉我们规范是啥东西
# 影片图片的链接
findImages = re.compile(r'<img.*src="(.*?)"', re.S)  # 这个也就是说对我们括号里面的所有的数据进行匹配 就是换行符也是包含到里的 不会对换行符进行处理
# 影片的片名
findTitle = re.compile(r'<span class="title">(.*?)</span>')
# 影片评分
findRating = re.compile(r'<span class="rating_num" property="v:average">(.*?)</span>')
# 找到评价人数
findPeople = re.compile(r'<span>(.*?)人评价</span>')
# 这个是概述
findInq = re.compile(r'<span class="inq">(.*?)</span>')
# 找到影片的相关内容
findBd = re.compile(r'<p class="">(.*?)</p>', re.S)  # 这个re.S就是进行的是换行处理我就不直接处理了

这个的依据是什么 要想获取到 这个需要我们自行去观察源代码 去寻找规律 就是比如说 我们的电影链接式什么

我们观察多条电影链接的信息 我们找到的是他的前后的有的特征 我们根据这个特征 就可以获取到我们想要获取的数据

这里需要大家自己去搜索我们的网页 大家自己去寻找规律

好了有了寻找的规范 我们下一步

# 爬取网页(这个就是获取全部数据 只不过是进行了一个for循环进行处理实现的)
def getData(baseurl):
    dataList = []
    # 2.解析数据(通常是爬取一个网页就进行一次解析处理)
    for i in range(0, 10):  # 调用获取页面信息的函数,我们调用10次 1次就可以获取到25条记录
        url = baseurl + str(i * 25)
        html = askURL(url)  # 这里我们进行接受 我们的数据 将我们的返回值进行保存获取到的网页原码 下面我们就要进行(逐一)进行解析处理
        # 进行逐一解析处理
        soup = BeautifulSoup(html, "html.parser")
        for item in soup.find_all('div', class_="item"):#这个是获取到我们每一次有多少条记录(其实这个逗号可以是进行分割的就是前面是div标签 然后类里面包含的数据是item)
            这里的数据就是我们想要的数据信息 因为是
            # class_加一个·下划表示是一个类 这里中间采取的是_代表是一个类 类名是item #查找符合要求的字符串
            # print(item)这个是为了测试 查看电影所有的信息()
            data = []  # 这个是用来保存一步电影的全部信息,每次都重新进行初始化
            item = str(item)
            link = re.findall(findLink, item)[0]  # re库是通过我们的正则表达式查找我们指定的字符串
            data.append(link)
            img = re.findall(findImages, item)[0]
            data.append(img)
            title = re.findall(findTitle, item)
            if (len(title) == 2):
                chineseTitle = title[0]
                data.append(chineseTitle)
                otitle = title[1].replace("/", "")  # 这个是对外文名进行替换 去掉无关的符号
                data.append(otitle)
            else:
                data.append(title[0])
                data.append(' ')  # 这个就是对不满2个名字的补充 就是没有外文名的话 我们就把外文名字留空就行了
            rating = re.findall(findRating, item)[0]  # 这个是评价的分数
            data.append(rating)
            people = re.findall(findPeople, item)[0]  # 这个是评价的人数
            data.append(people)
            inq = re.findall(findInq, item)  # 这个概述
            if len(inq) != 0:
                inq = inq[0].replace("。", "")
                data.append(inq)
            else:
                data.append(" ")  # 这里还是要进行留空的数据进行处理
            db = re.findall(findBd, item)[0]  # 这个是添加我们的
            db = re.sub('<br(\s+)?/>(\s+)?', " ", db)
            db = re.sub('/', " ", db)
            data.append(db.strip())  # 这个是去掉前后的空格
            dataList.append(data)#每循环一次我们就可以将我们的数据放到我们的datalist这样我们一次放进去一个完整的电影信息了
    print(dataList)  # 这个打印数据是循环结束之后进行打印 不要没进行一次循环就进行打印 这样得到 我们一定要注意缩减 py里面的缩进是尤其需要大家注意的
    return dataList

然后经历以上的循环处理 我们将我们的数据放到了datalist里面了 我们之后就需要对他进行操作

3.保存数据

1.保存数据到Excel里面去

先给大家看一下效果图片哈

在这里插入图片描述

这个操作其实也是很简单 我们利用的就是Python强大的封装好了很多功能强大的API都是提供给我们可以直接使用的

import xlwt

# 1.创建一个workbook对象出来

workbook = xlwt.Workbook(encoding="utf-8")  # 创建workbook对象
worksheet = workbook.add_sheet('sheet1')  # 创建工作表就是和我们的Excel一样
#书写一个9*9的乘法表出来 我们放到我们的这个Excel文件里面去
for i in range(0,9):
    for j in range(0,i+1):
        worksheet.write(i,j,"%d*%d=%d"%(i+1,j+1,(i+1)*(j+1)))

workbook.save('student1.xls')  # 保存数据表

你可以认为我们的操作就是创建一个表出来 然后将我们想要书写的数据放到里面去

然后我们在按照我们刚刚给的数据放到我们的Excel表里面就行了

def saveData(datalist, savepath):
    book = xlwt.Workbook(encoding="utf-8", style_compression=0)
    sheet = book.add_sheet('豆瓣电影top250', cell_overwrite_ok=True)
    col = ("电影相关链接", "电影图片链接", "电影中文标题", "电影英文标题", "电影评分", "电影观影人数", "电影概述", "电影相关内容")  # 这个是我们对列的操作
    for i in range(0, 8):
        sheet.write(0, i, col[i])  # 这个是我们的列名
    #刚刚上面的第一次循环 是将我们的这个数据放入到我们的
    for i in range(0, 250):
        print("第%d条" % (i + 1))
        data = datalist[i]
        for j in range(0, 8):
            sheet.write(i + 1, j, data[j])#第一个是行然后是列
    book.save(savepath)

刚刚只是把我们的数据放到我们的Excel表里面 但是我们要是想要真正的将我们的数据放到数据库里面

不然我们等会进行列表渲染的时候 我们的数据不能显示到我们的网页上边

2.存储到数据库

这里我们采用的是一个轻量级的数据库sqllite 因为这个是Python里面内置的

所以我们也就是直接使用这个 进行处理 当然大家要是想使用mysql也是没有问题的

import sqlite3
#进行数据的查询操作
conn = sqlite3.connect("test.db")
c=conn.cursor()#获取游标
sql='''
insert into company (id,name,age,address,salary)
values(3,'张三',20,'山东',2000);
'''
##执行sql语句

c.execute(sql)
conn.commit()
conn.close()

只需要注意几个步骤 我们需要先进行数据库的连接 也即是我们的conn进行连接

然后我们进行的是游标的获取 这个后来用于执行我们的sql语句

然后我们可以在sql这个变量里面书写我们的sql语句

属性完成之后 关闭连接

也就是说 我们的流程就是这样的

那么只需要在我们想要放置数据的数据库里面新建一张表 然后将我们的表插入到里面去就行

我们书写一个函数进行我们的数据库的初始化

def init_db(dbpath):
    sql = '''
    create table movie250
    (
     id integer primary key autoincrement,
     info_link text,
     pic_link text,
     cname varchar ,
     ename varchar,
     score numeric ,
     rated numeric ,
     intro text,
     infro text
    );
    '''

    # 创建一个数据表
    conn = sqlite3.connect(dbpath)

    cursor = conn.cursor()
    cursor.execute(sql)
    conn.commit()
    conn.close()

然后我们利用循环处理将我们的数据放置里面

def saveData02(datalist, dbpath):
    init_db(dbpath)
    conn = sqlite3.connect(dbpath)
    cur = conn.cursor()

    for data in datalist:
        for index in range(len(data)):
            if index == 4 or index == 5:#这一步骤是为了我们的数据的处理 就是将我们的数据进行包装上字符串加上双引号
                continue
            data[index] = '"' + data[index] + '"'
        sql = '''
         insert into movie250(
         info_link,pic_link,cname,ename,score,rated,intro,infro
         )values(%s)
        ''' % ",".join(data)#这一步是将我们的数据进行传入也就是
        cur.execute(sql)
        conn.commit()
    cur.close()
    conn.close()

在这里插入图片描述

成功的图片

当我们成功的将我们的数据放置到里面的时候 我们就可以进行下一步

进行页面的编写

4.页面编写

这里我们是直接从网上搜索的模版 ,因为我们主要的目的是我们将我们的数据显示到页面上边去 所以说 我们没有必要太过于关注前端页面的编写 所以说 我们就直接找了一个模版

然后这里有一个新的技术就是一个简单的web框架

from flask import Flask, render_template, request

flask这个就是类似一种路由解析+模版渲染的一种功能

我们就是将我们的网址输入到浏览器中 我们可以利用它的模版渲染将我们的数据渲染到上边去

然后讲一下如何将我们的数据放到前端页面里面去

我在这里就不展示我的前端界面是什么样子了

这个大家可以自行发挥自己的想象力 去绘制出更好的页面

只要可以留出放我们数据的页面就行

看着一段代码

@app.route('/movie')
def movie():
    datalist = []
    # 第一步就是书写我们要连接哪一个数据库
    con = sqlite3.connect("movie.db")
    cur = con.cursor()  # 获取到我们的游标
    sql = "select * from movie"
    data = cur.execute(sql)
    for item in data:
        datalist.append(item)
    cur.close()
    con.close()

    return render_template("movie.html", movies=datalist)  # 这句话就是将我们的movies的变量传递到我们的网页上边去

我们的return中 我们将我们的数据以movies变量进行接收

然后我们在前端就可以进行实际的操作我们从后端传入的数据

然后写入我们特定的语句 这里其实和vue很像 就是要一种数据的渲染

看一下我们的渲染语句好了

          {% for movie in movies %}#这里写的是循环语句
                        <tr>
                            <td>{{ movie[0] }}</td>

                            <td>
                                <a href="{{ movie[1] }}" target="_blank">
                                    {{ movie[3] }}
                                </a>
                            </td>
                            <td>{{ movie[4] }}</td>
                            <td>{{ movie[5] }}</td>
                            <td>{{ movie[6] }}</td>
                            <td>{{ movie[7] }}</td>
                            <td>{{ movie[8] }}</td>
                        </tr>
                    {% endfor %}

数据渲染完成之后就是下面的结果

在这里插入图片描述

然后这里给大家推荐一个数据可视化的

网站 里面有很多的数据可视化的东西

ECharts 在线构建 (apache.org)

里面有大量的图标 我们只需要将我们的想放的数据放到里面就行了

在这里插入图片描述

我们就可以直接从里面去获取到我们想要的图表进行操作

在这里插入图片描述

我们要先进行的可以从这个图表里面调节好我们想要的数据如何进行展示我们的数据

修改好了 直接拿过来用就行了
在这里插入图片描述

在这里插入图片描述

也就是渲染的操作处理

其实总的说一下这个

就是将我们是先储存好的数据放到我们的前端的页面上边去 就是这样的模版渲染

就是说 我们的Python也是可以实现简单的web开发

结语

大家最好还是尽量动手去操作一下 这样的话更加有助于大家实际的进行操作

然后我的代码放到这里

大家有需要直接可以去拿

Python数据分析: 基于Python实现简单数据分析 (gitee.com)

在这里插入图片描述

数据可视化??

如何使我们的数据 数据可以被理解

就是不单单是存储起来,数据可视化的需求就很需要被得到

flask 作为的是web框架 最初的作用是为了开发我们的web应用程序。

这个是帮助我们做网站的

echarts是一个开发的图标就是用js做的

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-02-26 11:26:58  更:2022-02-26 11:27:05 
 
开发: 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年11日历 -2024/11/16 0:16:40-

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