本文主要介绍的是基于 [Scrapy爬虫数据存数据库],数据已经入库,现在利用flask框架显示到页面上,代码仓库为 [martian-scrapy
]。
一、环境搭建
python 3.6.4
pip install virtualenv
pip install flask
二、flask扩展安装
pip install flask_bootstrap
pip install flask_sqlalchemy
pip install flask_script
三、 数据库、表创建
#创建数据库
create database scrapy;
#创建数据表
CREATE TABLE `images` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(64) DEFAULT '',
`img_url` varchar(100) DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
四、目录结构组织
1 image是爬虫目录,此处不多讲,请看之前的文章或留言
2 flask是web目录,存放显示爬虫数据的web文件
app 是主目录
main 是视图目录
templates 是html页面目录
statics 是css、js等静态文件目录
config.py 是全局配置文件
models.py 是orm定义文件
__init__.py 是web初始化文件
manage.py 是运行程序
#该命令会将xkcd.com网站上的图片title,url存入数据库
scrapy crawl image
#在flask目录下执行,运行web服务器
python manage.py runserver
在浏览器地址栏输入127.0.0.1:5000即可看到页面数据,如下图所示。
五、主要代码说明
config.py中DB配置
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:root@localhost:3306/scrapy?charset=utf8'
SQLALCHEMY_TRACK_MODIFICATIONS = True
使用SQLAlchemy定义orm
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class Image(db.Model):
__tablename__ = 'images'
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(64))
img_url = db.Column(db.String(100))
def __repr__(self):
return '<Images %r>' % self.title
视图路由定义
from . import main
from flask import render_template
from app.models import Image
@main.route("/")
def index():
image_list = Image.query.all()
return render_template('image.html', images=image_list)
六、可能遇到的问题
1 pymysql.err.InterfaceError: (0, ‘’)解决办法
请参考 https://blog.csdn.net/okm6666/article/details/80618767
2 关闭pyc文件生成
请参考 https://blog.csdn.net/qq_28295425/article/details/82966343
3 ImportError: cannot import name db
请参考 https://stackoverflow.com/questions/48762191/why-do-i-keep-getting-importerror-cannot-import-name-db
欢迎留言讨论、学习!