1.2、Answer:web crawler question 2
1.2、Answer:web crawler question 2
概述
2、Query库是基于JavaScript的第三方库,二、JavaScript是web客户端的脚本语言,难道jQuery是基于JavaScript语言编写的客户端的脚本语言的第三方库?python的第三方库和CSS选择器的关系?(关系库是:find、findAll、find_element_by_id)、Query库和AJAX技术的关系?如何实现部分网页信息而AJAX只需要加载一部分自己需求的网页数据?
jQuery产生的背景
Python执行JavaScript代码的效率非常低,既费时又费力,尤其是处理规模较大JavaScript代码时,如果有绕开JavaScript并直接解析它的方法(不需要执行JavaScript代码就可以获得信息)会非常实用,可以降低获取信息的难度。jQuery是一种JS框架。
一、jQuery
1、jQuery安装教程:https://www.runoob.com/jquery/jquery-install.html
2、jQuery库是一个基于JavaScript语言的JavaScript 文件
3、jQuery语法(XPath 与 CSS 选择器语法的组合):$(selector).action(),$定义 jQuery;选择符(selector)"查询"和"查找" HTML 元素;action() 执行对元素的操作
$(document).ready(function(){ $("p").click(function(){ $(this).hide(); }); });
注:1、$(document).ready(function(){.. .}:jQuery 函数位于一个 document ready 函数中是为了防止文档在完全加载之前运行 jQuery 代码(在 DOM 加载完成后才操作 DOM )
2、jQuery 的入口函数是在 html 所有标签(DOM)都加载之后,就会去执行;JavaScript 的 window.onload 事件是等到所有内容,包括外部图片之类的文件加载完后,才执行
4、jQuery库使用:通过HTML中标签调用jQuery:<script>. . .</script>
# jquery库文件在本地并且与网页组成的各个文件在同一目录 <head> <script src="jquery-1.10.2.min.js"></script> </head> # 调用CDN中的 jquery 库 <head> <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"> </script> </head>
二、jQuery结构体
1、
三、jQuery模块和功能
1、jQuery 选择器
# jQuery 选择器允许您对 HTML 元素组或单个元素进行操作 # 通过 HTML 元素的 id 属性选取指定的元素:$("#test") # 通过指定的 class 查找元素:$(".test") # 基于元素名选取元素:$("p")
2、jQuery 事件:页面对不同访问者的响应叫做事件,主要包含:鼠标事件、键盘事件、表单事件、文档/窗口
# jQuery事件 # 1、在元素上移动鼠标。 # 2、选取单选按钮 # 3、点击元素
2.1、鼠标单击事件:click(),鼠标双击事件:dblclick()当按钮点击事件被触发时会调用一个函数
$("p").click(function(){ $(this).hide(); });
$("p").dblclick(function(){ $(this).hide(); });
2.2、鼠标移动:1、当鼠标指针穿过元素时:mouseenter();2、当鼠标指针离开元素时:mouseleave();3、当鼠标指针移动到元素上方:mousedown();4、当在元素上松开鼠标按
钮时:mouseup();5、模拟光标悬停事件:hover();6、通过鼠标点击选中元素或通过 tab 键定位到元素时,该元素就会获得焦点:focus();7、该元素失去焦点时:blur()
# 当鼠标指针穿过元素时
$("#p1").mouseenter(function(){ alert('您的鼠标移到了 id="p1" 的元素上!'); }); # 当鼠标指针离开元素时 $("#p1").mouseleave(function(){ alert("再见,您的鼠标离开了该段落。"); }); # 当鼠标指针移动到元素上方 $("#p1").mousedown(function(){ alert("鼠标在该段落上按下!"); }); # 当在元素上松开鼠标按钮时 $("#p1").mouseup(function(){ alert("鼠标在段落上松开。"); }); # 模拟光标悬停事件 $("#p1").hover( function(){ alert("你进入了 p1!"); }, function(){ alert("拜拜! 现在你离开了 p1!"); } ); # 通过鼠标点击选中元素或通过 tab 键定位到元素时,该元素就会获得焦点 $("input").focus(function(){ $(this).css("background-color","#cccccc"); }); # 该元素失去焦点时 $("input").blur(function(){ $(this).css("background-color","#ffffff"); });
2.3、显示和隐藏元素:jQuery hide() 和 show();jQuery toggle()可以切换 hide() 和 show() 方法
语法: $(selector).hide(speed,callback)、$(selector).show(speed,callback)、$(selector).toggle(speed,callback)
$(document).ready(function(){ $(".hidebtn").click(function(){ $("div").hide(1000,"linear",function(){ alert("Hide() 方法已完成!"); }); }); }); $("button").click(function(){ $("p").toggle(); });
. . .
四、 AJAX(Asynchronous JavaScript and XML) 技术
1、AJAX 是与服务器交换数据的技术,在不重载全部页面的情况下,实现了对部分网页的更新。通过四种Ajax工具JQuery、JSON、DWR、Prototype分别实现页面与后台(类文件)的数据交互,从而使得在不刷新页面的情况下取得数据AJAX 的应用案例:谷歌地图、腾讯微博、优酷视频、人人网. . .
2、这个网页表单使用Ajax技术与web服务器通信
3、AJAX 技术创建的表单,并根据web服务器的响应创建动态性极强网页的过程
-
XMLHttpRequest 对象 (异步的与服务器交换数据);XMLHttpRequest对象和web服务器交互,在后台与服务器交换数据,从URL获取数据,而无需让整个的页面刷新。支持 HTTP 、 file:// 和 FTP等协议!
-
JavaScript/DOM (信息显示/交互)
-
CSS (给数据定义样式)
-
XML (作为转换数据的格式). . .
注意:1、AJAX与Flash、Silverlight和Java Applet等RIA技术是有区分的;2、AJAX应用程序与浏览器和平台无关的
4、AJAX 工作原理
5、AJAX 实例
<head> <script> function loadXMLDoc() { .... AJAX 脚本执行 ... } </script> </head>
6、XMLHttpRequest 对象向服务器发送请求: open() 和 send() 方法:
xmlhttp.open(method,url,async(true/false)); xmlhttp.send();
注:1、method:请求的类型;GET 或 POST比较
1、与 POST 相比,GET 更简单也更快,并且在大部分情况下都能用
2、然而,在以下情况中,请使用 POST 请求:
-
- 无法使用缓存文件(更新服务器上的文件或数据库)
- 向服务器发送大量数据(POST 没有数据量限制)
- 发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠
2、使用 HTML 表单形式 POST 数据:使用 setRequestHeader() 来添加 HTTP 头。然后在 send() 方法中规定您希望发送的数据
xmlhttp.open("POST","/try/ajax/demo_post2.php",true); xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); xmlhttp.send("fname=Henry&lname=Ford");
7、使用 async=true 时,规定在响应处于 onreadystatechange 事件中的就绪状态时执行的函数,每当 readyState 属性改变时,就会调用该函数
xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("myDiv").innerHTML=xmlhttp.responseText; } } xmlhttp.open("GET","/try/ajax/ajax_info.txt",true); xmlhttp.send();
注:1、当您使用 async=false 时,请不要编写 onreadystatechange 函数 - 把代码放到 send() 语句后面即可
2、readyState 属性存有 XMLHttpRequest 的状态信息,readyState 属性取值
-
- 0: 请求未初始化
- 1: 服务器连接已建立
- 2: 请求已接收
- 3: 请求处理中
- 4: 请求已完成,且响应已就绪
3、onreadystatechange 事件被触发 4 次(0 - 4), 分别是: 0-1、1-2、2-3、3-4,对应着 readyState 的每个变化
8、XMLHttpRequest 对象向服务器发送请求,web服务器响应
1、XMLHttpRequest 对象的 responseText 或 responseXML 属性处理不同格式web服务器响应
responseText属性:作为 XML 对象进行解析,适用于服务器的响应是 XML
xmlDoc=xmlhttp.responseXML; txt=""; x=xmlDoc.getElementsByTagName("ARTIST"); for (i=0;i<x.length;i++) { txt=txt + x[i].childNodes[0].nodeValue + "<br>"; } document.getElementById("myDiv").innerHTML=txt;
responseXML 属性:responseText 属性返回字符串形式的响应,适用于服务器的响应并非 XML
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
注:AJAX 可用来与数据库进行动态通信等
一、showCustomer() 函数
function showCustomer(str) { var xmlhttp; if (str=="") { document.getElementById("txtHint").innerHTML=""; return; } if (window.XMLHttpRequest) { // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码 xmlhttp=new XMLHttpRequest(); } else { // IE6, IE5 浏览器执行代码 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("txtHint").innerHTML=xmlhttp.responseText; } } xmlhttp.open("GET","/try/ajax/getcustomer.php?q="+str,true); xmlhttp.send(); }
二、服务器端:"getcustomer.php" 中的源代码负责对数据库进行查询,然后用 HTML 表格返回结果
<% response.expires=-1 sql="SELECT * FROM CUSTOMERS WHERE CUSTOMERID=" sql=sql & "'" & request.querystring("q") & "'" set conn=Server.CreateObject("ADODB.Connection") conn.Provider="Microsoft.Jet.OLEDB.4.0" conn.Open(Server.Mappath("/db/northwind.mdb")) set rs=Server.CreateObject("ADODB.recordset") rs.Open sql,conn response.write("<table>") do until rs.EOF for each x in rs.Fields response.write("<tr><td><b>" & x.name & "</b></td>") response.write("<td>" & x.value & "</td></tr>") next rs.MoveNext loop response.write("</table>") %>