-
2019-10-15 22:24:25
诞生的历史背景
最初在浏览器中主要展现的是静态的文本或图像信息,GIF图片则第一次为HTML页面引入了动态元素。不过人们已经不仅仅满足于访问放在Web服务器上的静态文件,1993年CGI(Common Gateway Interface)出现了,Web上的动态信息服务开始蓬勃兴起。CGI定义了Web服务器与外部应用程序之间的通信接口标准,因此Web服务器可以通过CGI执行外部程序,让外部程序根据Web请求内容生成动态的内容。Perl因为跨操作系统和易于修改的特性成为CGI的主要编写语言。当然,CGI可以用任何支持标准输入输出和环境变量的语言编写,比如Shell脚本,C/C++语言,只要符合接口标准即可。比如你用C语言编写CGI程序,你把希望返回的HTML内容通过printf输出就可以发送给Web服务器,进而返回给用户。
特点
1. "交互性",即网页会根据用户的要求和选择而动态改变和响应,将浏览器作为客户端界面,这将是今后WEB发展的大势所趋.
2. "自动更新",即无须手动地更新HTML文档,便会自动生成新的页面,可以大大节省工作量.
3. "因时因人而变",即当不同的时间,不同的人访问同一网址时会产生不同的页面。
除了早期的CGI外,目前主流的动态网页技术有JSP,ASP,PHP等
分析
1.CGI(Common Gateway Interface)
在早期,动态网页技术主要采用CGI技术,即Common Gateway Interface(公用网关接口)。在早期,你可以使用不同的程序编写合适的CGI程序,如Visual Basic,Delphi或C/C++等。虽然CGI技术成熟而且功能强大,但由于编程困难,效率低下,修改复杂等缺陷,所以有逐渐被新技术取代的趋势。
可以使用不同的程序编写合适的CGI程序,如Visual Basic、Delphi或C/C++等,用户将已经写好的程序放在WEB服务器的计算机上运行,再将其运行结果通过WEB服务器传输到客户端的浏览器上。通过CGI建立WEB页面与脚本程序之间的联系,并且可以利用脚本程序来处理访问者输入的信息并据此作出响应。事实上,这样的编制方式比较困难而且效率低下,因为每一次修改程序都必须重新将CGI程序编译成可执行文件。
最常用于编写CGI技术的语言是Perl(Practical Extraction and Report Language,文字分析报告语言),它具有强大的字符串处理能力,特别适合用于分割处理客户端Form提交的数据串;用它来编写的程序后缀为.pl。
(1)早期动态技术使用最多,发展比较成熟并且功能强大;现在使用比较少,仍然还是有,主要用于linux/unix操作系统中
(2)效率比较低,编程比较困难
(3)可以使用不同的语言编写常用的编程语言
2.ASP(Active Server Page)
ASP为动态服务器网页(ActiveServer Page)的简称。随着Web技术的迅速发展,动态和个性化网页的比重日益增加,而传统缓存一般只适用于静态内容,难以减少获取动态网页所需的流量和延时代价。ASP更精确的说是一个中间件,这个中间件将Web上的请求转入到一个解释器中,在这个解释器中将所有的ASP的Script进行分析,再进行执行,而这时可以在这个中间件中去创建一个新的COM对象,对这个对象中的属性和方法进行操作和调用,同时再通过这些COM组件再完成更多的工作。所以说,ASP强大的不在于它的VBScript, 而在于它后台的COM组件,这些组件无限的扩充了ASP的能力。
html+javascript(vbscript)+com组件的形式asp,功能强大不在于能使用相关的脚本语言而是com组件
优点:
(1)入门容易,简单易学
(2)安装使用方便(windows+iis)
(3)效率比cgi高
缺点:
(1)功能扩展比较困难,因为asp的功能扩展在com组件,开发com组件功能扩展比较困难
(2)安全性,asp与windows和iis一起工作,windows和iis的安全漏洞会对asp产生影响
(3)跨平台性比较差,只能在windows上运行;若要在linux上运行,需要安装插件
(4)实现企业级的功能困难,大型网站很少用asp,中小型网站比较适合
3.PHP(Hypertext Preprocessor)
PHP(Hypertext Preprocessor)是一种HTML内嵌式的语言(类似于IIS上的ASP)。而PHP独特的语法混合了C、Java、Perl以及PHP式的新语法。它可以比CGI或者Perl更快速的执行动态网页。PHP是一种服务器端的HTML脚本/编程语言,语法上与C相似,可运行在Apache,Netscape/iPlanet和MicrosoftIIS Web等服务器上。
PHP能够支持诸多数据库,如MS SQL Server, MySql,Sybase,Oracle等。
它与HTML语言具有非常好的兼容性,使用者可以直接在脚本代码中加入HTML标签,或者在HTML标签中加入脚本代码从而更好地实现页面控制。PHP提供了标准的数据库接口,数据库连接方便,兼容性强;扩展性强;可以进行面向对象编程。
官网地址:www.php.net
优点:
(1)跨平台性良好,可在windows/linux/unix上运行,多种数据库支持
(2)效率比较高,具有良好的安全性
(3)免费使用
缺点:
(1)安装复杂
(2)缺少企业级的支持,是自由软件组织开发的,缺少正规的公司对其负责
4.JSP(Java Server Pages)
动态网页设计中选择合理的数据传递方式是非常重要的。JSP网页间的数据传递有许多种不同的方法,而当页面之间需要传递的数据的数据量不确定时,通常的方法难以实现。
JSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。Java Servlet 是JSP的技术基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向Internet的所有特点。
jsp=html+java片段+jsp语法+js
优点:
(1)一次编写,到处运行
(2)良好的跨平台性,可在windows/linux/unix上运行
(3)多种开发工具支持
(4)强大的可伸缩性(jsp+javabean)的方法
缺点:
(1)jsp入门比asp难,jsp产品的复杂度高
(2)要求运行的机器配置高,因为jsp是用class常驻内存的方式运行的,效率高,需要占用更多的内存
参考文章
https://www.cnblogs.com/KSYoon/p/9349107.html
更多相关内容 -
华师网站动态开发资料定义.pdf
2021-11-06 10:01:24华师网站动态开发资料定义.pdf -
JSP动态网页开发原理详解
2021-01-08 07:58:03JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。 JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比html而言,html只能为用户提供静态数据,而Jsp... -
PHP动态网页设计与制作案例教程
2012-12-12 10:53:30本书展示一个完整网站的设计和实现过程,详细地介绍动态网页设计和制作的技术和相关理论,全书共分为8章,主要内容包括:动态网站设计概述、动态网站编程环境、网站主页设计与PHP基础、网站计数器设计与PHP文件访问... -
js 定义对象数组(结合)多维数组方法
2021-01-19 16:58:08在php中定义数组很简单,但是在js中如果搞成字符为下标会出错,所以结合对象来搞 var top_ = { 'index':'首页', 'user':'用户', 'tree':'模块树' } ; var all_list = [ { index: [ {'name':'网站栏目... -
使用动态网页元素创建了一个网站。 使用PHP的面向对象功能定义一个类,并向该类添加方法和属性
2021-02-17 03:32:48自述文件中的图像 -
PHP+MySQL网站开发技术(拓展) 2 PHP编程基础 PHP动态网页基础试题-059.pptx
2020-09-10 08:06:00定义一个学生姓名常量STUNAME,其值是你的名字并输出这个常量PHP+MySQL网站开发技术扩展_雷军PHP动态网页基础试题2.已知圆锥的高为6底半径为3求体积保留两位小数体积等于三分之一底面积乘以高PHP+MySQL网站开发技术... -
动态网页爬虫
2021-12-04 21:49:25文章目录一.在Anaconda的虚拟环境下安装selenium 和webdrive等必要库1....爬取指定网页[http://quotes.toscrape.com/js/](http://quotes.toscrape.com/js/)的名言四.Selenium:requests+Selenum爬取京东图书五.总结文章目录
一.在Anaconda的虚拟环境下安装selenium 和webdrive等必要库
1.虚拟环境的主要操作命令
1.创建虚拟环境
打开Anaconda Prompt
conda create -n env_name python=3.6
其中env_name是自己虚拟环境的名称,可任意命名
同时安装必要的包:
conda create -n env_name numpy matplotlib python=3.6
2.查看已经创建的虚拟环境
conda env list
我的虚拟环境如下
3.激活虚拟环境
activate your_env_name(虚拟环境名称)
此时使用
python --version
可以检查当前python版本是否为想要的(即虚拟环境的python版本)
4.退出虚拟环境
deactivate your_env_name(虚拟环境名称)
5.删除虚拟环境
#删除环境
conda remove -n your_env_name(虚拟环境名称) --all
#使用命令
conda remove --name $your_env_name $package_name(包名)
2.安装本次实验所需安装包
selenium
pip install selenium
webdrive
要使用selenium去调用浏览器,还需要一个驱动,不同浏览器的webdriver需要独立安装
我这里就下载Chrome的驱动
可以从这里下载:https://npm.taobao.org/mirrors/chromedriver/
下载后是一个exe文件
将该文件添加到PATH下
二.对百度进行自动化测试
1.打开浏览器,进入百度搜索界面
from selenium import webdriver driver=webdriver.Chrome('D:\\software\\chromedriver_win32\\chromedriver.exe') #进入网页 driver.get("https://www.baidu.com/")
这里运行时总是报错,这和下载的驱动版本有关系
这里提供一个简单的方法
通过安装webdriver_manager来解决webdriver的管理问题
pip install webdriver_manager
接下里就是调库而已
from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager driver = webdriver.Chrome(ChromeDriverManager().install())
顺便说一下, 如果你下载了新版本驱动, 可以用这个指定路径 :
webdriver.Chrome函数的参数executable_path可以指定软件驱动的路径driver = webdriver.Chrome(executable_path=r'C:\path\to\chromedriver.exe')
修改后的代码:
from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager driver = webdriver.Chrome(ChromeDriverManager().install()) #进入网页 driver.get("https://www.baidu.com/")
运行结果:
对百度页面右键检查
找到搜索框的id是kw
找到该元素,并填取相应的值
p_input = driver.find_element_by_id("kw") p_input.send_keys('知乎')
运行:
同样检查网页找到按钮百度一下的id,为su
点击该按钮
#点击搜索按钮 p_btn=driver.find_element_by_id('su') p_btn.click()
运行:
三.爬取指定网页http://quotes.toscrape.com/js/的名言
打开该网页,分析网页元素
可以看到名言的id为text
实现代码:
from bs4 import BeautifulSoup as bs from selenium import webdriver import csv from selenium.webdriver.chrome.options import Options from tqdm import tqdm#在电脑终端上显示进度,使代码可视化进度加快 from webdriver_manager.chrome import ChromeDriverManager driver = webdriver.Chrome(ChromeDriverManager().install()) driver.get('http://quotes.toscrape.com/js/') #定义csv表头 quote_head=['名言','作者'] #csv文件的路径和名字 quote_path='C:\\Users\\28205\\Documents\\Tencent Files\\2820535964\\FileRecv\\quote_csv.csv' #存放内容的列表 quote_content=[] ''' function_name:write_csv parameters: csv_head,csv_content,csv_path csv_head: the csv file head csv_content: the csv file content,the number of columns equal to length of csv_head csv_path: the csv file route ''' def write_csv(csv_head,csv_content,csv_path): with open(csv_path, 'w', newline='') as file: fileWriter =csv.writer(file) fileWriter.writerow(csv_head) fileWriter.writerows(csv_content) print('爬取信息成功') ### #可以用find_elements_by_class_name获取所有含这个元素的集合(列表也有可能) #然后把这个提取出来之后再用继续提取 quote=driver.find_elements_by_class_name("quote") #将要收集的信息放在quote_content里 for i in tqdm(range(len(quote))): quote_text=quote[i].find_element_by_class_name("text") quote_author=quote[i].find_element_by_class_name("author") temp=[] temp.append(quote_text.text) temp.append(quote_author.text) quote_content.append(temp) write_csv(quote_head,quote_content,quote_path)
运行结果:
查看爬取信息:
四.Selenium:requests+Selenum爬取京东图书
打开京东页面查看页面元素,分析需要爬取信息的标签id:
按钮没有写明id,就无法直接通过id获取
这里是价格,名称等的标签实现代码:
from selenium import webdriver import time import csv from tqdm import tqdm#在电脑终端上显示进度,使代码可视化进度加快 from webdriver_manager.chrome import ChromeDriverManager driver = webdriver.Chrome(ChromeDriverManager().install()) #加载页面 driver.get("https://www.jd.com/") time.sleep(3) #定义存放图书信息的列表 goods_info_list=[] #爬取200本 goods_num=200 #定义表头 goods_head=['价格','名字','链接'] #csv文件的路径和名字 goods_path='C:\\Users\\28205\\Documents\\Tencent Files\\2820535964\\FileRecv\\qinming.csv' #向输入框里输入Java p_input = driver.find_element_by_id("key") p_input.send_keys('法医秦明') #button好像不能根据类名直接获取,先获取大的div,再获取按钮 from_filed=driver.find_element_by_class_name('form') s_btn=from_filed.find_element_by_tag_name('button') s_btn.click()#实现点击 #获取商品价格、名称、链接 def get_prince_and_name(goods): #直接用css定位元素 #获取价格 goods_price=goods.find_element_by_css_selector('div.p-price') #获取元素 goods_name=goods.find_element_by_css_selector('div.p-name') #获取链接 goods_herf=goods.find_element_by_css_selector('div.p-img>a').get_property('href') return goods_price,goods_name,goods_herf def drop_down(web_driver): #将滚动条调整至页面底部 web_driver.execute_script('window.scrollTo(0, document.body.scrollHeight)') time.sleep(3) #获取爬取一页 def crawl_a_page(web_driver,goods_num): #获取图书列表 drop_down(web_driver) goods_list=web_driver.find_elements_by_css_selector('div#J_goodsList>ul>li') #获取一个图书的价格、名字、链接 for i in tqdm(range(len(goods_list))): goods_num-=1 goods_price,goods_name,goods_herf=get_prince_and_name(goods_list[i]) goods=[] goods.append(goods_price.text) goods.append(goods_name.text) goods.append(goods_herf) goods_info_list.append(goods) if goods_num==0: break return goods_num while goods_num!=0: goods_num=crawl_a_page(driver,goods_num) btn=driver.find_element_by_class_name('pn-next').click() time.sleep(1) write_csv(goods_head,goods_info_list,goods_path)
运行结果:
查看文件:
五.总结
通过本次实验,完成动态网页的信息爬取,和静态网页一样需要查看网页结构,找到元素id或者利用相关函数得到元素,然后将信息获取,存储。
六.参考链接
https://blog.csdn.net/weixin_40547993/article/details/100159125
https://zhuanlan.zhihu.com/p/331712873
-
《动态网页设计》实训报告4.doc
2020-04-22 19:03:05动态网页设计实训报告 4 实验项目VBScript基础数组 实验时间2010年 3月 16日 学生姓名 班级 成绩 学号 批阅教师 一实验内容 1将IIS的网页发布主目录设在D盘名为wwwroot利用DW新建一个动态站点站点的本地信息和测试... -
动态网页建设步骤及动态网页课程设计报告.doc
2020-09-14 16:02:51PAGE PAGE 79 动态网页制作基础 使用Dreamweaver 8创建动态网站时配置计算机的系统环境很重要需要安装并配置IIS服务设计Access数据库创建DSN以及定义数据库连接等通过本次课的学习应该掌握以下内容 1 配置服务器的... -
动态网页制作实验
2020-05-07 11:53:50文章目录动态网页制作实验一、 实验目的二、实验环境三、 实验内容动态网页实验(一)动态网页实验(二)四、原理实验步骤五、关键问题及解决方法六、实验结果七、实验体会附录:源代码(仅仅附上核心代码)1.1网页...文章目录
动态网页制作实验
一、 实验目的
- 熟悉 VS 2010 开发环境,学会使用 VS 构建网站基本结构
- 熟悉 HTML 服务器控件,特别是 FORM 表单服务器控件的设置
- 掌握表单处理方法
- 掌握服务器内置对象:Request、Response、Session等内置对象的使用
- 掌握ASP.NET日期时间类
- 掌握在 MSSQL 2008 创建数据库、数据表,并能使用 SQL 语句进行表操作熟悉 HTML 服务器控件,特别是 FORM 表单服务器控件的设置(SELECT、INSERT、UPDATE、DELETE)
- 掌握 ADO.NET 提供的连接式数据访问方式,了解非连接式数据访问方式
二、实验环境
Windows OS/VS 2010(C#)、SQL SERVER 2008
三、 实验内容
动态网页实验(一)
1、 通过 VS2010创建空ASP.NET网站。添加2个WEB窗体:login.aspx,myhome.aspx
2、 添加新项Visual C# Web窗体:login.aspx。
1) 设置窗体Title为:登录页
2) 在login.aspx中,使用工具箱->标准:添加3个Labl、2个TextBox、2个Button控件
3) 设置控件属性a) ID:Label1、Label2、Label3、txtUserName、txtPwd、btnLogin、btnReset
b) 设置Label标签的Text属性分别为:用户名、密码、请输入用户名
c) 设置Button按钮的Text属性分别为:登录、重写
图1.1 login窗体效果图 上图即login页面的效果图:添加了 3 个 Label、2 个 TextBox、2 个Button 控件,分别为用户名、密码、提示输入的文字,和两个Button按钮控件,分别用来是现登录重定向到下面的myhome窗体功能和将输入的信息清除的功能。
2.4设置Button控件Click时间响应函数
BtnLogin的Click事件:
获取TextBox控件txtUserName、txtPwd的输入值(可通过对象的属性或者Request.form集合获取相应的变量与变量值)
检查txtUserName、txtPwd的值是否为合法用户,如:用户名为“张三”,密码为“1234”,如果是的话,则创建Session变量保存当前的登录用户名与密码,再重定向至myhome.aspx;否则的话,将Label3的Text属性设置为:请输入正确的用户名与密码!
图1.2 用户名和密码正确重定位到myhome窗体 图1.3 检查用户名或者密码不正确返回提示 上两个图是利用当前的登录用户名与密码进行判断,若正确,重定向至 myhome.aspx;否则的话,将 Label3 的 Text 属性设置为:请输入正确的用户名与密码!
BtnReset的Click事件:将TextBox控件txtUserName、txtPwd清空。
添加新项Visual C# Web窗体:myhome.aspx。
1、 设置窗体Title为:我的空间
2、 在myhome.aspx中,使用工具箱->标准:添加3个Label,1个Button。
3、设置控件属性:
ID:Label1、Label2、Label3,btnLogout
设置 3 个 Label 标签的 Text 属性分别为:欢迎您来到您的空间!
设置 Button 的 Text 属性为:退出。
图1.4 密码的属性设置为不回显 4、在myhome.aspx.cs的Page_Load响应函数中:
通过 Session 变量,验证当前用户是否已登录,如未登录则重定向至login.aspx。
设置 Label2.Text 值为:当前用户名和密码,即 Session 中保存的用户名和密码
设置 Label3.Text 值为:输出当前系统时间。图1.5 显示用户名、密码和时间 5、设置btnLogout的Click响应函数
退出当前 Session;
重定向到 login.aspx 窗体。动态网页实验(二)
使用实验二.pdf 文档,通过 VS2010 创建简单的用户名/密码验证页面。(此处不赘
述)。2、SQL Server2008 库/表。
1)启动 SQL Server2008 的 SQL Server Management Stuido,附加 NetSchool 数据库
(NetSchool_Data.MDF/NetSchool_Log.LDF),查看其中的 STUDENT/STUDENT_CLAS 表。
请通过查询,尝试相关 SQL 语句(Select、Insert、Update、Delete)并掌握。图2.1 SQL语句的使用 2)创建数据库连接字符串,通过在 VS2010 中的服务器资源管理器中,添加数据库连接,
得到该数据库连接的 ConnectionString。【其中 SQL Server 身份认证为:sa/123456】
图2.2 SQL数据库链接 由于是在自己的计算机上做的,所以参数有些不同。
SqlConnection conn; conn = new SqlConnection("Data Source=(local);Initial Catalog=NetSchool;Integrated Security=True"); string str1 = @"SELECT * FROM [NetSchool].[dbo].[STUDENT] where USERID='" + strU + @"' and PASSWORD ='" + strP + "'"; cmd = new SqlCommand(str1, conn);
3)请根据第七章的 ADO.NET 中的面向连接访问方式,在 login.aspx 的 btnLogin 的 Click
事件中修改代码,使得原先的静态用户名/密码验证为,数据库 Netschool 中 Student 表
中已有的用户才能够登录。3.1 静态用户名/密码验证代码(此次实验需要重新修改):
3.2 动态验证。支持当前 STUDENT 表中的所有用户能够登录当前系统。
图 2 连接式访问数据库程序框架3.2.1 添加数据库托管程序支持:using System.Data.SqlClient;
3.2.2 根据图2 所示步骤,重写撰写 protected void btnLogin_Click(object
sender, EventArgs e) { }响应函数。3.2.3 其中判定是否有该登录用户名/密码,可利用 DataReader 对象的 READ 方法
或者 HasRows 属性,作为判断依据。4.在 myhome.aspx 页面中添加 ListBox 控件、Button 控件。
4.1 修改 Button 控件:ID 为:btnSeachMyclass。Text 属性:查询
4.2 修改 ListBox 控件:ID 为:ListBMyClass。在 Page_Load 中,通过程序对其初
始化,添加一个 Item 项目“我所选修的课程”。4.3 在对应的 btnSeachMyclass_Click(){ }函数中进行 Code,是的点击该按钮
后,将当前登录用户的所有选修课程的 ClassID 以 Item 的方式显示在 ListBox 控件中。
注意:login.aspx 中用户名输入,请输入 STUDENT 表中的 USERID 值。
图2.3 myhome页框展示 图2.4 所选修的课程显示 四、原理实验步骤
原理:
1、通过服务器控件获取用户输入后,合法用户则创建相应的Session变量,并进行合适的网页重定向。同时熟悉DateTime类。
2、通过服务器控件获取用户输入后,合法用户则创建相应的 Session 变量,并进行合适的网页重定向,并在 myHome.aspx 网页中显示相应的个人相关记录。其中:合法用户的判断规则:未使用数据库/表时,启用静态用户名/口令验证原则: 未使用数据库/表时,启用静态用户名/口令验证原则:否则,通过查询 MySite 数据库中 Users 表中是否有该用户/密码,为准。实验步骤:见实验内容。
五、关键问题及解决方法
1、对于用户名和密码的显示需要跨页面传递数据,解决办法是利用Session进行跨页面的数据传递进行记录,
Session["S_uname"] = txtUserName.Text; Session["S_upwd"] = txtPwd.Text; Label2.Text = "当前用户为:" + Session["S_uname"].ToString() + "密码为:" + Session["S_upwd"].ToString(); Label3.Text = "当前时间为:" + System.DateTime.Now.ToString();
2、控件的操作很繁琐
解决办法是为每个空间配置相应的属性如ID和动作如Clicked等都很繁琐,还好VS的集成性很好,可以利用拆分的双视图进行编辑。
3、数据库的操作很繁琐
解决办法是可以在视图界面进行配置,包括控件的各种属性也是如此。在操作数据库的过程中,出现了很多的问题,由于对SQL SERVE数据库不熟悉,所以在处理解决问题上很费力,但还是没有很好的方法解决,通过查阅资料,向同学了解之后才能勉强做。六、实验结果
最终我按照要求,利用VS,编写出了一个简单的动态网页,包括两个2 个 WEB 窗体:login.aspx,myhome.aspx。利用各种控件,实现了登录页面的验证与重定向,对于信息的记录显示与时间的展示以及退出函数的实现。还使用数据库进行了用户合法性的判断,还读取数据库中的数据到ListBox中显示给用户查询,效果如前面各个图片。
七、实验体会
通过本次实验,使得我对于网络程序设计有了更深的认识,也印证了我们在课堂上学习的内容,熟悉 了HTML 服务器控件,特别是 FORM 表单服务器控件的设置。印证了我们在课堂上学习的关于数据库的内容,熟悉了对于数据库的连接和对其中数据库数据的操作,熟悉了ListBox控件,通过对数据库数据来动态验证用户的合法性,更具有实用性。本次实验还使我对于VS的使用也有了很大的进步。
通过这次实验,我懂得了理论与实际相结合是很重要的,只有理论是远远不够的,只有把所学的理论知识与实践相结合起来,从理论知识与实践相结合,从理论中得出结论,才是真正的知识,才能提高自己的事迹动手能力和独立思考的能力。附录:源代码(仅仅附上核心代码)
1.1网页login.aspx.cs或其他
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data.SqlClient; public partial class login : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void btnLogin_Click(object sender, EventArgs e) { string strU = txtUserName.Text; string strP = txtPwd.Text; SqlConnection conn;//定义一个连接对象 SqlCommand cmd;//定义一个命令对象 SqlDataReader rd;//定义一个读取数据对象 conn = new SqlConnection("Data Source=(local);Initial Catalog=NetSchool;Integrated Security=True"); conn.Open(); string str1 = @"SELECT * FROM [NetSchool].[dbo].[STUDENT] where USERID='" + strU + @"' and PASSWORD ='" + strP + "'";//此为SQL操作字符串 cmd = new SqlCommand(str1, conn); rd = cmd.ExecuteReader();//执行查询操作 if (rd.HasRows) { Session["S_uname"] = txtUserName.Text; Session["S_upwd"] = txtPwd.Text; rd.Close(); conn.Close(); Response.Redirect("myhome.aspx"); } else { Label3.Text = "请输入正确用户名和密码"; } } protected void btnReset_Click(object sender, EventArgs e) { txtUserName.Text = null; txtPwd.Text = null; } }
2.1网页myhome.aspx.cs或其他
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data.SqlClient; public partial class myhome : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (Session["S_uname"] == null)//防止直接进入myhome窗体 { Response.Redirect("login.aspx"); } Label2.Text = "当前用户为:" + Session["S_uname"].ToString() + "密码为:" + Session["S_upwd"].ToString(); Label3.Text = "当前时间为:" + System.DateTime.Now.ToString(); ListBMyClass.Items.Clear(); ListBMyClass.Items.Add("我所需选修的课程");//在下拉列表中新增一项 } protected void btnSeachMyclass_Click(object sender, EventArgs e) { SqlConnection conn; SqlCommand cmd; SqlDataReader rd; conn = new SqlConnection("Data Source=(local);Initial Catalog=NetSchool;Integrated Security=True"); conn.Open(); string str1 = @"SELECT * FROM STUDENT_CLASS where USERID='" + Session["s_name"].ToString() + "'"; cmd = new SqlCommand(str1, conn); rd = cmd.ExecuteReader(); while (rd.Read())//常见的使用方法:循环调用SqlDataReader对象的read方法来遍历所有行 { ListBMyClass.Items.Add(rd["CLASSID"].ToString()); // ListBMyClass.Items.Add(new ListItem(rd["CLASSID"].ToString(), rd["CLASSID"].ToString())); } rd.Close(); conn.Close(); } protected void Button1_Click(object sender, EventArgs e) { } protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e) { } protected void btnLogout_Click(object sender, EventArgs e) { Response.Redirect("myhome.aspx"); } }
2.3 数据库生成SQL语句[包括建库、建表语句;记录不需要]
Login.窗体中:
SqlConnection conn;//定义一个连接对象 SqlCommand cmd;//定义一个命令对象 SqlDataReader rd;//定义一个读取数据对象 conn = new SqlConnection("Data Source=(local);Initial Catalog=NetSchool;Integrated Security=True"); conn.Open(); string str1 = @"SELECT * FROM [NetSchool].[dbo].[STUDENT] where USERID='" + strU + @"' and PASSWORD ='" + strP + "'";//此为SQL操作字符串 cmd = new SqlCommand(str1, conn); rd = cmd.ExecuteReader();//执行查询操作 myhome窗体中: SqlConnection conn; SqlCommand cmd; SqlDataReader rd; conn = new SqlConnection("Data Source=(local);Initial Catalog=NetSchool;Integrated Security=True"); conn.Open(); string str1 = @"SELECT * FROM STUDENT_CLASS where USERID='" + Session["s_name"].ToString() + "'"; cmd = new SqlCommand(str1, conn); rd = cmd.ExecuteReader();
-
动态网页建设教学大纲.docx
2022-06-21 04:49:33动态网页建设教学大纲.docx动态网页建设教学大纲.docx动态网页建设教学大纲.docx动态网页建设教学大纲.docx动态网页建设教学大纲.docx动态网页建设教学大纲.docx动态网页建设教学大纲.docx动态网页建设教学大纲.docx... -
动态网页的信息爬取
2021-12-15 16:46:59一、Selenium介绍 Selenium是一系列基于Web的自动化工具,提供一套测试函数,用于支持Web自动化测试。函数非常灵活,能够完成...element_by_id('su') p_btn.click() 四、爬取一个动态网页的数据 这是要爬取的网站链接 ...一、Selenium介绍
Selenium是一系列基于Web的自动化工具,提供一套测试函数,用于支持Web自动化测试。函数非常灵活,能够完成界面元素定位、窗口跳转、结果比较。具有如下特点:
1.多浏览器支持
可以对多浏览器进行测试,如IE、Firefox、Safari、Chrome、Android手机浏览器等。
2.支持多种语言
如Java、C#、Python、Ruby、PHP等。
3.支持多种操作系统
如Windows、Linux、IOS、Android等。二、配置环境
安装依赖
pip install selenium
然后官网下载驱动,用的什么浏览器下载对应的驱动
打开命令行输入jupyter notebook输入以下代码查看是否配置成功from selenium import webdriver driver = webdriver.Chrome(executable_path=r'chromedriver.exe') driver.get("https://www.baidu.com/")
成功的话会弹出chrome并打开百度
三、自动填充百度网页的查询关键字并完成自动搜索
使用开发者工具,查看代码,定位搜索框的id,右键搜索框,点击检查,就可以看到搜索框的id
使用ID找到这个元素from selenium import webdriver # 打开一个Chrome浏览器,executable_path是Chrome浏览器驱动的路径 driver = webdriver.Chrome(executable_path=r'chromedriver.exe') driver.get("https://www.baidu.com/") p_input=driver.find_element_by_id('kw') print(p_input) print(p_input.location) print(p_input.size) print(p_input.send_keys('aaa')) print(p_input.text)
定位百度一下ID,用它完成自动搜索
p_btn = driver.find_element_by_id('su') p_btn.click()
四、爬取一个动态网页的数据
这是要爬取的网站链接 http://quotes.toscrape.com/js/
import time import csv from bs4 import BeautifulSoup as bs from selenium import webdriver driver = webdriver.Chrome(executable_path=r'chromedriver.exe') # 名言所在网站 driver.get("http://quotes.toscrape.com/js/") # 所有数据 subjects = [] # 单个数据 subject=[] #定义csv表头 quote_head=['名言','作者','标签'] #csv文件的路径和名字 quote_path='名人名言.csv' #存放内容的列表 def write_csv(csv_head,csv_content,csv_path): with open(csv_path, 'w', newline='',encoding='utf-8') as file: fileWriter =csv.writer(file) fileWriter.writerow(csv_head) fileWriter.writerows(csv_content) n = 10 for i in range(0, n): driver.find_elements_by_class_name("quote") res_list=driver.find_elements_by_class_name("quote") # 分离出需要的内容 for tmp in res_list: saying = tmp.find_element_by_class_name("text").text author =tmp.find_element_by_class_name("author").text tags =tmp.find_element_by_class_name("tags").text subject=[] subject.append(saying) subject.append(author) subject.append(tags) print(subject) subjects.append(subject) subject=[] write_csv(quote_head,subjects,quote_path) print('成功爬取第' + str(i + 1) + '页') if i == n-1: break driver.find_elements_by_css_selector('[aria-hidden]')[-1].click() time.sleep(2) driver.close()
结果
五、爬取京东网站上的感兴趣书籍信息
1.查看网站首页,输入框id和搜索按钮,跟查百度的id一样
2.查看要爬取的书籍相关信息,右击书本,就能发现该书本信息了
3.代码import time import csv from bs4 import BeautifulSoup as bs from selenium import webdriver from selenium.webdriver.common.keys import Keys import time from lxml import etree driver = webdriver.Chrome(executable_path=r'chromedriver.exe') # 京东所在网站 driver.get("https://www.jd.com/") p_input = driver.find_element_by_id('key')# 找到输入框输入 p_input.send_keys('三体') # 输入需要查找的关键字 time.sleep(1) button=driver.find_element_by_class_name("button").click()# 点击搜素按钮 time.sleep(1) all_book_info = [] num=200 head=['书名', '价格', '书店名'] #csv文件的路径和名字 path='网络爬虫书本.csv' def write_csv(head,all_book_info,path): with open(path, 'w', newline='',encoding='utf-8') as file: fileWriter =csv.writer(file) fileWriter.writerow(head) fileWriter.writerows(all_book_info) # 爬取一页 def get_onePage_info(web,num): driver.execute_script('window.scrollTo(0, document.body.scrollHeight);') time.sleep(2) page_text =driver.page_source # with open('3-.html', 'w', encoding='utf-8')as fp: # fp.write(page_text) # 进行解析 tree = etree.HTML(page_text) li_list = tree.xpath('//li[contains(@class,"gl-item")]') for li in li_list: num=num-1 book_infos = [] book_name = ''.join(li.xpath('.//div[@class="p-name"]/a/em/text()')) # 书名 book_infos.append(book_name) price = '¥' + li.xpath('.//div[@class="p-price"]/strong/i/text()')[0] # 价格 book_infos.append(price) store_span = li.xpath('.//div[@class="p-shopnum"]/a/text()') # 书店名 # if len(store_span) > 0: # store = store_span[0] # else: # store = '无' book_infos.append(store_span) all_book_info.append(book_infos) if num==0: break return num while num!=0: num=get_onePage_info(driver,num) driver.find_element_by_class_name('pn-next').click() # 点击下一页 time.sleep(2) write_csv(head,all_book_info,path) driver.close()
-
简单易操作Jsp动态网页
2021-12-09 14:57:481、什么是jsp动态网页 所谓的动态网页,是指跟静态网页相对的一种网页编程技术。 静态网页,随着html代码的生成,页面的内容和显示效果就基本上不会发生变化了——除非你修改html页面代码。而动态网页则不然,... -
PHP+MySQL网站开发技术(拓展) 2 PHP编程基础 PHP动态网页基础试题-099.pptx
2020-09-10 08:15:57定义两个变量n1和n2其值分别是174和20分别列出其加减乘除的结果PHP+MySQL网站开发技术扩展_雷军PHP动态网页基础试题2.已知正方形铁框的边长是96厘米求周长与面积保留两位小数PHP+MySQL网站开发技术扩展_雷军PHP动态... -
PHP+MySQL网站开发技术(拓展) 2 PHP编程基础 PHP动态网页基础试题-006.pptx
2020-09-10 07:52:25定义两个变量a和b ,其值分别是110和48求a除以b的余数PHP+MySQL网站开发技术扩展_雷军PHP动态网页基础试题2.已知正方形铁框的边长是84厘米求周长与面积保留两位小数PHP+MySQL网站开发技术扩展_雷军PHP动态网页基础... -
PHP+MySQL网站开发技术(拓展) 2 PHP编程基础 PHP动态网页基础试题-136.pptx
2020-09-10 08:25:41定义两个变量n1和n2其值分别是127和24分别列出其加减乘除的结果PHP+MySQL网站开发技术扩展_雷军PHP动态网页基础试题2.已知正方形铁框的边长是91厘米求周长与面积保留两位小数PHP+MySQL网站开发技术扩展_雷军PHP动态... -
PHP+MySQL网站开发技术(拓展) 2 PHP编程基础 PHP动态网页基础试题-192.pptx
2020-09-10 08:39:30定义两个变量n1和n2其值分别是125和18分别列出其加减乘除的结果PHP+MySQL网站开发技术扩展_雷军PHP动态网页基础试题2.已知圆锥的高为9底半径为5求体积保留两位小数体积等于三分之一底面积乘以高PHP+MySQL网站开发... -
前端动态网页技术JS(JavaScript)
2021-11-11 20:07:25静态网页和动态网页 动态网页 网页是如何和后端交互的呢? JS概述 什么是JS 名词解释 特点和优势 入门案例 HTML中引入JS 通过script标签引入JS代码 通过script标签引入外部的JS文件 JS语法 注释 基本... -
df_config:为基于Django的网站定义智能默认设置,并合并多个设置源
2021-04-19 14:10:22df_config Django是有期限的完美主义者的Web框架,它基于在环境变量中定义的单个设置Python模块。 但是,这些设置可以分为三... df_config允许使用将某些其他设置用作参数来动态定义设置的函数。 相反,df_config动态 -
JSP Dreamweaver CS4 CSS Ajax动态网站开发典型案例.rar
2019-07-09 18:10:44Dreamweaver是组建网站和设计网页的专业工具,以“所见即所得”的特点,使不同层次的用户都可以快速创建网页。Dreamweaver的每一次版本更新都会带来很多新功能和新特性。在Dreamweaver CS3基础上,Adobe公司又发布了... -
动态网页 —— 逆向分析法 + 案例
2021-05-10 17:01:37动态网页是基本的html语法规范与Python、Java、C#等高级程序设计语言、数据库编程等多种技术的融合,以期实现对网站内容和风格的高效、动态和交互式的管理。因此,从这个意义上来讲,凡是结合了HTML以外的高级程序... -
Python动态网页爬取
2020-05-02 11:25:51前面所讲的都是对静态网页进行抓取,本...针对不同的动态网页爬取方法,将分别用具体实例进行介绍。本博客主要是直接利用Ajax来获取数据。 页面分析 本博客以MTime电影网为例,主要爬取电影的评分票房等信息。首... -
动态实现web网页登陆和注册功能[保姆级教学]
2021-12-17 10:13:45动态实现页面登陆和注册功能!!!! -
爬虫实战|使用scrapy框架爬取动态网页并保存
2021-12-11 14:22:04这次我们选择爬取 “当当” 官方网页,网址“www.dangdang.com”(你也可以选择别的网站) 接下来开始我们的一顿猛操作~ 一、新建项目和爬虫文件,构建scrapy框架(这里我们把项目名称命名为 “dangdang”) 1... -
动态网第1章 动态网站开发概述.ppt
2020-01-18 09:43:50认识动态网站 搭建虚拟服务器 定义本地站点 定义远程站点 1.1 认识动态网站 1客户端服务器端 2请求响应 动态网站的工作方式其实很简单但要使动态网站动起来其中还需要多种技术配合和支撑简单概括就是数据传输数据... -
PHP+Mysql+Dreamweaver网站开发与实践01 定义Dreamweaver站点.ppt
2020-05-22 16:29:51定义Dreamweaver站点 本讲大纲 1 定义本地文件夹 2 定义远程文件夹 3 指定动态页的位置 4 上传Web文件 定义Dreamweaver站点 在系统中安装了ApachePHP和MySQL之后接下来就可以使用Dreamweaver来配置开发环境了首先... -
Python轻松实现动态网页爬虫(附详细源码)!
2020-05-22 15:40:24AJAX动态加载网页 ...什么是动态网页 ...J哥一向注重理论与实践相结合,知其然也要知其所以然,才能以不变应万变。...所谓的动态网页,是指跟静态...动态网页具有减少工作量、内容更新快、可完成功能多等特点,被很... -
使用Eclipse编写动态网页
2019-05-15 16:52:30说明:可以用与定义成员变量或方法,供以后后面使用 语法:< ! 方 法 !方法 ! 方 法 > 注释 1.JSP注释:语法< − − − − -- -- − − − − > 注意:客户端不会显示 2.html注释:语法<!- - --> <!- -... -
动态网页搭建的实验报告
2019-04-03 09:45:542016-2017 学年 第 2 学期 实验报告 课程名称:嵌入式操作系统 ...(1)LAMP的定义 LAMP指的Linux(操作系统)、ApacheHTTP 服务器,MySQL(有时也指MariaDB,数据库软件)和PHP(有时也是指Perl或Python)的第一个...