当前位置: 首页 > news >正文

创建网站容易吗设计网装修

创建网站容易吗,设计网装修,网站建立于网页设计,免费直播sdk文章目录 Python爬虫项目基础知识一、爬虫与数据分析1.1 Python中的requests库Requests 库的安装Requests 库的 get() 方法爬取网页的通用代码框架HTTP 协议及 Requests 库方法Requests 库主要方法解析 1.2 python中的json库1.3 xpath学习之python中lxml库html了解html结构html… 文章目录 Python爬虫项目基础知识一、爬虫与数据分析1.1 Python中的requests库Requests 库的安装Requests 库的 get() 方法爬取网页的通用代码框架HTTP 协议及 Requests 库方法Requests 库主要方法解析 1.2 python中的json库1.3 xpath学习之python中lxml库html了解html结构html标签html属性 1.4xpathxpath定义xpath常见使用方法xpath的谓语结构 1.5 表格操作openpyxl演示代码创建工作簿操作数据一个单元格多个单元格仅值数据存储保存到文件另存为流从文件加载 1.5 python中的时间库time 二、可视化2.1 matplotlib模块学习2.2.1 折线图a. 设置画布大小b. 自定义x轴、y轴刻度c. x轴显示中文d. 轴标签和标题e. 添加网格线f. 同一图中同时绘制多条折线g. 同时绘制两个图h. 绘制数学函数图像i. 设置字体大小 2.2.2 散点图绘制2.2.3 柱状图a. 多组柱状图b. 垂直水平方向的柱状图 2.2.4 直方图2.2.5 饼图 2.2 seaborn模块学习2.2.1 relplot()函数散点型折线型 2.2.2 分类型绘图条形图 2.2.3 泰坦尼克号案例学习2.2.4 箱体型绘图2.2.5 分布型绘图四变量两两关系分布图 2.2.3 泰坦尼克号案例学习2.2.4 箱体型绘图2.2.5 分布型绘图四变量两两关系分布图 2.3 pyecharts模块学习 Python爬虫项目基础知识 仅供参考合法爬取 一、爬虫与数据分析 1.1 Python中的requests库 Requests 库的安装 Win 平台“以管理员身份运行” cmd执行 pip install requests等待安装 Requests 库的安装小测 Requests 库的 get() 方法 response n. 响应反应回答 Response 对象包含服务器返回的所有信息也包含请求的 Request 信息 r requests.get( url , paramsNone , **kwargs ) //---url拟获取页面的 url 链接 //---paramsurl 中的额外参数字典或字节流格式可选 //---**kwargs12 个控制访问的参数[补充]参考 get 方法的文档可以看出 get 方法使用了 request 方法进行封装也就是说 request 库一共提供 7 常用方法除了第一个 request 方法外其它的 6 个方法都是通过调用 request 方法实现的。其实也可以这样认为 requests 库其实只有一个方法就是 request 方法但是为了让大家编写程序更方便提供了额外 6 个方法。 Requests 库的 2 个重要对象 Response 对象的属性 属性说明r.status_codeHTTP请求的返回状态, 200表示连接成功, 404表示失败r.textHTTP响应内容的字符串形式即, url对应的页面内容r.encoding从HTTP header中猜测的响应内容编码方式r.apparent_encoding从内容中分析出的响应内容编码方式(备选编码方式)r.contentHTTP响应内容的二进制形式 r.status_code只要不是200其实都是连接失败的 在使用 get 方法获取网上资源的基本流程 理解 Response 的编码 r.encoding编码方式是从 http 的 heder 中的 charset 字段获得的如果 header 中不存在 charset则默认认为编码为 ISO-8859-1这样的编码不能解析中文。r.text 根据 r.encoding 显示网页内容r.apparent_encoding根据 http 的内容部分而不是头部分去分析内容中出现文本可能的编码形式。即根据网页内容分析出的编码方式, 可以看作是 r.encoding 的备选 为什么将 r.apparent_encoding 解析出来的编码方式赋给 r.encoding 后网页中的中文就可以分析出来难道 r.text 是以 r.encoding 的方式进行编码的吗为什么头部分析出来的编码方式会与内容解析出来的不同 答r.text 是以 r.encoding 的方式进行编码 爬取网页的通用代码框架 在介绍爬取网页的通用代码框架之前我们需要理解 Requests 库的异常 r.raise_for_status()在方法内部判断 r.status_code 是否等于 200不需要增加额外的 if 语句该语句便于利用 try-except 进行异常处理如果状态码不是200产生异常 requests.HTTPError。 import requests def getHTMLText(url):try:r requests.get(url)r.raise_for_status()r.encoding r.apparent_encodingreturn r.textexcept:# print(r.status_code)return 产生异常 if __name____main__:url http://www.baidu.comprint(getHTMLText(url))HTTP 协议及 Requests 库方法 HTTPHyperText Transfer Protocol超文本传输协议。是一个基于 “请求与响应” 模式的、无状态的应用层协议。无状态指的是第一次请求与第二次请求之间并没有相关的关联。HTTP 协议采用 URL 作为定位网络资源的标识。 URL 格式如下http://host[:port][path]       host合法的 Internet 主机域名或 IP 地址       port端口号缺省端口为 80       path请求资源的路径 HTTP 实例http://www.bit.edu.cn       http://220,181,111,188/duty 文件的路径一样只不过这个文件不在电脑里在 internet 上那每一个 URL对应了 internet 上的一个数据资源。 HTTP 协议对资源的操作 理解 PATCH 和 PUT 的区别 假设 URL 位置有一组数据 UserInfo包括 UserID、UserName 等20个字段 需求用户修改了 UserName其他不变。 采用 PATCH仅向 URL 提交 UserName 的局部更新请求。 采用 PUT必须将所有 20 个字段一并提交到 URL未提交字段被删除。 PATCH 的最主要好处节省网络带宽当 URL 对应的资源是很庞大资源的时候 HTTP 协议与 Requests 库 Requests 库的 head() 方法 r.headers : 以字典对象存储服务器响应头但是这个字典比较特殊字典键不区分大小写若键不存在则返回 None Requests 库主要方法解析 Requests 库的 7 个主要方法 方法说明requests.request()构造一个请求,支撑以下各方法的基础方法requests.get()获取HTML网页的主要方法,对应于HTTP的GETrequests.head()获取HTML网页头信息的方法,对应于HTTP的HEADrequests.post()向HTML网页提交POST请求的方法,对应于HTTP的POSTrequests.put()向HTML网页提交PUT请求的方法,对应于HTTP的PUTrequests.patch()向HTML网页提交PUT请求的方法,对应于HTTP的PATCHrequests.delete()向HTML页面提交删除请求,对应于HTTP的DELETE requests.request(method, url, **kwargs)method请求方式对应get/put/post等七种 r requests. request(GET, url, **kwargs)r requests.request(HEAD, url, **kwargs)r requests.request(POST, url, **kwargs)r requests.request(PUT, url, **kwargs)r requests.request(PATCH, url, **kwargs)r requests.request(delete, url, **kwargs)r requests.request(OPTIONS, url, **kwargs) OPTIONS向服务器获取一些服务器跟客户端能够打交道的参数并不与获取资源直接相关。url拟获取页面的url链接**kwargs控制访问的参数共 13 个 params字典或字节序列作为参数增加到ur1中data字典、字节序列或文件对象作为Request的内容jsonJSON格式的数据作为Request的内容headers字典HTTP定制头cookies字典或CookieJarRequest中的cookieauth元组支持HTTP认证功能files字典类型传输文件timeout设定超时时间秒为单位proxies字典类型设定访问代理服务器可以增加登录认证redirectsTrue/False默认为 True重定向开关streamTrue/False默认为 True获取内容立即下载开关verifyTrue/False默认为 True认证 SSL 证书开关cert本地 SSL 证书路径 使用示例 kv {cn: 导演, pcn: 娱乐明星} r requests.request(GET, http://tieba.baidu.com/f/index/forumpark, paramskv) r.encoding r.apparent_encoding print(r.url)这两种方法是等价的 r requests.request(get, http://www.baidu.com) r requests.get(http://www.baidu.com) fs {file:open(data.x1s,rb)} r requests.request(pOST,http://python123.io/ws,filesfs) pxs { http:http://xxx:xxxhttps:https://xxxx:xxx } r requests.request(GET,http://www.baidu.com,proxiespxs) http 协议中向某一个 url 提交资源的功能在服务器上是严格受控的因为这存在很大的安全问题。 网络爬虫的尺寸 小规模数据量小中规模数据规模较大大规模搜索引擎爬取速度不敏感爬取速度敏感爬取速度关键Requests 库Scrapy 库定制开发爬取网页、玩转网页爬取网站、爬取系列网站爬取全网 1.2 python中的json库 json数据是一种只包含双引号的字符串格式任何对象经过json序列化后单引号也会转成双引号。 import jsondic{name:xiaohu} print(json.dumps(dic)) #{name: xiaohu}i8 print(json.dumps(i)) # 8 print(type(json.dumps(i))) #class strshello print(json.dumps(s)) #hello print(type(json.dumps(s))) #class strl[12,34] print(json.dumps(l)) #[11, 22]JSON表示的对象就是标准的JavaScript语言的对象JSON和Python内置的数据类型对应如下 JSON类型Python类型{}dict[]list“string”str数字int 或者floattrue/falseTrue/FalsenullNone dumps()和loads()函数 fopen(序列化对象,w) f.write(j) #-------------------打开、写入两步等价于json.dump(dic,f) f.close() #-----------------------------反序列化br import json fopen(序列化对象) datajson.loads(f.read()) # 打开、读两步等价于datajson.load(f)无论数据是怎样创建的只要满足json格式就可以json.loads出来,不一定非要dumps的数据才能loadsjson.dumps()中的ensure_asciiFalse 在使用json.dumps时要注意一个问题 输出的会是 ‘中国’ 中的ascii 字符码而不是真正的中文。 这是因为json.dumps 序列化时对中文默认使用的ascii编码.想输出真正的中文需要指定ensure_asciiFalse python数据格式切换json的方法 json.dumps(data) python ----json 数据格式转换 json.dump(data, filename) python ----json 将转换后的数据保存到filename文件中 json.loads(data) json —python 数据格式转换 json.load(data, filename) json —python 将转换后的数据保存到filename文件中 1.3 xpath学习之python中lxml库 html了解 超文本标记语言是用来描述网页的一种语言。主要用于控制数据的显示和外观。HTML文档一定意义上可以被称为网页。但反过来说网页不仅仅是HTML网页本质有三部分构成负责内容结构的HTML负责表现的CSS以及负责行为的javascript。本文主要分享的是最核心的内容结构部分。 html结构 完整的HTML文件至少包括标签、标签、标签和标签并且这些标签都是成对出现的开头标签为结束标签为/在这两个标签之间添加内容。通过这些标签中的相关属性可以设置页面的背景色、背景图像等。br/ 例如我们打开豆瓣首页摁下键盘上的F12键打开浏览器自带**“开发者工具”**可以看到一个完整的html文档结构如下图 从上图可以看出一个完整的html文档主要包含三部分DTD文档头head头部信息和body正文信息。其中DTD文档头用来告诉浏览器执行标准是什么比如html4或是html5head头部信息用来说明浏览器的编码方式和文档头名称body顾名思义就是浏览器的正文部分。 html标签 作为开始和结束的标记由尖括号包围的关键词比如 标签对中的第一个标签是开始标签第二个标签是结束标签。html中常见标签如下 其中 “ ul li ”是一种嵌套顺序无序列表成对出现li的父元素必须是ul或者ol不同之处在于ol是一种有序列列表而ul是无序列表 html属性 属性是用来修饰标签的放在开始标签里里面html中常见四大属性 属性说明class规定元素的类名大多数时候用于指定样式表中的类id唯一标识一个元素的属性在html里面必须是唯一的href指定超链接目标的urlsrc指定图像的url 1.4xpath xpath定义 是一种路径查询语言简单的说就是利用一个路径表达式从html文档中找到我们需要的数据位置进而将其写入到本地或者数据库中。可以将xpath类比为sql结构化查询语言 xpath常见使用方法 符号功能//表示在整个文本中查找是一种相对路径/表示则表示从根节点开始查找是一种绝对路径text()找出文本值找出标签对应的属性值比如href就是找出对应的href链接.表示当前节点…表示当前节点的父节点 当然xpath除了上述常见用法外还存两种比较特殊的用法以相同的字符开头标签套标签。 用法1以相同的字符开头starts-with(属性部分属性字符相同部分 用法2标签套标签string(.) #以相同的字符开头 #比如我们想同时提取到下列html中三条文本内容的话就需要使用starts-with方法 html1 !DOCTYPE html htmlhead langenmeta charestutf-8title/title/headbodydiv idtest-1需要的内容1/divdiv idtest-2需要的内容2/divdiv idtestfault需要的内容3/div/body /html #爬取代码 from lxml import etree selector etree.HTML(html1) content selector.xpath(//div[starts-with(id,test)]/text()) for each in content:print each还有一种是标签套标签形式参考如下例子 html2 !DOCTYPE html htmlhead langenmeta charestutf-8title/title/headbodydiv idtest3我左青龙,span idtiger右白虎ul上朱雀,li下玄武,/li/ul/span龙头在胸口/div/body /html#如果我们想爬取的内容是html文档中的所有文本的话需要使用string方法进行提取 selector2 etree.HTML(html2) content2 selector2.xpath(//div[idtest3])[0] #列表只有一个元素 info content2.xpath(string(.)) content3 info.replace(\n,).replace( ,) print content3xpath的谓语结构 所谓谓语条件就是对路径表达式的附加条件。所有的条件都写在方括号[]中表示对节点进行进一步的筛选。例如 ?xml version1.0 encodingISO-8859-1? bookstorebooktitle langengHarry Potter/titleprice29.99/price/bookbooktitle langengLearning XML/titleprice39.95/price/bookbooktitle langengHarry Potter/titleprice29.99/price/bookbooktitle langengLearning XML/titleprice39.95/price/bookbooktitle langengHarry Potter/titleprice29.99/price/bookbooktitle langengLearning XML/titleprice39.95/price/book /bookstore下面从几个简单的例子让大家体会一下 /bookstore/book[1] 表示选择bookstore的第一个book子元素。/bookstore/book[last()] 表示选择bookstore的最后一个book子元素。/bookstore/book[last()-1] 表示选择bookstore的倒数第二个book子元素。/bookstore/book[position()❤️] 表示选择bookstore的前两个book子元素。//title[lang] 表示选择所有具有lang属性的title节点。//title[lang‘eng’] 表示选择所有lang属性的值等于eng的title节点。 trtd valigntopinput typeradio namepayment value1 checked iscod0/tdtd valigntopstrong数加科技/strong/td /tr//strong[text()数加科技]/../../td[1]/input函数说明举例contains选取属性或者文本包含某些字符//div[contains(id, ‘data’)] 选取 id 属性包含 data 的 div 元素 //div[contains(string(), ‘支付宝’)] 选取内部文本包含“支付宝”的 div 元素starts-with选取属性或者文本以某些字符开头//div[starts-with(id, ‘data’)] 选取 id 属性以 data 开头的 div 元素 //div[starts-with(string(), ‘银联’)] 选取内部文本以“银联”开头的 div 元素ends-with选取属性或者文本以某些字符开头//div[ends-with(id, ‘require’)] 选取 id 属性以 require 结尾的 div 元素 //div[ends-with(string(), ‘支付’)] 选取内部文本以“支付”结尾的 div 元素 1.5 表格操作openpyxl 用于读取和写入 Excel 2010 xlsx/xlsm/xltx/xltm 文件。通过 pip install openpyxl 命令下载 openpyxl 库。 演示代码 通过下面的演示代码可以快速创建一个名为 sample.xlsx 的表格文件 from openpyxl import Workbook import datetime# 创建一个工作簿 wb Workbook() # 获取活动工作表 ws wb.active # 数据可以直接分配到单元格 ws[A1] 42 # 行也可以追加 ws.append([1, 2, 3]) # Python类型将自动转换 ws[A2] datetime.datetime.now() # 保存文件 wb.save(sample.xlsx)创建工作簿 不需要提前在文件系统上创建文件直接就可以使用 openpyxl 开始创建表格。先导入 Workbook 类再使用 Workbook.active 方法获取一个工作表 from openpyxl import Workbook wb Workbook() ws wb.active默认情况下 Workbook.active(value) 方法中的 value 为 0即使用此方法获得第一个工作表我们可以修改此值。也可以使用 Workbook.create_sheet() 方法创建新的工作表 # 在末尾插入默认 ws1 wb.create_sheet(Mysheet) # 插入第一个位置 ws2 wb.create_sheet(Mysheet, 0) # 倒数第二个位置插入 ws3 wb.create_sheet(Mysheet, -1)我们可以随时通过 Worksheet.title 属性更改工作表名称 ws.title New Title给工作表命名后就可以将其作为工作簿的键值以指向对应的工作表并可以使用 Workbook.sheetname 属性查看工作簿中所有工作表的名称亦可以遍历工作表 ws3 wb[New Title]print(wb.sheetnames) # [Sheet2, New Title, Sheet1]for sheet in wb:print(sheet.title)我们可以复制某个工作簿创建一个副本。该行为仅复制单元格值、样式、超链接、注释和某些工作表属性尺寸、格式、属性如果工作簿以 read-only 或 write-only 只读模式打开则不能复制工作表 source wb.active target wb.copy_worksheet(source)操作数据 单元格可以直接作为工作表中的键值进行访问例如返回 A4 处的单元格如果不存在则创建一个单元格可以直接分配值 c ws[A4] ws[A4] 4一个单元格 通过 Worksheet.cell() 方法可以使用 行 和 列 定位要访问的单元格 d ws.cell(row4, column2, value10)多个单元格 我们可以通过切片访问单元格范围行或列的范围可以用类似方法获得 cell_range ws[A1:C2] colC ws[C] col_range ws[C:D] row10 ws[10] row_range ws[5:10]也可以使用 Worksheet.iter_rows() 或 Worksheet.iter_cols() 方法获取行、列但是由于性能原因这两个方法在 只读 模式下不可用 for row in ws.iter_rows(min_row1, max_col3, max_row2):for cell in row:print(cell) # Cell Sheet1.A1 # Cell Sheet1.B1 # Cell Sheet1.C1 # Cell Sheet1.A2 # Cell Sheet1.B2 # Cell Sheet1.C2 for col in ws.iter_cols(min_row1, max_col3, max_row2):for cell in col:print(cell) # Cell Sheet1.A1 # Cell Sheet1.A2 # Cell Sheet1.B1 # Cell Sheet1.B2 # Cell Sheet1.C1 # Cell Sheet1.C2如果需要遍历所有行或列则可以使用 Worksheet.rows 或 Worksheet.columns 属性但是同样在 只读 模式下不可用 ws wb.active ws[C9] hello world tuple(ws.rows) # ((Cell Sheet.A1, Cell Sheet.B1, Cell Sheet.C1), # (Cell Sheet.A2, Cell Sheet.B2, Cell Sheet.C2), # (Cell Sheet.A3, Cell Sheet.B3, Cell Sheet.C3), # (Cell Sheet.A4, Cell Sheet.B4, Cell Sheet.C4), # (Cell Sheet.A5, Cell Sheet.B5, Cell Sheet.C5), # (Cell Sheet.A6, Cell Sheet.B6, Cell Sheet.C6), # (Cell Sheet.A7, Cell Sheet.B7, Cell Sheet.C7), # (Cell Sheet.A8, Cell Sheet.B8, Cell Sheet.C8), # (Cell Sheet.A9, Cell Sheet.B9, Cell Sheet.C9)) tuple(ws.columns) # ((Cell Sheet.A1, # Cell Sheet.A2, # Cell Sheet.A3, # Cell Sheet.A4, # Cell Sheet.A5, # Cell Sheet.A6, # ... # Cell Sheet.C9))仅值 如果只需要工作表中的值则可以使用 Worksheet.columns 属性这会遍历工作表中的所有行但仅返回单元格的值 for row in ws.values:for value in row:print(value)通过 Worksheet.iter_rows() 并 Worksheet.iter_cols() 可以获取 values_only 参数只返回单元格的值 for row in ws.iter_rows(min_row1, max_col3, max_row2, values_onlyTrue):print(row) # (None, None, None) # (None, None, None)如果我们只需要工作表的 最大行数 和 最大列数可以使用 max_row 和 max_column 属性获取例如一个4行15列的工作表 print(ws.max_row) # 4 print(ws.max_column) # 15数据存储 有了 Cell 就可以为其分配一个值 c.value hello, world print(c.value) # hello, world d.value 3.14 print(d.value) # 3.14保存到文件 保存工作簿的最简单、安全的方法是使用对象的 Workbook.save() 方法 wb Workbook() wb.save(balances.xlsx)如果文件已经存在此操作将覆盖现有文件不会抛出异常或警告。 另存为流 如果要将文件保存到流中例如在使用Web应用程序Pyramid、Flask、Django时只需使用 NamedTemporaryFile() 方法即可 from tempfile import NamedTemporaryFile from openpyxl import Workbook wb Workbook() with NamedTemporaryFile() as tmp:wb.save(tmp.name)tmp.seek(0)stream tmp.read()我们也可以指定属性 templateTrue将工作簿另存为模板 wb load_workbook(document.xlsx) wb.template True wb.save(document_template.xltx)或将 template 属性设置为 False默认以另存为文档 wb load_workbook(document_template.xltx) wb.template False wb.save(document.xlsx, as_templateFalse)从文件加载 可以通过 openpyxl.load_workbook() 打开现有的工作簿 from openpyxl import load_workbook wb2 load_workbook(test.xlsx) print(wb2.sheetnames) # [Sheet2, New Title, Sheet1]1.5 python中的时间库time import time store_date time.strftime(%Y-%m-%d %H:%M:%S, time.localtime(int(time.time()))) print(今天是 beijingriqi_%s,%s % (store_date, asda))[output]: 今天是 beijingriqi_2022-04-17 23:30:43,asda二、可视化 2.1 matplotlib模块学习 快速安装 pip install matplotlib2.2.1 折线图 import matplotlib.pyplot as plt import randomxrange(10) # 定义x轴的数据 列表的数据类型 y[random.uniform(15,35) for i in x] # 定义y轴的数据 # 列表的数据类型plt.plot(x, y) # 绘制图像 plt.savefig(a1.png) # 保存图像 在当前目录保存名为test.png的图片必须在show方法前否则图片就是空白 # plt.show() # 展示图像 a. 设置画布大小 我们使用plt.figure()函数来设置画布大小其参数如下 figsize : 设置画布的大小单位英寸 长宽dpi : 设置清晰度 import matplotlib.pyplot as plt import randomxrange(10) # 定义x轴的数据 y[random.uniform(15,35) for i in x] # 定义y轴的数据plt.figure(figsize(20,8),dpi80) # 设置画布大小与清晰度plt.plot(x, y) # 绘制图像 plt.show() # 展示图像b. 自定义x轴、y轴刻度 xticks,yticks使用自定义刻度的函数它有两个参数 ticks要显示x轴的刻度labels给对应的x刻度设置一个标签并且覆盖之前的刻度与传入ticks的列表长度要相等。 x轴每隔2两个数显示 import matplotlib.pyplot as plt import randomxrange(10) # 定义x轴的数据 y[random.uniform(15,35) for i in x] # 定义y轴的数据plt.figure(figsize(20,8),dpi80) # 设置画布大小与清晰度plt.xticks(x[::1]) # 定义显示的x轴步长为1plt.plot(x, y) # 绘制图像 plt.show() # 展示图像c. x轴显示中文 matplotlib默认字体是不支持中文的需要更改有多种方法现在只提供一种 import matplotlib.pyplot as plt import randomxrange(10) # 定义x轴的数据 y[random.uniform(15,35) for i in x] # 定义y轴的数据plt.figure(figsize(20,8),dpi80) # 设置画布大小与清晰度plt.xticks(x[::2],[1月,2月,3月,4月,5月]) # 第二个参数可以指定显示字符串不过传入xticks的这两个参数长度要相等plt.plot(x, y) # 绘制图像 plt.show() # 展示图像修改matplotlib默认字体使它支持显示中文 方法一 import matplotlib.pyplot as plt import randomplt.rcParams[font.sans-serif][SimHei] # 用来正常显示中文标签xrange(10) # 定义x轴的数据 y[random.uniform(15,35) for i in x] # 定义y轴的数据plt.figure(figsize(20,8),dpi80) # 设置画布大小与清晰度plt.xticks(x[::2],[1月,2月,3月,4月,5月]) # 第二个参数可以指定显示字符串不过传入xticks的这两个参数长度要相等plt.plot(x, y) # 绘制图像 plt.show() # 展示图像方法二 修改全局字体样式需要使用 matplotlib 模块的 rcParamsfrom matplotlib import rcParamsrcParams[font.family] SimHei # 黑体常用字体 宋体SimSun 黑体SimHei 微软雅黑Microsoft YaHei 微软正黑体Microsoft JhengHei 新宋体NSimSun 新细明体PMingLiU 细明体MingLiU 标楷体DFKai-SB 仿宋FangSong 楷体KaiTi 隶书LiSu 幼圆YouYuan 华文细黑STXihei 华文楷体STKaiti 华文宋体STSong 华文中宋STZhongsong 华文仿宋STFangsong 方正舒体FZShuTi 方正姚体FZYaoti 华文彩云STCaiyun 华文琥珀STHupo 华文隶书STLiti 华文行楷STXingkai 华文新魏STXinweid. 轴标签和标题 xlabel、ylabel使用修改x,y轴标签 title可修改标题 import matplotlib.pyplot as plt import randomplt.rcParams[font.sans-serif][SimHei] # 用来正常显示中文标签xrange(10) # 定义x轴的数据 y[random.uniform(15,35) for i in x] # 定义y轴的数据plt.figure(figsize(20,8),dpi80) # 设置画布大小与清晰度plt.xticks(x[::2],[1月,2月,3月,4月,5月]) # 第二个参数可以指定显示字符串不过传入xticks的这两个参数长度要相等plt.xlabel(时间变化) # 修改标签 plt.ylabel(温度变化)plt.title(我是标题) # 修改标题plt.plot(x, y) # 绘制图像 plt.show() # 展示图像e. 添加网格线 grid方法来设置图表中的网格线 import matplotlib.pyplot as plt import randomplt.rcParams[font.sans-serif][SimHei] # 用来正常显示中文标签xrange(60) # 定义x轴的数据 y[random.uniform(15,18) for i in x] # 定义y轴的数据plt.figure(figsize(20,8),dpi80) # 设置画布大小与清晰度plt.plot(x, y) # 绘制图像plt.xticks(x[::5],[{}分钟.format(i) for i in x][::5]) # 第二个参数可以指定显示字符串不过传入xticks的这两个参数长度要相等 plt.yticks(range(0,40,5)) # 自定义y轴刻度 plt.xlabel(时间变化) # 修改标签 plt.ylabel(温度变化)plt.title(我是标题) # 修改标题# 增加网格显示0.5表示透明度为50% plt.grid(linestyle--,alpha0.5)plt.show() # 展示图像f. 同一图中同时绘制多条折线 只是数据多准备一份罢了基本什么区别 例外再添加上图例legend可读性更好 import matplotlib.pyplot as plt import randomplt.rcParams[font.sans-serif][SimHei] # 用来正常显示中文标签xrange(60) # 定义x轴的数据 y_1[random.uniform(15,18) for i in x] # 定义y轴的数据 y_2[random.uniform(1,3) for i in x] # 定义y轴的数据plt.figure(figsize(20,8),dpi80) # 设置画布大小与清晰度plt.plot(x, y_1,label上海) # 绘制图像 plt.plot(x, y_2,label北京) # 绘制图像plt.xticks(x[::5],[{}分钟.format(i) for i in x][::5]) # 第二个参数可以指定显示字符串不过传入xticks的这两个参数长度要相等 plt.yticks(range(0,40,5)) # 自定义y轴刻度plt.xlabel(时间变化) # 修改标签 plt.ylabel(温度变化)plt.title(我是标题) # 修改标题# 增加网格显示0.5表示透明度为50% plt.grid(linestyle--,alpha0.5)plt.legend() #绘制图例plt.show() # 展示图像g. 同时绘制两个图 import matplotlib.pyplot as plt import randomplt.rcParams[font.sans-serif][SimHei] # 用来正常显示中文标签 plt.rcParams[axes.unicode_minus] False # 用来正常显示负号# x,y轴的数据 xrange(60) y_shanghai[random.uniform(15,18) for i in x] # 另一个城市 y_beijing[random.uniform(1,3) for i in x] fig 表示的是要绘制的一个画布 ax 表示的是在fig这个画布的对象上具体要绘制的对象子图。fig, ax plt.subplots(1,2,figsize(20,8),dpi80) # 把画布分成一行两列ax[0].plot(x,y_shanghai,b--,label上海) ax[1].plot(x,y_beijing,r,label北京)# 图例必须在plot后面 简单显示图例 ax[0].legend() ax[1].legend() # 修改x y刻度 x_label[11点{}分.format(i) for i in range(60)] ax[0].set_xticks(x[::5],x_label[::5]) ax[0].set_yticks(range(0,40,5))ax[1].set_xticks(x[::5],x_label[::5]) ax[1].set_yticks(range(0,40,5)) # 增加网格显示 ax[0].grid(linestyle--,alpha0.5)ax[1].grid(linestyle--,alpha0.5)# 添加描述信息 ax[0].set_xlabel(时间变化) ax[0].set_ylabel(温度变化) ax[0].set_title(上海城市11点到12点每分钟的温度变化状况1)ax[1].set_xlabel(时间变化) ax[1].set_ylabel(温度变化) ax[1].set_title(北京城市11点到12点每分钟的温度变化状况2) plt.show()h. 绘制数学函数图像 import matplotlib.pyplot as plt import numpy as np; xnp.linspace(-10,10,1000000) yx**2plt.figure(figsize(8,8),dpi80) plt.grid(linestyle--,alpha0.5) plt.plot(x,x**2) plt.show()i. 设置字体大小 在前面的例子中感觉显示的字体太小了看的不舒服现在来设置一下。 通过plt.rcParams[font.size]18来指定字体的大小 import matplotlib.pyplot as plt import randomplt.rcParams[font.sans-serif][SimHei] # 用来正常显示中文标签 plt.rcParams[font.size]18 # 设置字体大小 xrange(60) # 定义x轴的数据 y[random.uniform(15,18) for i in x] # 定义y轴的数据plt.figure(figsize(20,8),dpi80) # 设置画布大小与清晰度plt.plot(x, y) # 绘制图像plt.xticks(x[::5],[{}分钟.format(i) for i in x][::5]) # 第二个参数可以指定显示字符串不过传入xticks的这两个参数长度要相等 plt.yticks(range(0,40,5)) # 自定义y轴刻度 plt.xlabel(时间变化) # 修改标签 plt.ylabel(温度变化)plt.title(我是标题) # 修改标题# 增加网格显示0.5表示透明度为50% plt.grid(linestyle--,alpha0.5)plt.show() # 展示图像2.2.2 散点图绘制 主要使用scatter方法来绘制散点图参数如下 参数说明 xy长度相同的数组也就是我们即将绘制散点图的数据点输入数据。s点的大小默认 20也可以是个数组数组每个参数为对应点的大小。c点的颜色默认蓝色 ‘b’也可以是个 RGB 或 RGBA 二维行数组。marker点的样式默认小圆圈 ‘o’。cmapColormap默认 None标量或者是一个 colormap 的名字只有 c 是一个浮点数数组的时才使用。如果没有申明就是 image.cmap。normNormalize默认 None数据亮度在 0-1 之间只有 c 是一个浮点数的数组的时才使用。vminvmax亮度设置在 norm 参数存在时会忽略。alpha透明度设置0-1 之间默认 None即不透明。linewidths标记点的长度。edgecolors颜色或颜色序列默认为 ‘face’可选值有 ‘face’, ‘none’, None。plotnonfinite布尔值设置是否使用非限定的 c ( inf, -inf 或 nan) 绘制点。**kwargs其他参数。 import matplotlib.pyplot as plt import numpy as np plt.rcParams[font.size] 18 x np.array([1, 2, 3, 4, 5, 6, 7, 8]) y np.array([1, 4, 9, 16, 7, 11, 23, 18]) sizes np.array([20,50,100,200,500,1000,60,90]) plt.figure(figsize(8,8),dpi80) plt.scatter(x,y,ssizes) # 绘制散点图 plt.show()# 注意散点图的数据是一维矩阵 并非是列表数据类型2.2.3 柱状图 主要使用 bar() 方法来绘制柱形图。 bar() 方法语法格式如下 x浮点型数组柱形图的 x 轴数据。height浮点型数组柱形图的高度。width浮点型数组柱形图的宽度。bottom浮点型数组底座的 y 坐标默认 0。align柱形图与 x 坐标的对齐方式‘center’ 以 x 位置为中心这是默认值。 ‘edge’将柱形图的左边缘与 x 位置对齐。要对齐右边缘的条形可以传递负数的宽度值及 align‘edge’。**kwargs其他参数。 import matplotlib.pyplot as plt import numpy as np plt.rcParams[font.sans-serif][SimHei] # 用来正常显示中文标签 movie_names [雷神3诸神黄昏,正义联盟,东方快车谋杀案,寻梦环游记,全球风暴, 降魔传,追捕,七十七天,密战,狂兽,其它] tickets [73853,57767,22354,15969,14839,8725,8716,8318,7916,6764,52222] x range(len(movie_names))plt.figure(figsize(20,8),dpi80) plt.bar(x,tickets,color[b,g,r,c,m,y,k]) plt.xticks(x,movie_names) plt.title(电影票房收入对比) plt.grid(linestyle--,alpha0.5) plt.show()a. 多组柱状图 import matplotlib.pyplot as plt import numpy as npplt.rcParams[font.sans-serif][SimHei] # 用来正常显示中文标签 plt.rcParams[axes.unicode_minus] False # 用来正常显示负号movie_name [雷神3:诸神黄昏,正义联盟,寻梦环游记] first_day [10587.6,10062.5,1275.7] first_weekend[36224.9,34479.6,11830]plt.figure(figsize(20,8),dpi80)xrange(len(movie_name)) plt.bar(x,first_day,width0.2,label首日票房) # 绘制第一组柱状图 plt.bar([i0.2 for i in x],first_weekend,width0.2,label首周票房) # 绘制第二组柱状图plt.legend() # 绘制图例plt.xticks([i0.1 for i in x],movie_name) # 修改x轴刻度plt.show()b. 垂直水平方向的柱状图 垂直方向的柱状图可以使用barh() 方法来设置 import matplotlib.pyplot as pltx [Runoob-1, Runoob-2, Runoob-3, C-RUNOOB] y [12, 22, 6, 18] plt.figure(figsize(20,8),dpi80) plt.barh(x,y) plt.show()2.2.4 直方图 使用hist()方法来绘制直方图 import matplotlib.pyplot as pltplt.rcParams[font.sans-serif][SimHei] # 用来正常显示中文标签 plt.rcParams[axes.unicode_minus] False # 用来正常显示负号import matplotlib.pyplot as plt# 电影时长分布状况 time [131, 98, 125, 131, 124, 139, 131, 117, 128, 108, 135, 138, 131, 102, 107, 114, 119, 128, 121, 142, 127, 130, 124, 101, 110, 116, 117, 110, 128, 128, 115, 99, 136, 126, 134, 95, 138, 117, 111,78, 132, 124, 113, 150, 110, 117, 86, 95, 144, 105, 126, 130,126, 130, 126, 116, 123, 106, 112, 138, 123, 86, 101, 99, 136,123, 117, 119, 105, 137, 123, 128, 125, 104, 109, 134, 125, 127,105, 120, 107, 129, 116, 108, 132, 103, 136, 118, 102, 120, 114,105, 115, 132, 145, 119, 121, 112, 139, 125, 138, 109, 132, 134,156, 106, 117, 127, 144, 139, 139, 119, 140, 83, 110, 102,123,107, 143, 115, 136, 118, 139, 123, 112, 118, 125, 109, 119, 133,112, 114, 122, 109, 106, 123, 116, 131, 127, 115, 118, 112, 135,115, 146, 137, 116, 103, 144, 83, 123, 111, 110, 111, 100, 154,136, 100, 118, 119, 133, 134, 106, 129, 126, 110, 111, 109, 141,120, 117, 106, 149, 122, 122, 110, 118, 127, 121, 114, 125, 126,114, 140, 103, 130, 141, 117, 106, 114, 121, 114, 133, 137, 92,121, 112, 146, 97, 137, 105, 98, 117, 112, 81, 97, 139, 113,134, 106, 144, 110, 137, 137, 111, 104, 117, 100, 111, 101, 110,105, 129, 137, 112, 120, 113, 133, 112, 83, 94, 146, 133, 101,131, 116, 111, 84, 137, 115, 122, 106, 144, 109, 123, 116, 111,111, 133, 150] plt.figure(figsize(20,8),dpi80)distince 2 # 每组的间距 plt.hist(time,(max(time)-min(time))//distince) plt.xticks(range(min(time),max(time)2,distince))plt.grid(linestyle--,alpha0.5) plt.xlabel(电影时长大小) plt.ylabel(电影的数据量) plt.title(电影时长分布) plt.show()2.2.5 饼图 使用 pyplot 中的 pie() 方法来绘制饼图。 参数说明 x浮点型数组表示每个扇形的面积。explode数组表示各个扇形之间的间隔默认值为0。labels列表各个扇形的标签默认值为 None。colors数组表示各个扇形的颜色默认值为 None。autopct设置饼图内各个扇形百分比显示格式%d%% 整数百分比%0.1f 一位小数 %0.1f%% 一位小数百分比 %0.2f%% 两位小数百分比。labeldistance标签标记的绘制位置相对于半径的比例默认值为 1.1如 1则绘制在饼图内侧。pctdistance类似于 labeldistance指定 autopct 的位置刻度默认值为 0.6。shadow布尔值 True 或 False设置饼图的阴影默认为 False不设置阴影。radius设置饼图的半径默认为 1。startangle起始绘制饼图的角度默认为从 x 轴正方向逆时针画起如设定 90 则从 y 轴正方向画起。counterclock布尔值设置指针方向默认为 True即逆时针False 为顺时针。wedgeprops 字典类型默认值 None。参数字典传递给 wedge 对象用来画一个饼图。例如wedgeprops{‘linewidth’:5} 设置 wedge 线宽为5。textprops 字典类型默认值为None。传递给 text 对象的字典参数用于设置标签labels和比例文字的格式。center 浮点类型的列表默认值(0,0)。用于设置图标中心位置。 frame 布尔类型默认值False。如果是 True绘制带有表的轴框架。 rotatelabels 布尔类型默认为 False。如果为 True旋转每个 label 到指定的角度。 import matplotlib.pyplot as pltplt.rcParams[font.sans-serif][SimHei] # 用来正常显示中文标签 plt.rcParams[axes.unicode_minus] False # 用来正常显示负号movie_name [雷神3:诸神黄昏,正义联盟,东方快车谋杀案,寻梦环游记,全球风暴,降魔传,追捕,七十七天,密战,狂兽,其它] place_count [60605,54546,45819,28243,13270,9945,7679,6799,6101,4621,20105] plt.figure(figsize(20,8),dpi80) plt.pie(place_count,labelsmovie_name,autopct%1.2f%%) plt.legend() plt.axis(equal) # 确保饼图能化成一个圆 plt.show()2.2 seaborn模块学习 下载模块 pip install seaborn引入模块 import numpy as np import pandas as pd import seaborn as sns import matplotlib.pyplot as plt读取数据 tips pd.read_csv(tips.csv) tips.head()2.2.1 relplot()函数 seaborn.relplot() 这个函数功能非常强大可以用来表示多个变量之间的关联关系。默认情况下是绘制散点图也可以绘制线性图具体绘制什么图形是通过kind参数来决定的。实际上以下两个函数就是relplot的特例 散点类型scatterplot - relplot(kind“scatter”) 线性类型lineplot - relplot(kind“line”) 参数x, y vectors or keys in data指定x轴和y轴上位置的变量hue vector or key in data将生成具有不同颜色的元素的分组变量。可以是按类别的categorical也可以是数字的不过在后一种情况下颜色映射的行为会有所不同。size vector or key in data将生成不同大小元素的分组变量。可以是按类别的categorical也可以是数字的在后一种情况下大小映射的行为会有所不同。style vector or key in data将生成具有不同样式的元素的分组变量。可以具有数字数据类型但将始终被视为按类别的categorical。data pandas.DataFrame, numpy.ndarray, mapping, or sequence输入数据结构。要么是可以分配给命名变量的向量的长形式集合要么是将进行内部整形的宽形式数据集。row, col vectors or keys in data定义要在不同面上绘制的子集的变量。col_wrap int以该宽度“包裹”列变量使列面跨越多行。与行方面不兼容。row_order, col_order lists of strings按顺序组织网格中的行和/或列否则将从数据对象推断顺序。palette string, list, dict, or matplotlib.colors.Colormap映射色调时选择要使用的颜色的方法。字符串值传递给color_palete。List或dict值表示按类别的映射而colormap对象表示数字映射。hue_order vector of strings指定色调语义分类级别的处理和打印顺序。hue_norm tuple or matplotlib.colors.Normalize以数据单位设置归一化范围的一对值或将从数据单位映射到[01]区间的对象。用法意味着数字映射。sizes list, dict, or tuple确定使用大小时如何选择大小的对象。它始终可以是大小值列表或大小变量到大小的dict映射级别。当大小为数字时它也可以是一个元组指定要使用的最小和最大大小以便在此范围内规范化其他值。size_order list指定大小变量级别的出现顺序否则将根据数据确定。大小变量为数字时不相关。size_norm tuple or Normalize object当尺寸变量为数字时以数据单位进行归一化以缩放打印对象。style_order list指定样式变量级别的外观顺序否则将根据数据确定。当样式变量为数字时不相关。dashes boolean, list, or dictionary用于确定如何为样式变量的不同级别绘制线。设置为True将使用默认的破折号代码或者可以将破折号代码列表或样式变量的字典映射级别传递给破折号代码。设置为False将对所有子集使用实线。破折号在matplotlib中指定一个段、间隙长度的元组或一个用于绘制实线的空字符串。markers boolean, list, or dictionary确定如何为样式变量的不同级别绘制标记。设置为True将使用默认标记或者可以将标记列表或将样式变量的字典映射级别传递给标记。设置为False将绘制无标记线。标记在matplotlib中指定。legend “auto”, “brief”, “full”, or False如何绘制图例。如果“简短”数字色调和大小变量将用均匀分布的值样本表示。如果“已满”每组将在图例中获得一个条目。如果为“自动”则根据级别数在简短表示或完整表示之间进行选择。如果为False则不添加图例数据也不绘制图例。kind stringKind of plot to draw这是一种要绘制的图, corresponding to a seaborn relational plot. Options are {scatter and line}.height scalar每个面的高度英寸aspect scalar每个面的纵横比因此纵横比*高度aspect*height表示每个面的宽度facet_kws dict要传递到FacetGrid的其他关键字参数的字典.units vector or key in data识别采样单位的分组变量。使用时将为每个单元绘制一条具有适当语义的单独线但不会添加图例条目。当不需要精确身份时用于显示实验重复的分布。kwargs key, value pairings其他关键字参数传递给底层plotting函数。Returns散点型 需求1分析每周每天花销总额与小费的关系 sns.relplot(xtotal_bill,ytip,datatips).savefig(pngs/a1.png)可以发现消费越高小费越高小费集中在1-5之间 需求2按天分析每天花销总额与小费的关系分类 hue‘day’ sns.relplot(xtotal_bill,ytip,datadata,hueday).savefig(pngs/a1.png)可以发现星期六花销最高对应的小费也越高 需求3按午餐和晚餐分类并按天分析每天花销总额与小费的关系col ‘time’ sns.relplot(xtotal_bill,ytip,data data,hueday,coltime).savefig(pngs/a1.png)需求4按性别分析午餐和晚餐哪个性别付的小费最多row‘sex’ sns.relplot(xtotal_bill,ytip,data data,hueday,coltime,rowsex).savefig(pngs/a1.png)折线型 案例1 sns.relplot(xtotal_bill,ytip,datadata,kindline).savefig(pngs/a1.png)案例2 sns.relplot(xtotal_bill,ytip,datadata,kindline,hueday).savefig(pngs/a1.png)案例3 sns.relplot(xtotal_bill,ytip,datadata,kindline,hueday,coltime).savefig(pngs/a1.png)案例4 sns.relplot(xtotal_bill,ytip,datadata,kindline,hueday,coltime,rowsex).savefig(pngs/a1.png)案例5 sns.relplot(xtimepoint, ysignal, datafmri, kindline, errorbar(ci, 60), hueregion, colevent,styleregion).savefig(pngs/a1.png)案例6 sns.relplot(xtimepoint,ysignal,datafmri,kindline,errorbar(ci, 60),hueregion,colevent).savefig(pngs/a1.png)案例七 sns.relplot(xtimepoint,ysignal,datafmri,kindline,errorbarNone,hueregion,colevent,styleregion).savefig(pngs/a1.png)2.2.2 分类型绘图 分类统计图则是根据分类统计每个分类下的数据的个数或者比例。有以下几种方式 条形图barplot() (with kind“bar”) 柱状图countplot() (with kind“count”) 点线图pointplot() (with kind“point”) 条形图 seaborn中的条形图具有统计功能可以统计出比例平均数也可以按照你想要的统计函数来统计。 sns.catplot(xday,ytotal_bill,data data).savefig(pngs/a1.png)sns.catplot(xday,ytotal_bill,data data,huetime).savefig(pngs/a1.png)sns.catplot(xday,ytotal_bill,data data,huetime,row sex).savefig(pngs/a1.png)sns.catplot(xday,ytotal_bill,data data,kindbar).savefig(pngs/a1.png)sns.catplot(xday,ytotal_bill,data data,kindbar,estimator sum).savefig(pngs/a1.png)sns.catplot(xday,ytotal_bill,data data,kindbar,estimator sum,huetime).savefig(pngs/a1.png)sns.catplot(xday,ytotal_bill,data data,kindbar,estimator sum,huetime,rowsex).savefig(pngs/a1.png)2.2.3 泰坦尼克号案例学习 需求1分析男女获救比例 data1 pd.read_csv(titanic.csv) sns.catplot(xsex,ysurvived,datadata1,kindbar).savefig(pngs/a1.png)需求2按舱位分析男女获救比例 sns.catplot(xsex,ysurvived,datadata1,kindbar,hueclass).savefig(pngs/a1.png)可以发现女性获救比例高于男性说明人类在灾难面前往往考虑更多的弱势群体。三等舱获救比例高于一二等舱说明阶层越高获得的特权就越高 2.2.4 箱体型绘图 sns.boxplot(xday,ytip,datadata)可以发现以星期天为例小费平均值为3最高值将近7最低值低于1全天无异常值。 2.2.5 分布型绘图 sns.distplot()bins柱子分布个数 需求1泰坦尼克号所有乘客年龄分布状况 sns.distplot(data1[age],bins20)需求2二变量分布图 sns.jointplot(xtotal_bill,ytip,datadata,kindhex)参数如下 height图形大小设置 ratio主图和副图之间的比例 space 副图与主图之间的距离 sns.jointplot(xtotal_bill,ytip,datadata,kindhex,gridsize15,height10,ratio3,space0,marginal_kws{rug:True,kde:True},colorred)四变量两两关系分布图 sns.pairplot(data)g(‘pngs/a1.png’) [外链图片转存中...(img-klt2HOrv-1733294501869)]python sns.catplot(xday,ytotal_bill,data data,kindbar,estimator sum,huetime,rowsex).savefig(pngs/a1.png)[外链图片转存中…(img-B5raV7HW-1733294501869)] 2.2.3 泰坦尼克号案例学习 需求1分析男女获救比例 data1 pd.read_csv(titanic.csv) sns.catplot(xsex,ysurvived,datadata1,kindbar).savefig(pngs/a1.png)[外链图片转存中…(img-suebEPMu-1733294501869)] 需求2按舱位分析男女获救比例 sns.catplot(xsex,ysurvived,datadata1,kindbar,hueclass).savefig(pngs/a1.png)[外链图片转存中…(img-7EWEpfpl-1733294501869)] 可以发现女性获救比例高于男性说明人类在灾难面前往往考虑更多的弱势群体。三等舱获救比例高于一二等舱说明阶层越高获得的特权就越高 2.2.4 箱体型绘图 sns.boxplot(xday,ytip,datadata)[外链图片转存中…(img-3m00zP2D-1733294501869)] 可以发现以星期天为例小费平均值为3最高值将近7最低值低于1全天无异常值。 2.2.5 分布型绘图 sns.distplot()bins柱子分布个数 需求1泰坦尼克号所有乘客年龄分布状况 sns.distplot(data1[age],bins20)[外链图片转存中…(img-i3zi7EvU-1733294501869)] 需求2二变量分布图 [外链图片转存中…(img-Zuyxo6sI-1733294501869)] sns.jointplot(xtotal_bill,ytip,datadata,kindhex)[外链图片转存中…(img-LmPMQMTl-1733294501869)] 参数如下 height图形大小设置 ratio主图和副图之间的比例 space 副图与主图之间的距离 sns.jointplot(xtotal_bill,ytip,datadata,kindhex,gridsize15,height10,ratio3,space0,marginal_kws{rug:True,kde:True},colorred)[外链图片转存中…(img-L7pROiv7-1733294501869)] 四变量两两关系分布图 sns.pairplot(data)[外链图片转存中…(img-ezmckPla-1733294501870)] 2.3 pyecharts模块学习
http://www.hkea.cn/news/14497874/

