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,asynctrue/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>")
%>
posted @ 2019-12-11 10:26  石斛  阅读(162)  评论(0编辑  收藏  举报