获取Avrix上Computer Vision and Pattern Recognition的论文,进一步进行统计分析。
此文主要记录我在18年寒假期间,收集Avrix论文的总结
寒假生活题外
在寒假期间,爸妈每天让我每天跟着他们6点起床,一起吃早点收拾,每天7点也就都收拾差不多。
早晨的时光是人最清醒的时刻,而且到十点左右才开始帮忙做中午饭,中间这么大把的时光,我就来做做自己喜欢的事情。小外甥女也回来,但她每天只有10点起床后才跟我玩,真希望她能早起背背古诗文。
概述
整个项目由数据采集(Python),数据存储(Mysql),数据可视化(C#)组成。
数据采集主要负责从网络上,获取Avrix的论文基本信息与论文下载地址。将其存储至MySQL,此过程中将分析Avrix上网页的结构,依靠依然是Chrome进行。
数据存储食用的MySQL,其实我蛮想用SqlServer的,之前的东家是SqlServer,操作极其稳定与简单,速度很快,功能很全。新东家节约成本给我们多发点工资,用起来MySql了,使用了一段时间,大体上差不多,数据转存备份比转存比SqlServer复杂一些。
数据可视化,目前做的部分是C#编译的一个查询界面,可以查询到相应的论文,可以从数据库中检索出论文,并链接指向的PDF文件,使用系统默认软件打开PDF。
分项陈述
pyhon数据采集部分
直接上代码
# -*- coding:utf-8 -*-
#作者:Qt.chao
#时间:2018/02/20
#综述:从Cornell University的图书馆Arvix主页上,获取计算机领域Computer Vision and Pattern Recognition的相关论文
import urllib.request
import pymysql
from bs4 import BeautifulSoup
import requests
import time
import re
import os
# 数据库连接基础类
class Conn_Mssql:
#查询Mysql使用sql语句
def Select_mssql(strsql):
#数据库连接信息
conn = pymysql.connect("localhost", "**username**", "**password**", "internetdaq", charset="utf8")
cur = conn.cursor()
cur.execute(strsql)
return cur
#插入与更新sql语句使用
def InsertOrUpdate_mssql(strsql):
# 数据库连接信息
conn = pymysql.connect("localhost", "**username**", "**password**", "internetdaq", charset="utf8")
cur = conn.cursor()
cur.execute(strsql)
conn.commit()
conn.close()
return cur
#获取网络信息中的信息,并存储
class Get_HttpMessage:
# 下载文件函数(根据连接地址,下载至D:StorePDF目录下)
def getFile(url):
try:
file_name = url.split('/')[-1]
file_path = "StorePDF\\"+file_name
u = urllib.request.urlopen(url)
except :
print(url, "url file not found")
return
block_sz = 90192
with open(file_path, 'wb') as f:
while True:
buffer = u.read(block_sz)
if buffer:
f.write(buffer)
else:
break
# 成功获取下载并打印下载信息
print("Sucessful to download" + " " + file_name)
# 获取文章中的PDF文档链接地址并下载
def getPaperFile(url,file_name,path):
try:
file_name = url.split('/')[-1]
file_path = path +"\\"+file_name
u = urllib.request.urlopen(url)
except :
print(url, "url file not found")
return
block_sz = 901920
with open(file_path, 'wb') as f:
while True:
buffer = u.read(block_sz)
if buffer:
f.write(buffer)
else:
break
print("Sucessful to download" + " " + file_name)
# 从页面中获取论文数据(PDF下载地址与论文的标题等信息)
def startGet(strUrl):
print('start')
# 链接的APPM网络
url = strUrl
request = urllib.request.Request(url)
response = urllib.request.urlopen(request)
data = response.read()
soup = BeautifulSoup(data, "lxml")
for link1 in soup.find_all(id=re.compile("dlpage")):
for linklist in link1.find_all("dl"):
# 论文连接地址相关的信息
linklistLpdf = linklist.find_all("dt")
# 论文标题作者等相关信息
linklistLName = linklist.find_all("dd")
# 节点信息长度
cont_pdf = len(linklistLpdf)
cont_Name = len(linklistLName)
if cont_pdf == cont_Name :
for linkNum in range(0,(cont_Name)):
onepdf = linklistLpdf[linkNum].find_all(href=re.compile("pdf"))
if len(onepdf)>0 :
# PDF下载的连接地址
pdfurl ="https://arxiv.org"+ (onepdf[0])['href']+".pdf"
# 文章的详细信息链接地址
paper_DetailUrls = linklistLpdf[linkNum].find_all(href=re.compile("abs"))
paper_DetailUrl = "https://arxiv.org" + (paper_DetailUrls[0])['href']
# 包含论文题目,作者,摘要的节点
oneNames = linklistLName[linkNum].find_all(class_="meta")
# Paper的编号信息
oneName = paper_DetailUrls[0].get_text().replace("'","^",999)
# 文章的标题
Paper_Titles = oneNames[0].find_all(class_="list-title mathjax")
Paper_Title = Paper_Titles[0].get_text().replace("'","^",999)
# 文章的作者
Paper_Authors = oneNames[0].find_all(class_="list-authors")
Paper_Author =""
for Paper_Authorlist in Paper_Authors[0].find_all("a"):
Paper_Author =Paper_Author +Paper_Authorlist.get_text()+"|"
Paper_Author = Paper_Author.replace("'","^",999)
Paper_Author = Paper_Author[:-1]
# 获取摘要信息
time.sleep(5)
request2 = urllib.request.Request(paper_DetailUrl)
response2 = urllib.request.urlopen(request2)
data2 = response2.read()
soup2= BeautifulSoup(data2, "lxml")
Paper_ABSTRACTS = soup2.find_all(class_="abstract mathjax")
if len(Paper_ABSTRACTS)>0 :
Paper_ABSTRACT = Paper_ABSTRACTS[0].get_text().replace("'", "^", 999)
else:
Paper_ABSTRACT = ""
# 分类信息
PAPER_SUBJECT = ""
PAPER_SUBJECTs = soup2.find_all(class_="tablecell subjects")
if len(PAPER_SUBJECTs)>0 :
PAPER_SUBJECT = PAPER_SUBJECTs[0].get_text().replace("'", "^", 999)
else:
PAPER_SUBJECT = ""
# 获取网页的详细内容信息
Paper_Detail = soup2.prettify().replace("'","^",999)
Paper_Detail = Paper_Detail.replace("-->"," -->",999)
strSQL= "CALL SaveTheCornellUniversityPaper(0,'"+oneName+"','" + Paper_Detail + "','"+pdfurl+"',0,'" + Paper_Title + "','" + Paper_Author + "','" + Paper_ABSTRACT + "','" + PAPER_SUBJECT + "')"
strSQL = strSQL.encode('utf8')
try:
# 存储地址信息
Conn_Mssql.InsertOrUpdate_mssql(strSQL)
# Get_HttpMessage.getFile(pdfurl)
time.sleep(4)
print('母页面MySQL存储成功')
except:
print(strSQL)
print('母页面MySQL存储失败')
time.sleep(5)
# 从主界面获取主界面与分界面的连接信息
def selectUrl(strUrl):
print(strUrl)
Get_HttpMessage.startGet(strUrl)
request = urllib.request.Request(strUrl)
response = urllib.request.urlopen(request)
data = response.read()
soup = BeautifulSoup(data, "lxml")
for link1 in soup.find_all(id=re.compile("dlpage")):
linklists = link1.find_all("small")
for linkUrl in linklists[0].find_all("a"):
oneUrl = "https://arxiv.org" + linkUrl["href"]
print(oneUrl)
Get_HttpMessage.startGet(oneUrl)
# 从数据库中获取链接地址,下载论文
def DownlooadPDFFromMysql(str= ""):
urlRows = Conn_Mssql.Select_mssql("SELECT TILE_NAME ,URL from cornell_paper WHERE FLAGE = 0 order BY UID DESC ;")
for urlRow in urlRows:
try:
Get_HttpMessage.getPaperFile(urlRow[1],urlRow[0]+".pdf","D:\\CornellLibrary")
urlRowfiles =urlRow[0].split(":")
urlRowfile = urlRowfiles[1]
charFILE_PATH = "D:\\\\CornellLibrary\\\\"+urlRowfile+".pdf"
strsql = "UPDATE cornell_paper SET FLAGE = 1 , FILE_PATH = '"+ charFILE_PATH +"' WHERE URL = '"+urlRow[1]+"'"
Conn_Mssql.InsertOrUpdate_mssql(strsql)
print("下载成功"+ charFILE_PATH )
except:
print("下载失败")
finally:
time.sleep(3)
# 程序入口
# Arvix相关主页的链接地址
MainUrl = '网络地址'
# 从网页中抓取相关数据信息
Get_HttpMessage.selectUrl(MainUrl)
# 从MySQL数据库中下载论文
Get_HttpMessage.DownlooadPDFFromMysql()
如上即我采集Arvix主页上Computer Vision and Pattern Recognition相关信息信相关信息信,先将网页信息逐个解析,分类存储。将网页的信息存储后,从数据库中,按照标志位,根据下载地址信息,下载相应论文。
MySQL数据存储部分
在整个采集的过程中,是将数据存储在一数据库的一张表中,数据库名称为internetdaq,表(cornell_paper)的结构是:
字段说明 | 字段名 | 字段类型 |
---|---|---|
自增无重复编号 | UID | bigint(20) |
保存时间 | SAVE_TIME | datetime |
标题名称 | TILE_NAME | varchar(200) |
存储类型 | TYPE | int(11) |
网页内详细信息 | PAGE_DETAIL | text |
标志位 | FLAGE | int(11) |
文章下载连接地址 | URL | varchar(255) |
文章题目 | PAPER_TITLE | varchar(1500) |
文章作者 | PAPER_AUTHOR | varchar(500) |
文章摘要 | PAPER_ABSTRACT | varchar(6000) |
文章分类 | PAPER_SUBJECT | varchar(500) |
文件路径 | FILE_PATH | varchar(300) |
数据库表结构SQL语句为:
DROP TABLE IF EXISTS `cornell_paper`;
CREATE TABLE `cornell_paper` (
`UID` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增无重复编号',
`SAVE_TIME` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '保存时间',
`TILE_NAME` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '标题名称',
`TYPE` int(11) DEFAULT NULL COMMENT '存储类型',
`PAGE_DETAIL` text COLLATE utf8_unicode_ci COMMENT '网页内详细信息',
`FLAGE` int(11) DEFAULT NULL COMMENT '标志位',
`URL` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '文章下载连接地址',
`PAPER_TITLE` varchar(1500) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '文章题目',
`PAPER_AUTHOR` varchar(500) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '文章作者',
`PAPER_ABSTRACT` varchar(6000) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '文章摘要',
`PAPER_SUBJECT` varchar(500) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '文章分类',
`FILE_PATH` varchar(300) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '文件路径',
PRIMARY KEY (`UID`)
) ENGINE=InnoDB AUTO_INCREMENT=2445 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
数据库使用的存储结构SQL语句为:
DROP PROCEDURE IF EXISTS `SaveTheCornellUniversityPaper`;
CREATE PROCEDURE SaveTheCornellUniversityPaper(in int_Type int, in CharTILE_NAME varchar(200),
in CharPAGE_DETAIL text,in CharURL varchar(254),in int_Flage int
,in CharPAPER_TITLE varchar(1500)
,in CharPAPER_AUTHOR varchar(500)
,in CharPAPER_ABSTRACT varchar(6000)
,in CharPAPER_SUBJECT varchar(500)
)
MODIFIES SQL DATA
COMMENT'从Cornell大学的论文主页获取论文的信息并存储 int_Type(类型) CharTILE_NAME(标题) CharPAGE_DETAIL(网页信息) CharURL(链接地址) int_Flage(标志位)'
BEGIN
DECLARE pdfCount int DEFAULT 0;
SELECT COUNT(URL) INTO pdfCount from cornell_paper WHERE URL = CharURL;
IF pdfCount< 1 THEN
INSERT INTO cornell_paper
(SAVE_TIME,TYPE,TILE_NAME,PAGE_DETAIL,FLAGE,URL,PAPER_TITLE,PAPER_AUTHOR,PAPER_ABSTRACT,PAPER_SUBJECT)
VALUES
(NOW(),int_Type,CharTILE_NAME,CharPAGE_DETAIL,int_Flage,CharURL,CharPAPER_TITLE,CharPAPER_AUTHOR,CharPAPER_ABSTRACT,CharPAPER_SUBJECT);
END IF;
END
CSharp数据查询部分
此部分主要是用C#从数据库中提取数据,并查询连接查看,主要是为了平时查看论文的具体内容和PDF文档,用于实现的代码也较为简单,没做过多修饰,在接下完善中,可能使用python或C#进行进一步的语义分析与数据可视化,目前主要逻辑如何下所示
主查询界面
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using LCS;
namespace PGCL
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private DataTable dataGridDataTable;
/// <summary>
/// 窗体登录
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MainWindow_OnLoaded(object sender, RoutedEventArgs e)
{
}
/// <summary>
/// 刷新按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BtnUpdate_OnClick(object sender, RoutedEventArgs e)
{
ShowAllDate();
}
/// <summary>
/// 刷新显示所有数据列表
/// </summary>
private void ShowAllDate()
{
DataTable myDataTable = LCS_Lib_DataMySql.Mysql_SelectDataTable("SELECT SAVE_TIME,PAPER_TITLE,PAPER_SUBJECT,URL FROM `cornell_paper` ORDER BY UID DESC ;");
dataGridDataTable = new DataTable();
dataGridDataTable.Columns.Add("Num", typeof(string));
dataGridDataTable.Columns.Add("Save_time", typeof(string));
dataGridDataTable.Columns.Add("Title", typeof(string));
dataGridDataTable.Columns.Add("Subject", typeof(string));
dataGridDataTable.Columns.Add("URL", typeof(string));
int IntNum = 1;
foreach (DataRow VARDataRow in myDataTable.Rows)
{
DataRow oneDataRow = dataGridDataTable.NewRow();
oneDataRow["Num"] = IntNum.ToString();
oneDataRow["Save_time"] = VARDataRow["SAVE_TIME"].ToString();
oneDataRow["Title"] = VARDataRow["PAPER_TITLE"].ToString();
oneDataRow["Subject"] = VARDataRow["PAPER_SUBJECT"].ToString();
oneDataRow["URL"] = VARDataRow["URL"].ToString();
dataGridDataTable.Rows.Add(oneDataRow);
IntNum++;
}
Paper_datagrid.ItemsSource = dataGridDataTable.DefaultView;
}
/// <summary>
/// 双击表格
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Paper_datagrid_OnMouseDoubleClick(object sender, MouseButtonEventArgs e)
{
DataRowView onreRowView = (DataRowView) Paper_datagrid.SelectedItem;
DataRow oneDataRow = onreRowView.Row;
DataTable myDataTable = LCS_Lib_DataMySql.Mysql_SelectDataTable("SELECT PAPER_TITLE,PAPER_AUTHOR,PAPER_SUBJECT,PAGE_DETAIL,FILE_PATH" +
" FROM cornell_paper WHERE URL = '" + oneDataRow["URL"].ToString() + "' ");
winDetail myWinDetail = new winDetail();
myWinDetail.strTile = myDataTable.Rows[0]["PAPER_TITLE"].ToString();
myWinDetail.strAuthor = myDataTable.Rows[0]["PAPER_AUTHOR"].ToString();
myWinDetail.strSubject = myDataTable.Rows[0]["PAPER_SUBJECT"].ToString();
myWinDetail.strpage_detail = myDataTable.Rows[0]["PAGE_DETAIL"].ToString();
string[] arelinkStrings = myDataTable.Rows[0]["FILE_PATH"].ToString().Split(':');
string strLkink = "";
if (myDataTable.Rows[0]["FILE_PATH"].ToString().Length>0)
{
strLkink = myDataTable.Rows[0]["FILE_PATH"].ToString();
}
else
{
strLkink = "";
}
myWinDetail.strPDFlink = strLkink;
myWinDetail.ShowDialog();
}
}
}
详细信息查询
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace PGCL
{
/// <summary>
/// winDetail.xaml 的交互逻辑
/// </summary>
public partial class winDetail : Window
{
public winDetail()
{
InitializeComponent();
}
/// <summary>
/// 题目
/// </summary>
public string strTile { set; get; }
/// <summary>
/// 作者
/// </summary>
public string strAuthor { set; get; }
/// <summary>
/// 分类标签
/// </summary>
public string strSubject { set; get; }
/// <summary>
/// 网页详细信息
/// </summary>
public string strpage_detail { set; get; }
/// <summary>
/// PDF连接地址
/// </summary>
public string strPDFlink { set; get; }
/// <summary>
/// 关闭按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Btn_close_OnClick(object sender, RoutedEventArgs e)
{
this.Close();
}
/// <summary>
/// 窗体登录
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void WinDetail_OnLoaded(object sender, RoutedEventArgs e)
{
lab_tile.Content = strTile;
lab_author.Content = strAuthor;
lab_subject.Content = strSubject;
web_detail.NavigateToString(strpage_detail);
lab_link.Content = strPDFlink;
lab_link.Foreground = new SolidColorBrush(Colors.Blue);
}
public void SuppressScriptErrors(WebBrowser wb, bool Hide)
{
FieldInfo fiComWebBrowser = typeof(WebBrowser).GetField("_axIWebBrowser2", BindingFlags.Instance | BindingFlags.NonPublic);
if (fiComWebBrowser == null) return;
object objComWebBrowser = fiComWebBrowser.GetValue(wb);
if (objComWebBrowser == null) return;
objComWebBrowser.GetType().InvokeMember("Silent", BindingFlags.SetProperty, null, objComWebBrowser, new object[] { Hide });
}
private void Web_detail_OnNavigated(object sender, NavigationEventArgs e)
{
SuppressScriptErrors(web_detail, true);
}
/// <summary>
/// 双击表格
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Lab_link_OnMouseDoubleClick(object sender, MouseButtonEventArgs e)
{
Process MyProcess = new Process();
MyProcess.StartInfo.FileName = lab_link.Content.ToString();
MyProcess.StartInfo.Verb = "Open";
MyProcess.StartInfo.CreateNoWindow = true;
MyProcess.Start();
}
}
}
总结
上述即为我这次数据采集的实践,再接下来的学习中,我会向着词频分析与数据可视化方向进一步拓展。上述代码不能直接复制粘贴使用,仅供参考。
获取Avrix上Computer Vision and Pattern Recognition的论文,进一步进行统计分析。的更多相关文章
- CVPR(IEEE Conference on Computer Vision and Pattern Recognition)
论文提交时间:11月份中旬左右会议时间:7月份左右 CVPR 2017: 网址:http://cvpr2017.thecvf.com/ 接受论文数:782
- Rethinking the inception architecture for computer vision的 paper 相关知识
这一篇论文很不错,也很有价值;它重新思考了googLeNet的网络结构--Inception architecture,在此基础上提出了新的改进方法; 文章的一个主导目的就是:充分有效地利用compu ...
- Signal Processing and Pattern Recognition in Vision_15_RANSAC:Performance Evaluation of RANSAC Family——2009
此部分是 计算机视觉中的信号处理与模式识别 与其说是讲述,不如说是一些经典文章的罗列以及自己的简单点评.与前一个版本不同的是,这次把所有的文章按类别归了类,并且增加了很多文献.分类的时候并没有按照传统 ...
- Computer Vision Tutorials from Conferences (3) -- CVPR
CVPR 2013 (http://www.pamitc.org/cvpr13/tutorials.php) Foundations of Spatial SpectroscopyJames Cogg ...
- paper 156:专家主页汇总-计算机视觉-computer vision
持续更新ing~ all *.files come from the author:http://www.cnblogs.com/findumars/p/5009003.html 1 牛人Homepa ...
- code and dataset resources of computer vision
From:http://rogerioferis.com/VisualRecognitionAndSearch2014/Resources.html Source Code Non-exhaustiv ...
- AI-Azure上的认知服务之Computer Vision(计算机视觉)
使用 Azure 的计算机视觉服务,开发人员可以访问用于处理图像并返回信息的高级算法. 主要包含如下高级算法: 标记视觉特性Tag visual features 检测对象Detect objects ...
- Computer Vision的尴尬---by林达华
Computer Vision的尴尬---by林达华 Computer Vision是AI的一个非常活跃的领域,每年大会小会不断,发表的文章数以千计(单是CVPR每年就录取300多,各种二流会议每年的 ...
- 计算机视觉中的边缘检测Edge Detection in Computer Vision
计算机视觉中的边缘检测 边缘检测是计算机视觉中最重要的概念之一.这是一个很直观的概念,在一个图像上运行图像检测应该只输出边缘,与素描比较相似.我的目标不仅是清晰地解释边缘检测是怎样工作的,同时也提 ...
随机推荐
- Java基础学习笔记一 Java介绍
java语言概述 Java是sun公司开发的一门编程语言,目前被Oracle公司收购,编程语言就是用来编写软件的. Java的应用 开发QQ.迅雷程序(桌面应用软件) 淘宝.京东(互联网应用软件) 安 ...
- 云计算--网络原理与应用--20171122--STP与HSRP
简单了解STP 学习HSRP 实验 一. 简单学习STP STP(spanning tree protocol)生成树协议,就是把一个环形的结构改变成一个树形的结构.通过一些算法,在逻辑上阻塞一些端 ...
- iPhone的App嵌入html页面问题
测试环境:iPhone ios 11.0.3 问题:iPhone App嵌入HTML页面,页面拉动到底部时,手势从屏幕底部边缘开始往上拉动,页面出现白色图层,且html页面一屏外的会卡住,无法滚动,需 ...
- 201621123040《Java程序设计》第12周学习总结
1.本周学习总结 2.面向系统综合设计-图书馆管理系统或购物车 2.1简述如何使用流与文件改造你的系统.文件中数据的格式如何? 将书目信息写入文件,查阅图书馆书目信息时,实现文件的读取 2.2简述系统 ...
- NumPy简介
NumPy是什么? NumPy(Numerrical Python 的缩写)是一个开源的Python科学计算库.使用NumPy,就可以很自然的使用数组.NumPy包含很多实用的数学函数,涵盖线性代数运 ...
- 【iOS】Swift GCD-上
尽管Grand Central Dispatch(GCD)已经存在一段时间了,但并非每个人都知道怎么使用它.这是情有可原的,因为并发很棘手,而且GCD本身基于C的API在Swift世界中很刺眼. 在这 ...
- NetFPGA Demo ——reference_router_nf1_cml
NetFPGA Demo --reference_router_nf1_cml 前言 本博文主要介绍了reference_router_nf1_cml该demo的一路运行,以及一路上艰难跑通遇到的坑. ...
- Flask jinja2 全局函数,宏
内置全局函数 dict()函数,方便生成字典型变量 {% set user = dict(name='Mike',age=15) %} <p>{{ user | tojson | safe ...
- Flask-uploads 简单使用
pip install flask-uploads#先导入次此处需要用到的库: from flask_uploads import UploadSet, IMAGES, configure_uploa ...
- jsp文件调用本地文件的方法(Tomcat server.xml 设置虚拟目录)
JSP文件: <video id="my-video" class="video-js" controls preload="auto" ...