相关文章:

  • 网上做代卖的网站网站如何做视频教程
  • 北京欢迎你网站建设17.zwd一起做网站池尾站
  • 微信网站后期运营怎么做我要学电脑哪里有短期培训班
  • 网站建设前端需要看什么书设计logo怎么设计
  • 漳州市网站建设费用wordpress分类产品
  • 天津网站建设座机号定制网络教研系统
  • 网站换代理深圳网站建设最专业的
  • 动态链接做网站外链图免费网站模板制作
  • 网站后台管理图片水印怎么做手游做网站推广应该怎么做
  • 注册功能的网站怎么做网站建设承揽合同
  • wordpress网站如何app抖音关键词优化排名
  • 德国设计网站网站建设指标
  • 如何做一款服装网站台州市建设监理协会网站
  • 牙膏的网站建设服务器租用教程
  • 舟山论坛网站建设画册欣赏网站
  • 网站与系统开发建站行业成为买方市场
  • 如何在网上推广农产品站长seo查询工具
  • 网站ip地址是什么wordpress 手机 注册
  • 自己做网站和凡科的区别学动漫设计好找工作吗?
  • 建站公司如何在抖音平台开店在家来料加工
  • wordpress $comment广州网站优化快速提升网站排名
  • 东莞做网站有哪些是做网站编辑还是做平面设计
  • 专业金融网站建设电商运营培训机构哪家好
  • 杭州哪家网站建设公司好点中国航天科工集团有限公司
  • 泉州个人建站模板营口建网站
  • 舟山网站建设seo九九建站-网站建设 网站推广 seo优化 seo培训
  • 深圳视频网站开发做进化树的在线网站
  • 重庆seo网站推广工具南宁做网站公司必荐云尚网络
  • 网站设计的基本步骤和方法百度怎么创建网站
  • 网站制作 中企动力公司暗网网站建设