zoukankan      html  css  js  c++  java
  • 1.3、Answer:web crawler question the rest

    1.3、Answer:web crawler question the rest

    概述

    3、python第三方库requests库包含的模块有哪些?==requests库的功能有哪些?requests库是实现这些功能独一无二的吗?如果不是,那requests库与其他库的优势和局限性?怎么将requests库根据自己的需求进行特性定制?

    4、浏览器、web客户端、web服务器端的关系和组成?这三者之间的交互式怎么实现的?涉及Ajax技术、html格式文本(动态HTML和静态HTML的区别和关系是什么?)、使用了哪些数据结构来抽象对象,文件管理系统的算法逻辑是怎么样?webdriver是web服务器的组成部分还是浏览器的组成部分亦或者是web客户端?

    5、web crawler会有哪些异常,如何处理这些异常?这些异常的产生于前面哪些疑问相关?网络、反crawler居多;而反crawler有涉及html、JavaScript、http等

    6、伪随机数和随机数种子如何产生?梅森旋转算法

    7、网页表单的组成?web服务器如何根据web客户端提交的网页表单信息对用户进行区别对待(people还是robot)?如何将robot隐藏成people?如何特性定制网页表单?有哪些python第三方库可以实现功能?

    8、API是什么?API和web三剑客的关系是如何(父子、朋友)?如何利用API?

    一、CSS(Cascading Style Sheets)层叠样式表

    1、web浏览器的CSS层实现的功能:添加背景、格式化文本、定义链接表现形式、定义列表、定义表格、格式化盒模型、格式化边框、定义轮廓、定义元素的填充和边距、CSS填充、CSS分组和嵌套、CSS尺寸、CSS显示、CSS定位、CSS浮动、CSS对齐元素、CSS生成的内容、CSS伪类、CSS伪元素、CSS导航栏 、CSS图片廊、CSS图像的不透明度、CSS图像拼合、CSS属性选择器

    2、CSS定义如何显示 HTML 元素,样式通常存储在样式表中,<style> 标签在文档头部定义内部样式表:、

    <head>
    <style>
    hr {color:sienna;}
    p {margin-left:20px;}
    body {background-image:url("images/back40.gif");}
    </style>
    </head>
    

    3、HTML 4.0 中添加样式表,解决了内容与表现分离的问题

    4、外部样式表可以极大提高工作效率,外部样式表通常存储在 CSS 文件(.css)中,文件不能包含任何的 html 标签,多个样式定义可层叠为一个

    hr {color:sienna;}
    p {margin-left:20px;}
    body {background-image:url("/images/back40.gif");}
    

    二、JSON(JavaScript Object Notation) 

    1、JSON是一种轻量级的数据传输格式,基本上所有的编程语言都支持JSON数据格式

    注1:JSON就是一串字符串 只不过元素会使用特定的符号标注

    • { } 双括号表示对象
    • [ ] 中括号表示数组
    • "" 双引号内是属性或值
    • : 冒号表示后者是前者的值(这个值可以是字符串、数字、也可以是另一个数组或对象)

    注2:JSON建构于两种结构:

    1. “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)
    2. 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)

    2、JSON具有以下这些形式:

    1.对象

    对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔

    注:如果键或值是字符串键或值都用双引号引起来,所以上面的代码就是{"name":"json"}

    2.数组

    数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。 

     

    值(value)可以是双引号括起来的:字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)这些结构可以嵌套。

     

    字符串(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。

    字符串(string)与C或者Java的字符串非常相似。

     

    数值(number)也与C或者Java的数值非常相似。除去未曾使用的八进制与十六进制格式。除去一些编码细节。

     

    3、使用范例及注意事项

    1、JSON要结合Ajax(异步请求)使用,在Java中有很多第三方工具能将一个Java的对象转换成JSON数据格式,比如阿里巴巴开发的fastjson

    2、使用范例

    一、将一个对象转换成JSON数据

    public void getEmpById(HttpServletRequest req, HttpServletResponse resp) {
    		//取得业务层实现类对象
    		IEmpService service = new EmpServiceImpl();
    		//取得要查询的雇员的编号
    		Integer empno = Integer.parseInt(req.getParameter("id"));
    		//将查询到的数据对象转换成JSON数据
    		String json = JSON.toJSONString(service.findEmpById(empno));
    		//将JSON数据直接输出给客户端(而不是将数据保存到request内置对象,跳转到JSP,使用EL表达式输出)
    		PrintWriter out = null;
    		try {
    			
    			out = resp.getWriter();
    			out.print(json);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		out.close();
    	}
    

    二、将一个list集合转换成JSON数据

    @Override
    	public Map<String, Object> findAllSplit(String kw, Integer cp, Integer ls) {
    		Map<String, Object> map = new HashMap<String, Object>();
    		try {
    			/*将list集合中的雇员按照职位进行分组,以键值对的形式保存到map集合中,
    				key是职位名称,value是该职位下所有雇员的List集合 */
    			List<Emp> list = this.empDAO.selectSplitAll(kw, cp, ls);
    			//调用分组的方法
    			//this.groupByJob(list, map);
    			map.put("list", list);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}finally {
    			C3P0Util.close(conn);
    		}
    		return map;
    	}
    
        public void getEmpList(HttpServletRequest req, HttpServletResponse resp) {
            IEmpService service = new EmpServiceImpl();
            PrintWriter out = null;
            try {
                out=resp.getWriter();
                //将list集合转换成JSON输出
                out.println(JSON.toJSONString(service.findAllSplit("", 1, 100).get("list")));
                out.close();
            } catch (Exception e) {
                e.printStackTrace();
            } 
        }
    

     三、将map数据转换成JSON数据

    	@Override
    	public Map<String, Object> findAllSplit(String kw, Integer cp, Integer ls) {
    		Map<String, Object> map = new HashMap<String, Object>();
    		try {
    			/*将list集合中的雇员按照职位进行分组,以键值对的形式保存到map集合中,
    				key是职位名称,value是该职位下所有雇员的List集合 */
    			List<Emp> list = this.empDAO.selectSplitAll(kw, cp, ls);
    			//调用分组的方法
    			this.groupByJob(list, map);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}finally {
    			C3P0Util.close(conn);
    		}
    		return map;
    	}
    
            public void getEmpList(HttpServletRequest req, HttpServletResponse resp) {
    		IEmpService service = new EmpServiceImpl();
    		PrintWriter out = null;
    		try {
    			out=resp.getWriter();
    			//将list集合转换成JSON输出
    			out.println(JSON.toJSONString(service.findAllSplit("", 1, 100)));
    			out.close();
    		} catch (Exception e) {
    			e.printStackTrace();
    		} 
    	}
    

    三、API(application programming interface)

    1、API也是通过requests请求和服务器端的response来完成API的一次调用的。API 通常返回的是 JSON 格式或 XML 格式的数据

    2、API通用规则

    2.1、API利用HTTP 从网络服务获取信息有四种方式:GET、POST、PUT、DELETE

    注:1、PUT 在网站交互过程中不常用,但是在API 里面有时会用到,PUT 请求用来更新一个对象或信息

      2、API 不需要验证操作(就是说任何人都可以使用API,不需要注册)

      3、API 要求验证操作:1、计算API 调用的费用或者是提供了包月的服务,2、“限制”用户使用API(限制每秒钟、每小时或每天API 调用的次数),3、或者是限  制一部分用户

      4、API 验证的方法都是用类似令牌(token)的方式调用,每次API 调用都会把通过URL链接或者请求头里的cookie将令牌传递到服务器上。这种令牌可能是用  户注册的时候分配给用户,也可能是在用户调用的时候才提供。token可能是长期固定的值后者频繁变化的,通过服务器对用户名和密码的组合处理后生成

     3、Python中通过json库的loads()函数可以把json格式的字符串转换为python对象

    import requests
    import json
    
    
    par={'address':'北京','key':'cb649a25c1f81c1451adbeca73623251'}
    r=requests.get('http://restapi.amap.com/v3/geocode/geo',par)
    r.text
    
    '{"status":"1","info":"OK","infocode":"10000",
      "count":"1","geocodes":[{"formatted_address":"北京市",
      "country":"中国","province":"北京市","citycode":"010","city":"北京市",
      "district":[],"township":[],"neighborhood":{"name":[],"type":[]},
      "building":{"name":[],"type":[]},"adcode":"110000","street":[],"number":[],
      "location":"116.407526,39.904030","level":"省"}]}'
    
    json_data=json.loads(r.text)        #转换为python对象
    json_data
    
    {'status': '1', 'info': 'OK', 'infocode': '10000', 
    'count': '1', 'geocodes': [{'formatted_address': '北京市', 
    'country': '中国', 'province': '北京市', 'citycode': '010', 'city': '北京市', 
    'district': [], 'township': [], 'neighborhood': {'name': [], 'type': []}, 
    'building': {'name': [], 'type': []}, 'adcode': '110000', 'street': [],
     'number': [], 'location': '116.407526,39.904030', 'level': '省'}]}
    
    # 取北京市的经纬度如下
    
    # json_data['geocodes'][0]['location']
    
    # '116.407526,39.904030'
    

    四、html5-网页表单

    1、表单:前后台交互的入口;用户通过表单数据传送给后台,后台再把数据交给数据库

    2、<form> 元素 :<form . . . > <br> </form>,定义 HTML 表单

    <form name="" method="" action="" enctype="">
    表单项、文字、图片等
    </form>
    
    • 1、name属性:表单的名称
    • 1、action(后台接口地址):URL,指定接纳表单数据的 JSP 页面或者Servlet,如果该属性为空则提交给当前页面
    • 2、method(请求方式):GET、POST
    • 3、enctype (编码方式):‘application/x-www-form-urlencoded’-浏览器就会将参数转换为【查询字符串 qs】格式(默认),'multipart/form-data':当有附件在表单中的时候,enctype需要设置为这种格式
    • 4、表单元素指的是不同类型的 input 元素、复选框、单选按钮、提交按钮等

    3、<input> 元素:< input type=“text” >,

    • 3.1、type
    • text 单行文本框
      • password            密码框
      • submit                 提交按钮
      • file                       附件选择器
      • radio                    单选按钮
      • checkbox             复选按钮
      • hidden                 隐藏元素
      • reset                    重置按钮,重设表单内容   
    • 3.2、name 不能省略 作为参数中的key,如果要正确地被提交,每个输入字段必须设置一个 name 属性
    • 3.3、value 作为参数中的 value 在按钮中必须指定value的值
    • 3.4、checked 默认选项
    • 3.5、placeholder 提示语

    4、select属性:一般与option同时出现,标签中的文本显示在网页中,提交的值应该是option的value值,当这个值没有设定的时候,提交的是标签中的文本

    <select name="cars">
    <option value="volvo">Volvo</option>
    <option value="saab">Saab</option>
    <option value="fiat">Fiat</option>
    <option value="audi">Audi</option>
    </select>
    

     5、实例

    <form action="action_page.php">
    First name:<br>
    <input type="text" name="firstname" value="Mickey">
    <br>
    Last name:<br>
    <input type="text" name="lastname" value="Mouse">
    <br><br>
    <input type="submit" value="Submit">
    </form> 
    

    6、<fieldset> 元素<fieldset> 元素组合表单中的相关数据;<legend> 元素为 <fieldset> 元素定义标题

    <form action="action_page.php">
    <fieldset>
    <legend>Personal information:</legend>
    First name:<br>
    <input type="text" name="firstname" value="Mickey">
    <br>
    Last name:<br>
    <input type="text" name="lastname" value="Mouse">
    <br><br>
    <input type="submit" value="Submit"></fieldset>
    </form> 
    

    7、<textarea> 元素:定义多行输入字段(文本域

    <textarea name="message" rows="10" cols="30">
    The cat was playing in the garden.
    </textarea>
    

    8、<button> 元素<button> 元素定义可点击的按钮

    <button type="button" onclick="alert('Hello World!')">Click Me!</button>
    

    . . .

     
    
    
  • 相关阅读:
    1.2 偏差与方差
    深度学习中Xavier初始化
    1.1 训练/开发/测试集
    Python笔记(5)类__方法与继承
    Python笔记(4)类__属性与描述符
    Python笔记(3)迭代器与生成器
    Python笔记(2)函数
    线性回归 Linear Regression
    Python笔记(1)变量与表达式
    跳转到某个Activity
  • 原文地址:https://www.cnblogs.com/yinminbo/p/12026874.html
Copyright © 2011-2022 走看看