首页
关于
留言板
友链
壁纸
Search
1
使用Git上传文件到GitHub
36 阅读
2
年纪轻轻,不学高数怎么行?
21 阅读
3
高等数学(同济版)电子书
20 阅读
4
Fiddler Everywhere的使用
20 阅读
5
Python多线程详解
19 阅读
Web前端
JavaScript
Python
Flask框架
爬虫项目
Selenium自动化
生活
其他
登录
Search
标签搜索
Python
python爬虫
Flask
技能
软件
生活
SEO
Git
Lollipop
累计撰写
35
篇文章
累计收到
7
条评论
首页
栏目
Web前端
JavaScript
Python
Flask框架
爬虫项目
Selenium自动化
生活
其他
页面
关于
留言板
友链
壁纸
搜索到
22
篇与
Python
的结果
2022-11-29
Anaconda关于更改Jupyter Notebook的目录
简介Anaconda(官方网站)就是可以便捷获取包且对包能够进行管理,同时对环境可以统一管理的发行版本。Anaconda包含了conda、Python在内的超过180个科学包及其依赖项。在学习Numpy时需要安装anaconda这个包管理工具,使用它的Jupyter Notebook时发现默认的目录很乱,这很不利于我们学习很不方便。anaconda的安装与下载官网下载地址:https://www.anaconda.com/products/distribution#Downloads主页长这样没啥好讲的,要注意到的是勾选第一个是添加到环境变量,不过我不需要,我的系统有python3.8了,第二个是默认python3.9,如果想详细了解自己Google吧。下载好anaconda之后,我们会在开始菜单中能找到能打开就没问题哈。jupyter目录更改第一步 :打开Anaconda Prompt,输入命令 jupyter notebook --generate-config 第二步:根据复制的路径找到对应文件,打开该文件。查找(ctrl + f)c.NotebookApp.notebook_dir。第三步:最后只需要在开始菜单中找到 Jupyter Notebook (anaconda3) 右键--> 更多--> 打开文件位置,再右键属性,嗯~ 上图。好啦,到这就完啦。看看效果吧
2022年11月29日
9 阅读
0 评论
0 点赞
2022-11-27
Flask学习笔记(五)
模板的控制结构简介在模板中使用的控制结构,主要有 if 、 for 。下面会详细讲解使用方法。if控制结构的使用if 的使用语法规则:# 模板中的if控制结构 {% if 条件 %} 符合条件执行的html代码 {% endif %} # 必须要有,作为结束当然在模板中也是支持 if---else 结构的。使用也是一样# {% if 条件 %} # 中间写为True执行的代码 # {% else %} # 中间写为False执行的代码 # {% endif %}其实,在模板中使用控制结构就同在python中是基本相同的,不过是加了 {% %} 框起来了而已, 这是jinja2中设置好的规则。{% %}是Jinja2中的控制语句,{{ }}是Jinja2中的变量,{# #}是注释。案例理解:flask程序中:from flask import Flask, render_template app = Flask(__name__) #@app.route('/page') #def index(name): # 定义一个变量在模板中使用 # uname = '披甲龙龟' # return render_template('Process-control-if.html', test_data=locals()) @app.route('/page/<name>') def page_name(name): # uname = '披甲龙龟' str_name = name return render_template('Process-control-if.html', test_data=locals()) @app.route('/info') def info(): return '<img src="https://p1.ssl.qhimg.com/t014ee57f018c046471.jpg">' if __name__ == '__main__': app.run(debug=True)模板文件中:<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <style> .test1 { color: #f60; text-aline:center; } </style> <body> {% if test_data.uname %} <h1 class="test1">Hello ~ {{test_data.uname}}</h1> {% endif %} <!-- 在这里意思是如果uname存在,会执行Hello ~ uname的值,否则什么都不执行 对应index视图--> {% if test_data.uname %} <h1 class="test1">Hello ~ {{test_data.uname}}</h1> {% else %} <h1 class="test1">Hello World ~ {{test_data.name}}🤭 {% endif %} <!-- 同上面相同,如果不存在时会执行Hello World ~ <name>地址栏输入的值 对应page_name视图--> <!--这里讲url_for在模板中反向解析的用法--> {% if test_data.uname %} <h2><a href="{{url_for('info')}}">关于我</a></h2> {% endif %} </body> </html>这里就不运行给大家看了。for控制结构的使用for的使用语法规则:# 模板中的for控制结构 {% for 变量 in 可迭代对象(list/tuple/dict/set/str...) %} # 中间写循环体(html代码或动态变量) {% endfor %} # 作为结束,必须有for语句在模板中的使用很广泛,遍历,循环,通常需要传递多个变量时,会在视图函数中封装成字典、列表、元组等类型数据,这样我们只需要传递一个可迭代的变量再通过模板的for控制结构遍历出数据就实现多个数据的传递。案例理解:flask程序中:from random import choice from flask import Flask, render_template app = Flask(__name__) @app.route('/page') def index(): uname = '披甲龙龟' # 随机 abcd lis = ['A', 'B', 'C', 'D'] random_word = [choice(lis) for _ in range(10)] # 用模板的for来遍历该字典 dicts_data = { '疾风剑豪': '亚索', '暗裔剑魔': '亚托克斯', '无双剑姬': '菲奥娜', '无极剑圣': '易', } return render_template('Process-control-for.html', test_data=locals()) if __name__ == '__main__': app.run(debug=True) 模板文件中:<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {% if True%} <h1 class="test1">Hello ~ {{test_data.uname}}</h1> {% endif %} <!--模板中使用 for 循环结构--> <!--list--> <ul> {% for li in test_data.random_word %} <li><h2>{{li}}</h2></li> {% endfor %} </ul> <!--dict--> <div> {% for k,v in test_data.dicts_data.items() %} <p>{{k}}:{{v}}</p> {% endfor %} </div> </body> </html>运行结果:
2022年11月27日
5 阅读
0 评论
0 点赞
2022-11-14
爬取weibo句读APP的精选句子
简介简单的爬虫,抓取 weibo 句读APP的精选句子,没什么技术含量,主要是我想做个一言的api。开发工具Python 3.8Pycharm 2020 (社区版)推荐安装一个插件 JSON-handle , 干什么的呢? 在处理json数据时我们就不需要再去网页中找在线的json解析了,使用也很方便,直接在地址栏复制包含json数据的链接就好啦。😊实现思路肯定得先登录啦,之后定位到要爬取的主页(搜索句读后点击博主头像到主页)点击精选栏,打开开发者工具找到对应的json数据发起请求,处理请求,保存数据代码实现过程import requests # 获取json的数据 def get_json(link, cou): # 构造请求头 headers = { 'cookie': '粘贴自己的', 'referer': 'https://weibo.com/judourili?tabtype=home', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 'x-requested-with': 'XMLHttpRequest', 'x-xsrf-token': '4yHbSeV9Db_MLDvoZ7xMAUZe' } response = requests.get(link, headers=headers).json() #传入一个计数的变量来控制循环次数,因为它第一页的json数据条数不统一 for page in range(cou): text_data = response['data']['list'][page]['text_raw'].replace('\n', '') with open('data.txt', mode='a', encoding='utf-8') as f: f.write(text_data + '\n') if __name__ == '__main__': # 虽然写的不美观,但思路很清晰吧, 哈哈😂 for i in range(1, 6): if i == 1: url = f'https://weibo.com/ajax/profile/myhot?page={i}&feature=2&uid=5795042732' count = 19 get_json(url, count) else: url = f'https://weibo.com/ajax/profile/myhot?page={i}&feature=2&uid=5795042732' count = 20 get_json(url, count) print('download------ok')执行结果
2022年11月14日
5 阅读
0 评论
0 点赞
2022-11-13
Flask学习笔记(四)
模板的变量简介模板中的变量是一种特殊的占位符,是用来告诉模板引擎,该位置的值是从渲染模板时传递的数据中来获取的。通过render_template('xxx.html', 变量名1=变量值1,变量名2=变量值2 ...)来传递变量的值。变量在模板中的表示在模板中占位变量的表示 : {{变量名}} 在 flask 程序中:from flask import Flask, render_template app = Flask(__name__) @app.route('/first') def index(): return render_template('FirstTemplate.html', title='My First Template', ) if __name__ == '__main__': app.run(debug=True)在html文件(模板文件)中:<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{{title}}</title> </head> <body> <h1>This is {{title}}</h1> </body> </html>运行试试吧,😀如果没问题你会看到复杂类型的变量传参这只是简单字符串类型的传递,如果需要列表,字典等又该怎么操作呢?如果需要传入的变量有很多,都写在 render_template 里会不会显得代码不美观且臃肿?为避免将所有占位变量都写在 render_template 中,通常在视图函数中定义好要动态传递的变量,再通过 locals() 方法,它会以字典的方式创建一个变量,局部变量名为 key 值为value的形式存储。示例:flask程序:from flask import Flask, render_template app = Flask(__name__) @app.route('/first') def index(): title = 'Hello World' content = '我是内容我是内容我是内容。。。' return render_template('FirstTemplate.html', info=locals()) if __name__ == '__main__': app.run(debug=True)模板文件:<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{{info.title}}</title> </head> <body> <h1>This is content:{{info.content}}</h1> </body> </html>在模板中通过 {{info.占位变量}} 来引用变量,是不是简单多了,再多的变量,都可以以这种方式来获取。或者是直接 **locals() 来把变量封装,在模板中就直接使用 {{占位变量}} 也是一样的实现效果执行结果:复杂数据类型flask程序:class LOLHero(object): def __init__(self): self.name = None def say(self): return '这是{self.name}的信息...' @app.route('/index') def index(): # 字符串类型 title = '不同数据类型的模板传参' # 列表类型 lists_data = ['提莫', '璐璐', '小法师', '小炮手', '波比'] # 元组类型 tuples_data = ('疾风剑豪', '暗裔剑魔', '无双剑姬', '无极剑圣') # 字典类型 dicts_data = { '疾风剑豪': '亚索', '暗裔剑魔': '亚托克斯', '无双剑姬': '菲奥娜', '无极剑圣': '易', } # 类方法 (对象) hero = LOLHero() hero.name = '无敌盖伦' return render_template('differentDataTemplate.html', test_data=locals())模板文件:<!--获取列表中的第1个元素--> <h2>list中第1个元素:{{test_data.lists_data.0}}</h2> <h2>list中第1个元素:{{test_data.lists_data[0]}}</h2> <!--两种方式都可以--> <!--获取元组中的第3个元素--> <h2>tuple中第3个元素:{{test_data.tuples_data[2]}}</h2> <!--获取字典中键为 '无极剑圣' 的值--> <h2>dict中键为 '无极剑圣' 的值:{{test_data.dicts_data['无极剑圣']}}</h2> <!--获取类对象LOLHero中的 name 属性值--> <h2>LOLHero的name属性: {{test_data.hero.name}}</h2> <!--调用类对象LOLHero的 say 方法--> <h2>LOLHero的 say 方法: {{test_data.hero.say()}}</h2>执行结果:url_for()在模板中的使用flask程序:from flask import Flask, render_template app = Flask(__name__) @app.route('/') def index(): return render_template('yyy.html') @app.route('/login') def login(): return '这是登录页面...👋' if __name__ == '__main__': app.run(debug=True)模板文件:<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h2><a href="{{url_for('login')}}">点击登录</a></h2> </body> </html>运行就可以看见当我们鼠标移动到 点击登录 上时,会在页面左下角显示反向解析的路径,也可以打开开发者工具查看 是 /login 的格式。
2022年11月13日
7 阅读
0 评论
0 点赞
2022-11-06
pip修改下载镜像源地址
简介在使用 pip install 的时候会明显的感觉到下载很缓慢,那是因为python的pip install 在下载时会到 pypi.org 找第三方包,而这个网站是国外的,访问国外的网站自然不如国内的快。配置方法找到python的安装路径下的Script目录 : D:\Python\Python38\Scripts在文件地址栏输入 cmd 快速打开到windows的命令行工具此时你的路径就在Script下了输入命令 (豆瓣源为例)pip config set global.index-url https://pypi.douban.com/simple完事之后可以 pip config list 来检查看看有没有用上如果你的pip太久没更新,在配置完后它还会提醒你要更新pip哟升级pip:python -m pip install --upgrade pip如果你网差到连升级都慢,可以用镜像源来升级。-i后面就是镜像源链接地址python -m pip install -i https://pypi.douban.com/simple --upgrade pip好了,没问题的你会看到在最后提供一些另外的镜像源腾讯云: https://mirrors.cloud.tencent.com/pypi/simple 清华源: https://pypi.tuna.tsinghua.edu.cn/simple 阿里源: https://mirrors.aliyun.com/pypi/simple/ 中国科技大学 :https://pypi.mirrors.ustc.edu.cn/simple/ 华中科技大学:http://pypi.hustunique.com/
2022年11月06日
14 阅读
0 评论
0 点赞
2022-11-01
Flask学习笔记(三)
Flaks的模板简介在前面的实例中,视图函数的主要作用是生成请求的响应,这是最简单的请求。视图函数有两个作用:处理业务逻辑返回响应内容在大型应用中,把业务逻辑和表现内容放在一起,会增加代码的复杂度和维护成本。不可能像前面那样把视图处理函数的返回直接写在里面吧。那样太麻烦,也太丑了,不知道的因为你在写前端呢 😂模板其实是一个包含响应文本的文件,其中用占位符(变量)表示动态部分,告诉模板引擎其具体的值需要从使用的数据中获取Flask模板用模板创建动态的网页,包含响应文本的文件(html)该文件中允许包含 “占位变量” ,用动态的方式来传递数据,“占位变量”最终会被真实的值所替换。模板最终也会被解析成响应的字符串, 这一过程即为"渲染"Flask 是使用 Jinja2 这个模板引擎来渲染模板模板的使用1.创建模板文件夹默认情况下, Flask会在项目文件夹中的 templates 文件夹中寻找模板所以需要手动在项目目录下创建 templates 文件夹就像这样:2.模板的渲染Flask提供的render_template函数封装了该模板引擎render_template函数的第一个参数是模板的文件名,后面的参数都是键值对,表示模板中变量对应的真实值在视图函数中,通过 return render_template() 将模板渲染成字符串再响应给客户端 render_template(): 语法 render_template('index.html', arg1=value1, arg2=value2) 第一个参数: xxx.html 要渲染给客户端的html模板 参数1 - 参数n : 要传递给模板动态显示的变量占位符,如果没有动态的变量占位符, 则可以省略 有点像format() 🙃 hhh 返回值 是字符串程序代码from flask import Flask, render_template app = Flask(__name__) @app.route('/') def index(): return render_template('index.html') # 模板文件一定是在templates文件夹下 if __name__ == '__main__': app.run(debug=True)执行结果
2022年11月01日
6 阅读
0 评论
0 点赞
2022-10-29
Flask学习笔记(二)
Flask的路由简介认识Flask的项目结构 :----static --------css --------js --------images ... ----templates --------index.html --------page.html --------category.html ... ----app.pystatic文件夹里存放的都是些静态文件如:css,js,图片,视频,音频等。templates就是存放些html文件咯。app.py可以看作处理路由以及配置的文件。配置上:app = Flask( __name__, template_folder='xxx', static_folder='xxx', static_url_path='/xxx' )1.template_folder : 指定存放模板的文件夹的名称(默认为templates)2.static_folder : 指定存放静态文件资源的文件夹的名称(默认为static)注意:如果没有指定static_url_path的话,则访问路径和static_folder 的名称是一致的3.static_url_path : 指定静态文件的访问路径我们入门学习的话就先让它保持默认就好路由是什么客户端(例如 Web 浏览器)把请求发送给 Web 服务器,Web 服务器再把请求发送给 Flask 程序实例。程序实例需要知道对每个 URL 请求运行哪些代码,所以保存了一个 URL 到 Python 函数的映射关系。处理 URL 和函数之间关系的程序称为路由。在Flask中,路由是通过 @app.route 装饰器来表示的路由的使用一个参数的路由from flask import Flask app = Flask(__name__) # 1.基本带参路由 # <name> 后续要在地址栏传递的参数,(一个参数的路由) @app.route('/show/<name>') def show1(name): # 函数中,name表示的就是手动在地址栏上传递过来的数据 (接收) return "<h1>Hello ~ {}</h1>".format(name) if __name__ == '__main__': app.run(debug=True)运行结果:多个参数的路由from flask import Flask app = Flask(__name__) # 2.带多个参数的路由 连个参数的路由 # 在<>中的参数必须跟传递的相同 @app.route('/manyShow/<title>/<page>') def many_show(title, page): return "<h1>这是关于{}的内容,第{}页</h1>".format(title, page) if __name__ == '__main__': app.run(debug=True)运行结果:指定路由参数的类型from flask import Flask app = Flask(__name__) # 3.指定参数类型的路由 <int: page>: 表示page参数是一个整形的数值而非默认的字符 @app.route('/article/<title>/<float:page>') def many_show(title, page): return "<h1>你用的{}的版本号是{}</h1>".format(title, page) # *以占位符的方式来接收参数,如果什么都不做只能是字符串类型 # page 此时为float类型,而并非字符串 # Flask 中所支持的类型转换器 # 缺省(默认不写的) 字符串型, 不允许有 / # int: 整形 # float: 浮点型 # path: 字符串型, 但允许有 / if __name__ == '__main__': app.run(debug=True)运行结果:多路由的使用from flask import Flask app = Flask(__name__) # 允许在一个视图处理函数中设置多个url路由规则 @app.route('/') @app.route('/index') def index(): # 就是 / 和 /index路径都展示同一页面 --> 首页 return '<h1>这是首页</h1>' if __name__ == '__main__': app.run(debug=True)路由中设置HTTP请求方法Flask路由设置规则也允许设置对应的请求方法,只有将匹配上请求方法的路径交给视图处理函数取执行通过methods=['请求类型'] 来设置,最常用POST和GET@app.route('/post', methods=['POST']) def post(): return 'xxx' # * 只有post请求方式允许访问 localhost:5000/post运行结果:可以在浏览器开发工具中的network中看到,Request Method 为 GET -- 405 ,是因为页面默认是GET请求,而POST请求是由表单产生的解决:@app.route('/post', methods=['POST', 'GET']) def post(): return '假装是POST请求'后面学习到会更详细,这里简单看看就好url的解析正向解析:程序自动解析,根据@app.route()中设置的访问路径来匹配处理函数反向解析:通过视图处理函数的名称自动生成视图处理函数的访问路径Flask中提供了 url_for() 函数,用于反向解析urlfrom flask import Flask, url_for app = Flask(__name__) @app.route('/language/<name>/<version>') def url(name, version): return '<h1>您当前使用的编程语言是{},版本是{}.</h1>'.format(name, version) @app.route('/url') def page_url(): # 链接地址 /python 像爬虫中经常需要拼接的链接部分 这即是反向解析的url地址 link = url_for('url', name='python', age='3.8') resp = '<a href="'+link+'">反向解析后的地址:' + link+' </a>' return resp if __name__ == '__main__': app.run(debug=True)运行结果:特殊: url_for('static', filename='style.css')filename 静态文件反向解析
2022年10月29日
11 阅读
0 评论
0 点赞
2022-10-29
Flask学习笔记(一)
开始Flask的学习简介在开始学习之前先推荐几个我在学习过程中觉得不错的Flask入门网址。我还想说,在学习过程中不断扫盲,就像在玩冒险游戏,一关又一关,乐此不疲,通过难关你是否会有愉悦的感受呢?推荐闲时观看的网址第一个当然是官网啦,官方出品质量肯定没得说 {abtn icon="" color="#ff6800" href="https://dormousehole.readthedocs.io/en/latest/index.html" radius="" content="点击去看"/}{dotted startColor="#ffc758" endColor="#dc262b"/}GitHub上的一个开源项目,从0到一个电影表单页面的制作,还是非常不错滴。 {abtn icon="" color="#ff6800" href="https://helloflask.com/book/3/" radius="" content="点击去看"/}{dotted startColor="#ffc758" endColor="#dc262b"/}W3CSchool 很典的编程资源网站了,学就完了。 {abtn icon="" color="#ff6800" href="https://www.w3cschool.cn/flask/" radius="" content="点击去看"/}{dotted startColor="#ffc758" endColor="#dc262b"/}关于FlaskFlask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。Flask使用 BSD 授权。Flask框架模式Flask 的框架模式 - MTV经典三层结构 :MVC模式 M :Models ,模型层,负责数据库建模 V :Views,视图层,用于处理用户显示的内容,如 :html C :Controller,控制器,处理与用户交互的部分内容。处理用户的请求并给出响应python常用:MTV模式 M :Models ,模型层,负责数据库建模 T :Templates ,模板层,用于处理用户显示的内容,如:html V :Views ,视图层,处理与用户交互的部分内容。处理用户的请求并给出响应我们接下来学习也是学习 MTV 模式安装flaskpip install flask建议大家使用虚拟环境#虚拟环境我使用的是 virtualenv 是一个第三方库 #安装很简单 --> pip install virtualenv 如果知道更多关于虚拟环境的内容可以自行google、bing、百度一下哦好啦,准备工作完成,接下来,直接上最简单案例,跑一下就了解咯。初试Flask程序# -*- coding:utf-8 -*- # @Author:🎈RedBalloon # @Time:2022/9/15-23:22 # @File:0-app.py from flask import Flask # 将当前运行的主程序构建成flask的应用(实例化) app = Flask(__name__) # route Flask中的路由定义,定义用户的访问路径 “/” 在浏览器中表示根目录 @app.route('/') def hello_world(): return '<h1>Hello, World!</h1>' # 视图处理函数,该函数必须要有return 可以返回字符串或响应对象 if __name__ == '__main__': # app.run(debug=True, port=8080) # 运行flask应用(启动Flask的服务) # debug=True 是将当前的启动模式改为调试模式 (开发环境中推荐使用调试模式,生产环境中不允许使用) app.run(debug=True) # http://localhost:8080 与 http://127.0.0.1:8080是一样的 不写port默认的端口为5000
2022年10月29日
10 阅读
0 评论
0 点赞
2022-10-21
Python序列化模块的使用(json和pickle)
Python 序列化模块序列化将原本的列表或字典等内容转换为字符串的过程叫做序列化比如python中,我们想将代码计算出的数据给另外一段程序使用,怎么做?现在想到的办法就是将,数据保存到文件中,然后另外一段程序再从文件中读取出来。但是,都知道文件是没有字典这个概念的,所以我们只能转换为字符串然后存储的文件中你可能会想str({‘a’:2,‘b’:4})不就好了,转换为字符串容易,但是如果从文件中读出来的字符串需要转换为字典呢,就不好办了吧序列化的目的已某种存储形式使自定义类型对象持久化(文件保存与读取)将一个对象从一个地方传递给另一个地方(网络传输)使程序更具维护性json模块(适用于大多数语言:前后端交互(C,C#,Java,Go,Python)JSON支持数据类型:1.对象(字典)。使用{}2.数组(列表)。使用[]3.整型,浮点型,布尔类型,NULL类型4.字符串类型(注意:JSON中必须用双引号,而不是单引号)不支持集合,元组等多个数组间用逗号分隔注意:JSON本质就是一个字符串json提供了4种方法dumps(序列化):作用:将python中的字典,加载成json字符串dumps代码:import json # 导入json模块 # dumps dit = {3:{4:'c'},'a':'n'} # 一个自定义的字典 ret = json.dumps(dit) # 使用方法dump,将传进来的字典转换层字符串 print(ret) print(type(ret)) # 结果:全都用双引号括起来了,可以看到他的类型是str类型的 {"3": {"4": "c"}, "a": "n"} <class 'str'> 1234567891011loads(反序列化):作用:将json字符串,转换为python数据类型代码 如下:# loads str_dic = '{"3": {"4": "c"}, "a": "n"}' ret = json.loads(str_dic) # 转换为python数据类型 print(ret) print(type(ret)) # 结果:全都用双引号括起来了,可以看到他的类型是str类型的 {'3': {'4': 'c'}, 'a': 'n'} <class 'dict'> 123456789dump(序列化)作用:这个函数可以传入一个文件指针,直接将字符串dump到文件中。注意:默认会将中文转换为Unicode字符,ensure\_ascii默认为True,需改为False代码如下:# dump json_lst = [{'username': '马海阳', 'age': 18, 'country': 'china'}, {'username': '333', 'age': 19, 'country': 'china'}] with open('json3.txt',mode='w',encoding='utf8') as fp: json.dump(json_lst,fp) # dump方法接收一个文件句柄,直接将字典转换成json字符串写入文件 #结果: cat .\json3.txt [{"username": "\u9a6c\u6d77\u9633", "age": 18, "country": "china"}, {"username": "333", "age": 19, "country": "china"}] 123456789load作用:与dump函数相反,是把文件中的json字符串,转换成python数据类型打开,实例代码如下:代码如下:with open('json3.txt',encoding='utf8') as fp: ret = json.load(fp) #load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回 print(ret) print(type(ret)) # 结果 [{'username': '马海阳', 'age': 18, 'country': 'china'}, {'username': '333', 'age': 19, 'country': 'china'}] <class 'list'> 12345678pickle:支持几乎所有python的数据类型简介:python语言中特有的序列化模块方法:与json的使用方法基本相同dumps和loadsimport pickle dic = {'北京': {'朝阳', '昌平'}, ('天津', '河北'): [1, 2, 3]} ret = pickle.dumps(dic) # 特性:会序列化为一个bytes格式 print(ret) dec = pickle.loads(ret) print(dec) # 结果: b'\x80\x03}q\x00(X\x06\x00\x00\x00\xe5\x8c\x97\xe4\xba\xacq\x01cbuiltins\nset\nq\x02]q\x03(X\x06\x00\x00\x00\xe6\x9c\x9d\xe9\x98\xb3q\x04X\x06\x00\x00\x00\xe6\x98\x8c\xe5\xb9\xb3q\x05e\x85q\x06Rq\x07X\x06\x00\x00\x00\xe5\xa4\xa9\xe6\xb4\xa5q\x08X\x06\x00\x00\x00\xe6\xb2\xb3\xe5\x8c\x97q\t\x86q\n]q\x0b(K\x01K\x02K\x03eu.' {'北京': {'朝阳', '昌平'}, ('天津', '河北'): [1, 2, 3]} 12345678910dump和load# 和json.load json.dump一样都是操作文件句柄,写入文件和读进内存,写入文件的bytes字节,只供保存调用 dic = {'北京': {'朝阳', '昌平'}, ('天津', '河北'): [1, 2, 3]} with open('pickle_file','wb') as f: pickle.dump(dic,f) # 读取文件中的内容,转换成对应格式加载进内存中 with open('pickle_file', 'rb') as f: ret = pickle.load(f) print(ret) 123456789pickle和json的区别pickle 支持python中的几乎所有数据类型,但是只能python一种语言中使用json 支持所有的语言,但只支持有限的数据类型json和pickle的总结jsonjson类型 : ‘{“key”:[1,2,3]}’所有语言通用的\支持的数据类型有限序列化的结果是字符串 : 可视化json不支持多次dumppicklepython自己用\支持python中几乎所有的数据类型结果是二进制 :看不懂的pickle天生支持多次dump和load
2022年10月21日
11 阅读
0 评论
0 点赞
2022-10-21
多线程采集壁纸-(嘎嘎快)
简介再原先的案例中进行了改写,加入多线程采集嘎嘎快开发工具环境使用Python 3.8 解释器Pycharm 编辑器所使用模块import reimport osimport requests >>> pip install requests如果安装python第三方模块:in + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车在pycharm中点击Terminal(终端) 输入安装命令实现思路发送请求 (这里都是get请求)模拟浏览器,构造请求头headers获取数据解析数据提取我们想要的内容(re匹配出需要的,建议直接再源码中复制需要的来进行匹配提前取)保存数据代码实现过程# -*- coding:utf-8 -*- # @Author:🎈RedBalloon # @Time:2022/10/21-16:00 # @File:new.py import requests # 用来发送请求模块<工具> import re # 提取数据工具 import os import threading # 加入多线程 """获取彼岸壁纸的4k游戏页""" # 获取页面 def get_page(page_url): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36', } response = requests.get(url=page_url, headers=headers) response.encoding = response.apparent_encoding return response # 解析页面获取需要的 def parse(html): html_info = re.findall(r'<li><a href="(.*?)".*?alt="(.*?)" /><b>', html.text) url_list = [] title_list = [] for link, title in html_info: # https://pic.netbian.com/tupian/29887.html link_url = 'https://pic.netbian.com' + link second_html = get_page(link_url) img_url = re.findall(r'id="img"><img src="(.*?)"', second_html.text)[0] real_url = 'https://pic.netbian.com' + img_url url_list.append(real_url) title_list.append(title) return url_list, title_list # 保存图片 def save(path, pic_content, title): with open(path + title + '.jpg', mode='wb') as f: f.write(pic_content) def download(url_link, title): url_data = get_page(url_link).content path = "downloads\\" if not os.path.exists(path): os.makedirs(path) save(path, url_data, title) print(url_link, title) if __name__ == '__main__': for page in range(1, 3): # 获取的页数 1-2 # 这是因为网站没有index_1这个页面 if page == 1: url = 'https://pic.netbian.com/4kyouxi/index.html' # 网站的链接 else: url = f'https://pic.netbian.com/4kyouxi/index_{page}.html' html_data = get_page(url) # parse(html_data) urls, titles = parse(html_data) threads = [] for i in range(len(urls)): t = threading.Thread(target=download, args=(urls[i], titles[i])) threads.append(t) for t in threads: # t.setDaemon(True) # 守护进程 t.start() 图片上传图床地址: 带你去看
2022年10月21日
14 阅读
0 评论
0 点赞
1
2
3