这个就不是一个问题可以解决的。不同情况具体的 *** 作都不一样
HTML是动态还是静态的,还是本地的,还是有部署web服务的。
如果是有部署的,还要看你用的什么前端框架,什么后台框架。
数据库也有不同,是mysql、oracle还是MSSQL。
解决方法为:
创建数据表时指定charset=utf8,如:
use hongxiudb;
create table if not exists hongxiu(
name text,
author text,
intro text
)engine=InnoDB default charset=utf8;
找那个高中学校的教务处,会有些数据可以参考,不过,一般不外泄露。也可以去学校,看看学校橱窗中的教师情况介绍,听一哈社会上的评价。
打开目标网页(相信每个大学的每个学院官网都有这一栏信息)
在这里插入描述
在这里插入描述
可以很直观的看出,所有教师的信息保存在一个表格当中,查看网页源码验证一下自己的想法:
在这里插入描述
直接定位元素的源码位置,可以看出确实保存在table标签当中,再看每一个元素的位置,都是在span标签中保存,但自己观察数据和源码,会发现在名字一栏,其若是两个字的名字的话,中间是由空格隔开的,这对于使用xpath提取的话,在进行数据清洗保存的时候会比较麻烦,而且下面的有数据为空,对于爬取下来的数据进行分类也比较麻烦。我采用了一种简单粗暴的方法用来提取这表格保存的数据,下面我会给出解决的方法。
在这里插入描述
2 暴力爬取表格存储的教师信息
此次爬取使用的是Scrapy框架。
21 创建工程
scrapy startproject rjxyInfo
22 创建Spider
在Pycharm下端的Terminal中执行即可:(可以指定域名)
scrapy genspider rjxy
23 暴力爬取表格信息
231 分析如何爬取
网页的源码并没有什么特殊的地方,但是在使用xpath爬取的时候,直接进行爬取,会因为源码在编写的时候使用了回车符,或者有的表格中的信息没有填写,直接进行爬取返回的数据不易整理成组存入数据库。但通过直接查看其xpath源码,会发现其中的规律:
# 性别
# //[@id="vsb_content"]/div/div/table/tbody/tr[2]/td[3]/p/span
# //[@id="vsb_content"]/div/div/table/tbody/tr[103]/td[3]/p/span
# 序号
# //[@id="vsb_content"]/div/div/table/tbody/tr[2]/td[1]/p/span
# //[@id="vsb_content"]/div/div/table/tbody/tr[103]/td[1]/p/span
# 姓名
# result = ''join(responsexpath('//[@id="vsb_content"]/div/div/table/tbody/tr[3]/td[2]/p/span/text()')extract())strip()
# 毕业学校
# //[@id="vsb_content"]/div/div/table/tbody/tr[2]/td[5]/p/span
# 现从事专业
# //[@id="vsb_content"]/div/div/table/tbody/tr[2]/td[6]/p/span
# 备注
# //[@id="vsb_content"]/div/div/table/tbody/tr[2]/td[7]/p/span
232 编写spider中的parse()方法
def parse(self, response):
for i in range(2,104):
i = str(i)
item = TeachersItem()
item['id'] = responsexpath('//[@id="vsb_content"]/div/div/table/tbody/tr[' +i + ']/td[1]/p/span/text()')extract()
item['name'] = ''join(responsexpath('//[@id="vsb_content"]/div/div/table/tbody/tr[' +i+ ']/td[2]/p/span/text()')extract())strip()
item['sex'] = ''join(responsexpath('//[@id="vsb_content"]/div/div/table/tbody/tr[' +i+ ']/td[3]/p/span/text()')extract())strip()
item['degree'] = responsexpath('//[@id="vsb_content"]/div/div/table/tbody/tr[' +i+ ']/td[4]/p/span/text()')extract()
item['graduated_school'] = ''join(responsexpath('//[@id="vsb_content"]/div/div/table/tbody/tr[' +i+ ']/td[5]/p/span/text()')extract())strip()
item['now_Teachproject'] = ''join(responsexpath('//[@id="vsb_content"]/div/div/table/tbody/tr[' +i+ ']/td[6]/p/span/text()')extract())strip()
item['remark'] = responsexpath('//[@id="vsb_content"]/div/div/table/tbody/tr[' +i+ ']/td[7]/p/span/text()')extract()
yield item
3 将数据存入数据库
class PymysqlPipeline(object):
#连接数据库
def __init__(self):
selfconnect = pymysqlconnect(
host = 'localhost',
database = 'teachersinfo',
user = 'root',
password = '123456',
charset = 'utf8',
port = 3306
)
# 创建游标对象
selfcursor = selfconnectcursor()
# 此方法是必须要实现的方法,被定义的 Item Pipeline 会默认调用这个方法对 Item 进行处理
def process_item(self,item,spider):
# 判断item是哪一类的item
cursor = selfcursor
sql = 'insert into teachers(id,name,sex,degree,graduated_school,now_Teachproject,remark) values (%s,%s,%s,%s,%s,%s,%s)'
cursorexecute(sql,(
item['id'],item['name'],item['sex'],item['degree'],item['graduated_school'],item['now_Teachproject'],item['remark'],
))
# 提交数据库事务
selfconnectcommit()
return item
4 通过sql语言查询,得到数据进行数据可视化
41 sql语言查询举例
42 全部老师男女比例(柱状图)
43 专职老师男女比例(柱状图)
44 师资力量(柱状图)
45 师资力量(饼图)
46 不同备注教师比例(柱状图)
47 不同备注教师比例(饼图)
48 教师毕业大学整合(柱状图)
术之多
Security4:授予查看定义,执行SP和只读数据的权限
2022-10-15 原文
SQL Server数据库有完善的权限管理机制,对于存储过程,其权限分为查看定义,执行和修改,查看SP定义的权限是:VIEW DEFINITION ,执行存储过程的权限是:EXECUTE,修改SP的权限是:ALTER,但是该权限也能修改表结构,视图的定义等数据库对象。数据的读取权限是SELECT,这个查看定义是不同的权限。对于一个数据表,如果仅授予VIEW DEFINITION权限,而没有授予SELECT权限,那么用户只能查看数据表的结构(Schema),而无法查看表中存储的数据。
在管理权限时,可以给特定的用户授予“只能读取数据和执行SP,而不能修改数据”的权限,也就是,使特定的用户只能查看数据(只读,SELECT),只能查看定义(VIEW DEFINITION),和执行SP的权限(EXECUTE),这样的权限设置,既能使用户查看到业务数据,又能避免用户私自修改数据。
对于数据的读取权限,SQL Server内置固定数据库角色 db_datareader,把用户添加到该角色中,用户就被授予了对数据库中所有数据(表或视图)的读取权限,就是说,用户可以对数据表或视图执行select命令读取数据;也可以逆向思考,不允许用户修改数据,把用户添加到固定数据库角色 db_denydatawriter 中,这样,用户不能添加,更新和删除任何数据,就是说,不能对任何数据表执行insert,updae和delete命令。这两个数据库角色,相当于以下两个命令:
grant select to [domain\user];
deny update,delete,insert to [domain\user];
权限的分配分为:授予(grant)和拒绝(deny),对于已分配的权限,也可以通过回收(revoke)命令收回,权限管理是个技术活。
一,授予查看定义的权限
查看数据库对象的权限是VIEW DEFINITION,通常数据库对象是指:数据表,视图,存储过程,函数等,被授予VIEW DEFINITION权限之后,用户只能查看定义,而无法从数据表或视图中查看数据,无法执行SP和函数等。
1,授予SQL Server实例级别的查看定义的权限
以下代码用于授予权限VIEW ANY DEFINITION,代码必须在master数据库中执行,使指定的用户能够查看当前SQL Server实例中的所有数据库对象的定义:
use master
go
grant view any definition to [domain\user]
2,授予User,只能查看当前数据库对象的定义的权限
以下代码用于授予VIEW DEFINITION,使指定的用户能够查看指定数据库中的所有对象的定义:
use db_name
go
grant view definition to [domain\user]
3,授予User,只能查看当前数据库的指定数据库对象的定义的权限
以下代码用于授予VIEW DEFINITION,通过on子句,使指定的用户能够查看指定对象的定义:
use db_name
go
grant view definition
on object::schema_nameobject_name
to [domain\user]
二,授予执行存储过程的权限
以下代码授予用户执行存储过程的权限,通过on子句指定用户只能执行特定的SP:
use db_name
go
grant execute
on object::schema_nameobject_name
to [domain\user]
如果grant execute省略on子句,表示所有的SP,这样,用户可以执行数据库中的所有SP:
use db_name
go
grant execute
to [domain\user]
三,授予用户修改存储过程的权限
修改存储过程的权限是ALTER,但是,ALTER同时也能修改表结构,视图定义等数据库对象,如下代码所示:
GRANT ALTER TO [domain\user]
如果仅授予用户修改SP的权限,那么必须逐个设置,或者把SP创建在独立的schema下,通过授予用户修改schema,达到控制用户只修改SP的目的:
GRANT ALTER
ON SCHEMA::proc_schema
TO [domain\user]
四,授予用户查看SP的定义,执行和修改SP的权限
通过GRANT子句,可以一次性把查看SP的定义,执行和修改SP的权限都授予指定的用户:
GRANT ALTER, EXECUTE, VIEW DEFINITION
ON SCHEMA::[proc_schema]
TO [domain\user]
在GRANT子句中省略ON子句,表示授予用户的权限作用于所有的数据库对象,包括数据表,视图,存储过程,函数等。
五,授予Public用户查看定义的权限
当Login没有映射到相应的User时,该Login被映射到默认的Public,设置给用户查看定义的权限,这样,每个登陆到SQL Server实例的用户,都可以查看定义。
use master
go
grant view any definition to public
use dbn_ame
go
grant view definition to public
六,授予用户查看定义,只读数据和执行SP的权限
存储过程 sp_msforeachdb @command 是微软未公开的存储过程,该存储过程遍历当前的SQL Server实例的所有数据库,在每个数据库中执行相同的命令:
use master
go
create login [domain\user]
from windows;
go
grant view any definition
to [domain\user] ;
go
exec sp_msforeachdb
'
use [];
if not exists
(
select
from sysdatabase_principals
where name=''domain\user''
)
create user [domain\user]
for login [domain\user];
alter role db_datareader
add member [domain\user];
grant execute to [domain\user];
'
go
遍历数据库的功能,也可以使用游标来实现,本文不再赘述。
参考文档:
Run same command on all SQL Server databases without cursors
Granting View Definition Permission to a User or Role in SQL Server
Security4:授予查看定义,执行SP和只读数据的权限的更多相关文章
MySQL能否授予查看存储过程定义权限给用户
在其他RDBMS中,可以将查看某个存储过程(PROCEDURE)定义的权限给某个用户,例如在SQL Server中,可以单独将查看ProcedureName定义的权限授予UserA GRANT VIE
查看ORACLE执行计划的几种常用方法
SQL的执行计划实际代表了目标SQL在Oracle数据库内部的具体执行步骤,作为调优,只有知道了优化器选择的执行计划是否为当前情形下最优的执行计划,才能够知道下一步往什么方向 执行计划的定义:执行目
查看Job执行的历史记录
SQL Server将Job的信息存放在msdb中,Schema是dbo,表名以“sysjob”开头 一,基础表 1, 查看Job和Step,Step_ID 是从1 开始的 select jjo
查看Oracle执行计划
1PL/SQL解释计划窗口 优点:方面 缺点:看到信息有限 2explain_plan for 针对某个句子优化较方便 3sqlplus Sqlplus里输入命令: set autotrace
如何查看MySQL执行计划
在介绍怎么查看MySQL执行计划前,我们先来看个后面会提到的名词解释: 覆盖索引: MySQL可以利用索引返回select列表中的字段,而不必根据索引再次读取数据文件 包含所有满足查询需要的数据的索引
查看SQL执行计划
一用户进入某界面慢得要死,查看SQL执行计划如下(具体SQL语句就不完全公布了,截断的如下): call count cpu elapsed disk
MSSQL优化之——查看语句执行情况
MSSQL优化之——查看语句执行情况 在写SQL语句时,必须知道语句的执行情况才能对此作出优化了解SQL语句的执行情况是每个写程序的人必不可少缺的能力下面是对查询语句执行情况的方法介绍 一设置
查看Oracle执行计划的几种方法
查看Oracle执行计划的几种方法 一通过PL/SQL Dev工具 1直接File->New->Explain Plan Window,在窗口中执行sql可以查看计划结果其中,Cos
查看Mysql执行计划
使用navicat查看mysql执行计划: 打开profile分析工具: 查看是否生效:show variable like ‘%profil%’; 查看进程:show processlist; 选择
随机推荐
从零自学Java-1编写第一个Java程序
编写第一个Java程序 完成工作:1在文本编辑器中输入一个Java程序 2使用括号组织程序 3保存编译和运行程序 package comJsample;//将程序的包名称命名为com
JSP 过滤器
JSP教程 - JSP过滤器 JSP过滤器是可用于拦截来自客户端的请求或处理来自服务器的响应的Java类 过滤器可用于执行验证,加密,日志记录,审核 我们可以将过滤器映射到应用程序部署描述符文件w
ASPNET动态引用样式表(css)和脚本(js)文件
// 引入js文件 HtmlGenericControl scriptControl = new HtmlGenericControl("script"); scriptContr
mySQL 约束 (Constraints)
约束用于限制加入表的数据的类型: 1创建表时规定约束(通过 CREATE TABLE 语句) 2表创建之后也可以(通过 ALTER TABLE 语句) 约束类型: NOT NULL(非空) UN
直播内容不合规怎么办?智能AI为您解决审核难题
背景 近些年来,视频直播快速发展,大量的直播平台如雨后春笋一般出现,但是这同样给直播内容的监管带来了巨大的挑战,一方面国家对于直播内容监管的要求日益严格,另一方面相对于文字内容的审核,多媒体内容的审核
selenium - pycharm三种案例运行模式
1unittest 运行单个用例 (1)将鼠标放到对应的用例,右键运行即可 2unittest运行整个脚本案例 将鼠标放到if __name__ == "__main__":
dns服务器测试工具
下载地址:>
还存在。
1、首先在pycharm中安装pyinstaller插件:文件,设置,项目,python解释器里添加。
2、然后打开Terminal(Alt+F12),在其中输入pyinstaller。
3、注意最后为要打包为exe文件的路径,最好为全英文路径,最后生成的exe文件即在dist文件内。
打开数据库的正确方式是,从菜单 View -> Tool Window -> Database 打开数据库视图,在视图中创建数据库链接。因为除sqlite之外的大多数服务器数据库并不能按简单的本地文件方式处理。
以上就是关于pycharm怎么把数据库的数据传输到html全部的内容,包括:pycharm怎么把数据库的数据传输到html、python2.7中如果脚本文件放在中文目录下,pymysql连接数据库会报错,怎么解决(不要修改中文目录名为英文)、怎么从链接里提取师资力量等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)