1.13flask完结
2019-1-13 14:16:26
终于完结flask,开始爬虫啦!!!!
还有 一些爬虫视频没看完,余下的就一点啦!
老师整理了flask的总结!和一些组件的使用!
打算重装一下电脑,边看视频,边整理博客什么的东西!
越努力,越幸运!永远不要高估自己!
还有! flask可以多参考其那面我的博客里面的参考连接!!!!
flask 项目需要连接自己的 mysql数据库!而 Django自带一个默认的小型d什么数据库!这是不同差别
还有flask的orm 接近原生SQL也接近python语法,更加熟悉!
新手适合用DJango 熟练后就用Flask 就好比 qq与微信 看个人爱好!!
在组件 前面有flask- xx的 是专用于flask的 如果没有flask- 则可用于任何python项目!
这是整体flask 的目录结构

贴上源码:
__init__.py:
from flask import Flask
from flask_session import Session # 第一步:导入并实例化SQLAlchemy
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy() from .views.account import ac
from .views.user import us from .models import * def create_app():
app = Flask(__name__)
app.config.from_object('settings.ProConfig') app.register_blueprint(ac)
app.register_blueprint(us) # Flask-Session: 第一步示例Session
# Session(app) # 第三步:依赖app中的配置文件
db.init_app(app) return app
__init__.py
models.py
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column
from sqlalchemy import Integer,String,Text,Date,DateTime
from sqlalchemy import create_engine
from chun import db class Users(db.Model):
__tablename__ = 'users' id = Column(Integer, primary_key=True)
name = Column(String(32), index=True, nullable=False)
# depart_id = Column(Integer)
模型类
create_table.py
from chun import db,create_app app = create_app()
app_ctx = app.app_context() # app_ctx = app/g
with app_ctx: # __enter__,通过LocalStack放入Local中
db.create_all() # 调用LocalStack放入Local中获取app,再去app中获取配置
manage.py
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
from chun import create_app
from chun import db app = create_app()
manager = Manager(app)
Migrate(app, db)
"""
# 数据库迁移命名
python manage.py db init
python manage.py db migrate # makemirations
python manage.py db upgrade # migrate
"""
manager.add_command('db', MigrateCommand) @manager.command
def custom(arg):
"""
自定义命令
python manage.py custom 123
:param arg:
:return:
"""
print(arg) @manager.option('-n', '--name', dest='name')
@manager.option('-u', '--url', dest='url')
def cmd(name, url):
"""
自定义命令
执行: python manage.py cmd -n wupeiqi -u http://www.oldboyedu.com
:param name:
:param url:
:return:
"""
print(name, url) if __name__ == '__main__':
# app.run()
manager.run()
requirements.txt
redis==2.10.6
alembic==0.9.9
Flask_Script==2.0.6
Flask==1.0.2
SQLAlchemy==1.2.8
Flask_Session==0.3.1
Flask_Migrate==2.2.1
Flask_SQLAlchemy==2.3.2
用组件生成的项目所需要的库
settings.py
from redis import Redis class BaseConfig(object):
# Flask-Session: 第二步配置
# SESSION_TYPE = 'redis'
# SESSION_REDIS = Redis(host='192.168.0.94', port='6379') # ##### SQLALchemy配置文件 #####
SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:123456@127.0.0.1:3306/s9day122?charset=utf8"
SQLALCHEMY_POOL_SIZE = 10
SQLALCHEMY_MAX_OVERFLOW = 5 SQLALCHEMY_TRACK_MODIFICATIONS = False pass class ProConfig(BaseConfig):
pass
flask项目的配置文件
views下的文件
account.py
from flask import Blueprint
from chun import db
ac = Blueprint('ac',__name__) @ac.route('/login')
def login():
return 'Login'
user.py
from flask import Blueprint
from chun import db
from chun import models
us = Blueprint('us',__name__) @us.route('/index')
def index():
# 使用SQLAlchemy在数据库中插入一条数据
# db.session.add(models.Users(name='高件套',depart_id=1))
# db.session.commit()
# db.session.remove()
result = db.session.query(models.Users).all()
print(result)
db.session.remove() return 'Index'
爬取汽车之家爬虫
import requests
from bs4 import BeautifulSoup response = requests.get("https://www.autohome.com.cn/news/")
response.encoding = 'gbk' soup = BeautifulSoup(response.text,'html.parser') div = soup.find(name='div',attrs={'id':'auto-channel-lazyload-article'}) li_list = div.find_all(name='li') for li in li_list: title = li.find(name='h3')
if not title:
continue
p = li.find(name='p')
a = li.find(name='a') print(title.text)
print(a.attrs.get('href'))
print(p.text) img = li.find(name='img')
src = img.get('src')
src = "https:" + src
print(src) # 再次发起请求,下载图片
file_name = src.rsplit('/',maxsplit=1)[1]
ret = requests.get(src)
with open(file_name,'wb') as f:
f.write(ret.content)
爬虫Demo
笔记
s9day122 内容回顾:
第一部分:Flask部分
基础:
1. flask和django区别?
2. flask中配置文件?
使用app.config.from_object('路径.xx.path')
技术点:
- rsplit
- importlib
- getattr
类似:django中间件
3. 路由系统
基于装饰器实现的路由系统。
技术点:
- functools.wraps(func),保留原函数的元信息。
4. 视图函数
FBV和CBV
技术点:
- 反射
5. 请求:request
6. 响应:response
技术点:
- 封装 7. session、flash 8. 蓝图 9. 装饰器 10. 中间件 高级:
1. 上下文管理的实现? 2. 为什么把上下文管理分成:
- 应用上下文:request/session
- 请求上下文: app/g 3. Local的作用?
类似于threading.local的作用,但是是他的升级版(greentlet.get_current())
__storage__ = {
1231: {},
1231: {}
}
4. LocalStack作用?
将Local中__storage__的值维护成一下结构:
__storage__ = {
1231: {stack:[],},
1231: {stack:[],}
}
5. 为什么要维护成一个栈? 6. 为什么导入request,就可以使用?
每次执行request.xx方法时,会触发LocalProxy对象的__getattr__等方法,由方法每次动态的使用
LocalStack去Local中获取数据。 如何学的?
- 网上找一些博客学习
- 春生博客
- 官方文档
- 源码 扩展:
1. flask-session
2. DBUtils
3. wtforms
4. sqlalchemy 第二部分:面向对象
1. 面向对象的理解? PS:
父类/子类
基类/派生类 2. metaclass相关
- 默认类时有谁创建:type创建
- 类创建2中方式:
class Foo:pass
type('Foo',(object,),{})
- 执行创建类的mytype
class Foo(metaclass=MyType):
# __metaclass__ = MyType
pass MyType('Foo',(object,),{})
- 源码
如果类以基类中未指定metaclass:
- __new__
- __init__
如果类以基类中指定metaclass:
- 创建类
MyType.__init__
- 创建对象
MyType.__call__
- __new__
- __init__ 3. 令你印象深刻的事(好神奇)。
class Foo(object):
def __init__(self,name,age):
self.name = name
self.__age = age def func(self):
print(self.__age) obj = Foo('oldboy',50)
print(obj.name)
print(obj._Foo__age) PS:私有字段子类中也不能访问 第三部分:数据库
1. 引擎 2. 设计表&SQL查询
- 每天5个 3. 了解:
- 视图,虚拟表。
- 触发器,
- 函数,
- 存储过程 4. 索引 5. 索引实现原理
- B+ tree
- hash 6. 无法命中索引
- like
- 函数
- >
- !=
- group by
- or 7. 数据库优化方案
- 避免使用select *
- 固定长度在前面
- 内存代替表,如:性别等
- 读写分离
- 分库
- 分表
- 水平分表
- 垂直分表
- 命中索引
- 组合索引代替索引合并
- 尽量使用短索引
- 如果取一条数据时,使用limit 1
select id,name from tb where name ='alex' limit 1;
- 使用连接(JOIN)来代替子查询(Sub-Queries) 注意:char/varchar区别 今日内容:
1. flask-sqlalchemy
2. flask-script
3. flask-migrate
结果:Flask目录结构
4. 爬虫相关 内容详细:
1. flask-sqlalchemy a. 下载安装
pip3 install flask-sqlalchemy
b. chun.__init__.py
导入并实例化SQLAlchemy
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy() 注意事项:
- 必须在导入蓝图之前
- 必须导入models.py
c. 初始化
db.init_app(app) d. 在配置文件中写入配置
# ##### SQLALchemy配置文件 #####
SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:123456@127.0.0.1:3306/s9day122?charset=utf8"
SQLALCHEMY_POOL_SIZE = 10
SQLALCHEMY_MAX_OVERFLOW = 5 e. 创建models.py中的类(对应数据库表)
chun/models.py
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column
from sqlalchemy import Integer,String,Text,Date,DateTime
from sqlalchemy import create_engine
from chun import db class Users(db.Model):
__tablename__ = 'users' id = Column(Integer, primary_key=True)
name = Column(String(32), index=True, nullable=False)
depart_id = Column(Integer) f. 生成表(使用app上下文)
from chun import db,create_app app = create_app()
app_ctx = app.app_context() # app_ctx = app/g
with app_ctx: # __enter__,通过LocalStack放入Local中
db.create_all() # 调用LocalStack放入Local中获取app,再去app中获取配置 g. 基于ORM对数据库进行操作。
from flask import Blueprint
from chun import db
from chun import models
us = Blueprint('us',__name__) @us.route('/index')
def index():
# 使用SQLAlchemy在数据库中插入一条数据
# db.session.add(models.Users(name='高件套',depart_id=1))
# db.session.commit()
# db.session.remove()
result = db.session.query(models.Users).all()
print(result)
db.session.remove() return 'Index' 2. flask-script
pip3 install flask-script 功能:
a. 增加 runserver
from chun import create_app
from flask_script import Manager app = create_app()
manager = Manager(app) if __name__ == '__main__':
# app.run()
manager.run() b. 位置传参
from chun import create_app
from flask_script import Manager app = create_app()
manager = Manager(app) @manager.command
def custom(arg):
"""
自定义命令
python manage.py custom 123
:param arg:
:return:
"""
print(arg) if __name__ == '__main__':
# app.run()
manager.run()
c. 关键字传参
from chun import create_app
from flask_script import Manager app = create_app()
manager = Manager(app) @manager.option('-n', '--name', dest='name')
@manager.option('-u', '--url', dest='url')
def cmd(name, url):
"""
自定义命令
执行: python manage.py cmd -n wupeiqi -u http://www.oldboyedu.com
:param name:
:param url:
:return:
"""
print(name, url) if __name__ == '__main__':
# app.run()
manager.run() 3. flask-migrate
pip3 install flask-migrate
依赖:flask-script #!/usr/bin/env python
# -*- coding:utf-8 -*- from sansa import create_app
from sansa import db from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand app = create_app()
manager = Manager(app)
Migrate(app, db) """
# 数据库迁移命名
python manage.py db init
python manage.py db migrate
python manage.py db upgrade
"""
manager.add_command('db', MigrateCommand) if __name__ == '__main__':
manager.run()
# app.run() 4. 找到项目使用的所有组件和版本。
pip install pipreqs pipreqs ./ --encoding=utf-8 5. 虚拟环境
pip3 install virtualenv virtualenv env1 --no-site-packages activate
deactivate 6. 爬虫 任务:爬取汽车之家器
import requests
from bs4 import BeautifulSoup response = requests.get("https://www.autohome.com.cn/news/")
response.encoding = 'gbk' soup = BeautifulSoup(response.text,'html.parser') div = soup.find(name='div',attrs={'id':'auto-channel-lazyload-article'}) li_list = div.find_all(name='li') for li in li_list: title = li.find(name='h3')
if not title:
continue
p = li.find(name='p')
a = li.find(name='a') print(title.text)
print(a.attrs.get('href'))
print(p.text) img = li.find(name='img')
src = img.get('src')
src = "https:" + src
print(src) # 再次发起请求,下载图片
file_name = src.rsplit('/',maxsplit=1)[1]
ret = requests.get(src)
with open(file_name,'wb') as f:
f.write(ret.content) 模块:
requests,伪造浏览器发起Http请求
bs4,将html格式的字符串解析成对象,对象.find/find_all 作业:
Flask程序实现爬虫采集以展示
功能:
1. Flask目录结构
2. SQLAlchemy存储数据
页面1:
数据框 按钮
https://www.autohome.com.cn/news/ 标题、简介、图片路径、文章来源、文章路径
页面2:
展示新闻列表,点击跳转到汽车之家。 可选:翻页获取
可选:爬取煎蛋网
1.13flask完结的更多相关文章
- 一步一步来做WebQQ机器人-(五)(发送消息||完结)
× 本篇主要是: 发送QQ消息(to:好友,群),以及对小黄鸡抓包利用它的语言库 本文是WebQQ流程的最后一章 最后一章内容不多但我还是啰嗦,可能对大部分人都已知晓的流程方法我也会介绍一下 前面几个 ...
- 深入理解javascript原型和闭包(完结)
原文链接:http://www.cnblogs.com/wangfupeng1988/p/3977924.html 说明: 该教程绕开了javascript的一些基本的语法知识,直接讲解javascr ...
- 解剖SQLSERVER 完结篇 关于Internals Viewer源代码
解剖SQLSERVER 完结篇 关于Internals Viewer源代码 大家可能都用过Internals Viewer这个软件 <查看SQLSERVER内部数据页面的小插件Internals ...
- (视频)《快速创建网站》 4.2 完结篇 – 应用运营vs.发射卫星,遥测(Telemetry) 技术
本文是<快速创建网站>系列的第10篇(完结篇),如果你还没有看过之前的内容,建议你点击以下目录中的章节先阅读其他内容再回到本文.访问本系列目录,请点击:http://devopshub.c ...
- 不就是抽个血吗,至于么-jQuery,Linux完结篇
hi 趁着周一去抽血化验,真开心...下午报告才出来,不过早上来了就开始各种晕菜,叫错名字,说错话.....至于么.. 还有在教研室的30天就可以肥家了,凯森凯森.今天不想干活(哪天想干过我就问问), ...
- 有评论就是我最大的动力~MySQL基础篇完结(存储引擎和图形化管理工具)
hi 今天登上来,发现竟然有了3个评论~~加油吧! 这周的计划其实远远没有达到,然后下周还有一大堆事情...那么...周末好好玩吧~ 今天试图完结MySQL的基础篇知识,小白变为大白? 1.MySQL ...
- 直接拿来用!最火的Android开源项目(完结篇)
直接拿来用!最火的Android开源项目(完结篇) 2014-01-06 19:59 4785人阅读 评论(1) 收藏 举报 分类: android 高手进阶教程(100) 摘要:截至目前,在GitH ...
- ModernUI教程:目录 (完结)
入门 My first Modern UI app (manually) 第一个ModernUI应用(手动编写)(已完成) My first Moder ...
- 《浅谈磁盘控制器驱动》,磁盘控制器驱动答疑解惑![2012.1.29完结]by skyfree
<浅谈磁盘控制器驱动>,磁盘控制器驱动答疑解惑![2012.1.29完结] https://www.itiankong.net/thread-178655-1-1.html Skyfre ...
随机推荐
- hihocoder1051 补提交卡(贪心)
http://hihocoder.com/problemset/problem/1051 一开始dfs暴搜超时 这题关键在于理解到,肯定是补连续的几天.所以说写贪心之前要好好想想,怎么贪. //补题卡 ...
- Dockerfile的 RUN和CMD
在创建Dockerfile的时候,RUN和CMD都是很重要的命令.它们各自的作用分别如下: RUNRUN命令是创建Docker镜像(image)的步骤,RUN命令对Docker容器( containe ...
- wordclock中文模式快一个小时怎么调整
wordclock屏幕保护,设置为中文模式,显示的时间比系统时间要快一个小时,其实软件自带的配置文件可以设置调整到正常时间…… 工具/原料 wordclock 方法/步骤 桌面上右键菜 ...
- Spring中Mybatis的花样配置 及 原理
摘自: https://www.jianshu.com/p/fc23c94fc439
- [Docker] Running Multiple Containers for an Angular, Node project
The code is from Plusight course, github link is here. In this post, we will give a overview about h ...
- 基于java实现的简单区块链
技术:maven3.0.5 + jdk1.8 概述 区块链是分布式数据存储.点对点传输.共识机制.加密算法等计算机技术的新型应用模式.所谓共识机制是区块链系统中实现不同节点之间建立信任.获取权益的 ...
- 分析轮子(二)- << ,>>,>> (左移、右移、无符号右移)
前言:写 分析轮子(一)-ArrayList.java 的时候看到源码中有 int newCapacity = oldCapacity + (oldCapacity >> 1); 这样的代 ...
- 基于weixin-java-mp 做微信JS签名 invalid signature签名错误 官方说明
微信JS签名详情请见:http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115&token=&lang= ...
- 游戏开发中IIS常见支持MIME类型文件解析
游戏开发中IIS常见支持MIME类型文件解析 .apkapplication/vnd.android .ipaapplication/vnd.iphone .csbapplication/octet- ...
- 关于在最新的 Visual Studio 2017 版本中使用 Web Deploy 遇到的 SSL 连接错误
错误信息: 无法完成向远程代理 URL 发送请求.请求被中止: 未能创建 SSL/TLS 安全通道. 原因分析: 最新版本的 Visual Studio 中,已经抛弃了 https 协议中旧版 SSL ...