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完结的更多相关文章

  1. 一步一步来做WebQQ机器人-(五)(发送消息||完结)

    × 本篇主要是: 发送QQ消息(to:好友,群),以及对小黄鸡抓包利用它的语言库 本文是WebQQ流程的最后一章 最后一章内容不多但我还是啰嗦,可能对大部分人都已知晓的流程方法我也会介绍一下 前面几个 ...

  2. 深入理解javascript原型和闭包(完结)

    原文链接:http://www.cnblogs.com/wangfupeng1988/p/3977924.html 说明: 该教程绕开了javascript的一些基本的语法知识,直接讲解javascr ...

  3. 解剖SQLSERVER 完结篇 关于Internals Viewer源代码

    解剖SQLSERVER 完结篇 关于Internals Viewer源代码 大家可能都用过Internals Viewer这个软件 <查看SQLSERVER内部数据页面的小插件Internals ...

  4. (视频)《快速创建网站》 4.2 完结篇 – 应用运营vs.发射卫星,遥测(Telemetry) 技术

    本文是<快速创建网站>系列的第10篇(完结篇),如果你还没有看过之前的内容,建议你点击以下目录中的章节先阅读其他内容再回到本文.访问本系列目录,请点击:http://devopshub.c ...

  5. 不就是抽个血吗,至于么-jQuery,Linux完结篇

    hi 趁着周一去抽血化验,真开心...下午报告才出来,不过早上来了就开始各种晕菜,叫错名字,说错话.....至于么.. 还有在教研室的30天就可以肥家了,凯森凯森.今天不想干活(哪天想干过我就问问), ...

  6. 有评论就是我最大的动力~MySQL基础篇完结(存储引擎和图形化管理工具)

    hi 今天登上来,发现竟然有了3个评论~~加油吧! 这周的计划其实远远没有达到,然后下周还有一大堆事情...那么...周末好好玩吧~ 今天试图完结MySQL的基础篇知识,小白变为大白? 1.MySQL ...

  7. 直接拿来用!最火的Android开源项目(完结篇)

    直接拿来用!最火的Android开源项目(完结篇) 2014-01-06 19:59 4785人阅读 评论(1) 收藏 举报 分类: android 高手进阶教程(100) 摘要:截至目前,在GitH ...

  8. ModernUI教程:目录 (完结)

    入门 My first Modern UI app (manually)                         第一个ModernUI应用(手动编写)(已完成) My first Moder ...

  9. 《浅谈磁盘控制器驱动》,磁盘控制器驱动答疑解惑![2012.1.29完结]by skyfree

    <浅谈磁盘控制器驱动>,磁盘控制器驱动答疑解惑![2012.1.29完结]  https://www.itiankong.net/thread-178655-1-1.html Skyfre ...

随机推荐

  1. hihocoder1323 回文字符串(区间dp)

    https://hihocoder.com/problemset/problem/1323 刚开始真没看出来这是一道dp题.. dp[i][j]表示i~j段修改成回文串所需的最少操作次数.然后根据s[ ...

  2. Sqoop找不到主类 Error: Could not find or load main class org.apache.sqoop.Sqoop

    最近由于要使用Sqoop来到出数据到hdfs,可是发现Sqoop1.4.5跟hadoop2.X不兼容,需要对Sqoop1.4.5进行编译,编译的具体方法见:http://my.codeweblog.c ...

  3. Adding a custom jar as a maven dependency

    Using maven in a Java project is great. It manages builds (as customized as you may need), execution ...

  4. python测试开发django-53.xadmin里Model分类管理(proxy=True)

    前言 django的xadmin后台使用xadmin.site.register注册时,一张表只能注册一次,在后面页面上只能显示出一个页面. 有时候我们想从里面筛选出自己想要的数据,比如有全部的学生成 ...

  5. SpringMVC整合FastJson:用"最快的json转换工具"替换SpringMVC的默认json转换

    2017年11月23日 09:18:03 阅读数:306 一.环境说明 Windows 10 1709 Spring 4.3.12.RELEASE FastJson 1.2.40 IDEA 2017. ...

  6. html5使用canvas动态画医学设备毫秒级数据波形图

  7. ionic 状态栏显示异常 statusBar

    从主分支上新建一个分支开发另一个app, 生成之后手机上显示状态栏异常, 如下图, 只显示了电池的色块, 百思不得其解啊. 各种猜测无果, 对比config.xml, 发现statusBar插件版本不 ...

  8. Windows两个网卡配置路由规则 同时访问内网和外网

    电脑上有两个网卡,一个有线一个无线,有线连局域网,无线连外网,虽然两个网都连着,但还是会出现访问不通的情况. 这就要求我们自己来配置路由规则,让内网的访问走内网的网卡,外网的访问走外网的网卡. 一.查 ...

  9. C#/.NET基础视频[2018年][195集完]

    B站观看地址-无广告观看 https://www.bilibili.com/video/av21896829/ 前一两集 声音有点大 ,可以调大一点音量. 百度网盘下载地址 https://pan.b ...

  10. 基于R语言的时间序列指数模型

    时间序列: (或称动态数列)是指将同一统计指标的数值按其发生的时间先后顺序排列而成的数列.时间序列分析的主要目的是根据已有的历史数据对未来进行预测.(百度百科) 主要考虑的因素: 1.长期趋势(Lon ...