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. JAVA自学笔记15

    JAVA自学笔记15 @例题1:共有5个学生,请把五个学生的信息存储到数组中,并遍历数组,并获取每个学生的信息 Students[] students=new Student[5]; Student ...

  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. PL/SQL中查询Oracle大数(17位以上)时显示科学计数法的解决方法

    PL/SQL查询时,如果Number(17)以上的大数,会显示为科学计数法 解决方法: TOOLS->PREFERENCES->WINDOW TYPE->SQL WINDOW下选中N ...

  4. ABAP语言实现 左移 <<、无符号右移 >>> 位移操作

    这几天要在ABAP中实现 3DES 标准对称加密算法,与其他外部系统进行加密/解密操作.由于ABAP语言中没有 左移 <<.无符号右移 >>>  操作,只能自己实现 思路 ...

  5. linux 压缩当前文件夹下所有文件

    linux zip压缩.压缩当前文件夹下所有文件,压缩为a.zip.命令行的方法是怎样. zip  -r fileName.zip  文件夹名 tar tar命令可以用来压缩打包单文件.多个文件.单个 ...

  6. 第六周周赛——AK机会不易得,好好把握题解(出自HDU5650,codeforces 616A,624A,659A,655A,658A)

    A题: A题题目链接 题目描写叙述: 位运算 TimeLimit:1000MS  MemoryLimit:65536KB 64-bit integer IO format:%I64d Problem ...

  7. java 根据系统日期获取前一天、后一天时间(根据初始日期推算出期望(向前/向后)日期)

      1.情景展示  java 根据系统当前日期获取前一天日期.后一天日期,或者根据初始日期推算出期望(向前/向后)日期. 2.解决方案 导包 import java.text.ParseExcepti ...

  8. 14.翻译系列:从已经存在的数据库中生成上下文类和实体类【EF 6 Code-First系列】

    原文链接:https://www.entityframeworktutorial.net/code-first/code-first-from-existing-database.aspx EF 6 ...

  9. NetCore指令集和

    1.查看当前目录的版本号 C:\Users\Administrator>dotnet --version 1.0.4 2.发布程式,进入到指定目录 dotnet publish 3.运行程式 # ...

  10. LaTeX网址

    https://www.latex-project.org/   latex官网 http://www.latexstudio.net/   国内知名latex学习中心 https://www.ove ...