0812下午爬虫 0817 辅助框架

辅助框架
json

jsonObject
jsonArray

  • jackson
**jackson**
ObjectMapper ObjectMapper = new ObjectMapper();
	Object o = ObjectMapper.readValue(str, Class); //json转object
	String s = ObjectMapper.writeValueAsString(Object); //object转json
**jsonnode 可表示object,array**
JsonNode rootNode = ObjectMapper.readTree(str); //json转节点
	JsonNode Node = rootNode.get("datas"); //按名称取节点
		Node = Node.get(1); //数组取节点
		System.out.println(Node.asText()); //取值
	ObjectMapper.writeValueAsString(Node); //将jsonnode转json
  • gson:gson 2.8jar;

    public static void main(String[] args) {
    		String str = "{\"id\":22,\"name\":\"ocean\"}";
    		Type o = new Gson().fromJson(str, Type.class);
    		System.out.println(o.getName());
    		System.out.println(new Gson().toJson(o));
    	}
    
    
调试 Junit
  • 引入

     <dependency>
     	<groupId>junit</groupId>
     	<artifactId>junit</artifactId>
     	<version>4.11</version>
     </dependency>
    
  • 使用:不能有返回值及参数

     public class test1 {
     	@Test
     	public void exe() {          不能有返回值及参数
     		System.out.println(1222);
     	}
     }
    
  • 断言
    批量方法测试,验证结果是否成功TestCase.assertEquals(1>0, 100<0);

  • 类单元测试
    创建Junit/Junit test cast
    under test 选择要测试的类
    next 选择测试的方法

  • 注解

    1. @Before @After 每个测试方法执行时,都运行
    2. @BeforeClass @AfterClass 只能注解Static方法,执行一次
    3. @RunWith 运行期,框架环境测试
    4. @Ignore 方法排除
    5. @Test
日志 log4j(sel4j)
  • 相当于system.out.priintln(),可以分类输出到文件

  • 7级信息输出

    1. DEBUG:输出调试信息;指出细粒度信息事件对调试应用程序是非常有帮助的。
    2. INFO: 输出提示信息;消息在粗粒度级别上突出强调应用程序的运行过程。
    3. WARN: 输出警告信息;表明会出现潜在错误的情形。
    4. ERROR:输出错误信息;指出虽然发生错误事件,但仍然不影响系统的继续运行。
    5. FATAL: 输出致命错误;指出每个严重的错误事件将会导致应用程序的退出。
    6. ALL level:打开所有日志记录开关;是最低等级的,用于打开所有日志记录。
    7. OFF level:关闭所有日志记录开关;是最高等级的,用于关闭所有日志记录
  • Appender

    1. org.apache.log4j.ConsoleAppender(控制台)
    2. org.apache.log4j.FileAppender(文件)
    3. org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
    4. org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
    5. org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
  • layout

    1. org.apache.log4j.HTMLLayout(以HTML表格形式布局)
    2. org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
    3. org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
    4. org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
  • 定义

      Logger log = Logger.getLogger("wjx");       指定名称
      Logger log = Logger.getLogger(aaa.class);   获取当前类名称
    
  • 使用 log.debug(""); 方法名是信息登记名称

  • System.setOut(new PrintStream(new File("c:a.log")));

xml dom4j
Document doc =DocumentHelper.createDocument();
  	Element root=doc.addElement("aaaa");
//add()   节点,属性,备注,文本(接口  ctrl+t 实现类)
Element el1=new DefaultElement("bbbb");
  	el1.add(new DefaultAttribute("asd", "egg记得给人家"));
  	root.add(new DefaultText("dddddddddddddd"));
 	 root.add(el1);
XMLWriter writer =new XMLWriter( new FileOutputStream("c:/a.xml"),
         	 		OutputFormat.createPrettyPrint());
  	writer.write(doc);
  	writer.close();
读取:
File file = new File("E:\\testData.xml");
       	 SAXReader reader=new SAXReader(); 
              Document doc=reader.read(file);  //读取xml文件到Document中
       	 Element rootElement=doc.getRootElement();//获取xml文件的根节点
MAVEN项目构建框架:自动导入依赖jar包
  • pom 项目对象模板 pom加入加入编译路径

  • 仓库

    1. 公共仓库 官方
    2. 私人库 user/…/.m2/respository 文件夹
    3. 私服 公司库
  • 查找 百度 maven resposiitoty https://mvnrepository.com/

  • 目录结构

     main  主目录
     	 java  源码
     	 resource  配置文件,最终到编译路径
     	 webapp  站点
     test 单元测试目录
     	 java  测试源码
     target  目标文件/自动生成
    
  • 打包方式

    1. war 网站发布文件

    2. jar 包

    3. pom 父项目打包

    4. test 测试和编译时候可用

    5. provided 所有阶段 无传递

    6. runtime 运行和测试

    7. system 一般不用

    8. compile 所有阶段可用

  • 命令(maven +空格+12345)

    1. builder 编译 重置target文件夹
    2. clean 清理缓存,最好经常使用
    3. install 加入到本地仓库,打包为jar
    4. package 生成war文件
    5. deploy 发布到远程仓库
layui前端框架
  • 功能:css样式,js组件管理(ajax数据更新)

  • table数据表格

    1. 换页查询 url,cols

       <table id="demo" lay-filter="test"></table>
       layui.use('table', function(){
         var table = layui.table;
       table.render({
      elem: '#demo'
       ,height: 312
       ,url: 'Book/index' //数据接口
       ,page: true //开启分页
       ,cols: [[ //表头
        {field: 'id', title: 'ID', width:80, sort: true, fixed: 'right'}
       ,{field: 'name', title: '用户名', width:280}
      
    2. java数据接收

       StringBuilder s = new StringBuilder("{\"code\": 0,\r\n" + 
       "  \"msg\": \"\",\r\n" + 
       "  \"count\": 1000,\"rows\":");
       s.append(objectMapper.writeValueAsString(o));
       s.append("}");
       resp.getWriter().write(s.toString());
       加入属性
       ,parseData:function (res){
       	  return {
       		  "code":res.code,
       		  "msg":res.msg,
       		  "count":res.count,
       		  data:res.rows
       	  }
         } 
      
    3. 行按钮

       <script type="text/html" id="barDemo">
       <a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
       <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
       </script>
       列属性加入
        ,{fixed: 'right', title:'操作', toolbar: '#barDemo', width:150,align:'center'}
       事件
        //obj 行      obj.data 行数据    data.id 列
         //test  是table的lay-filter="test" 属性
         table.on('tool(test)', function(obj){  
             var data = obj.data;
             if(obj.event === 'del'){   ///lay-event 属性
                     layer.alert("已删除id为"+data.name);
             }
         });
      
  • 提示框

      layer.confirm('真的删除行么', function(index){
                layer.close(index);
          });
      layer.alert("已删除id为"+data.name);
    
  • form表单

  1. 提交

       layui.use('form', function(){
       var form = layui.form;
       //监听提交
       form.on('submit(formDemo)', function(data){
         layer.msg(JSON.stringify(data.field));
         return false;
       });
       });
    
  2. 赋值form.val('lay-filter的值', object);

  3. 表单验证

    <input type="text" lay-verify="required|phone|number">
    自定义校验器
    form.verify({
      username: function(value, item){ //value:表单的值、item:表单的DOM对象
        if(!new RegExp("^[a-zA-Z0-9_\u4e00-\u9fa5\\s·]+$").test(value)){
          return '用户名不能有特殊字符';
        }
        if(/(^\_)|(\__)|(\_+$)/.test(value)){
          return '用户名首尾不能出现下划线\'_\'';
        }
        if(/^\d+\d+\d$/.test(value)){
          return '用户名不能全为数字';
        }
      }
      
      //我们既支持上述函数式的方式,也支持下述数组的形式
      //数组的两个值分别代表:[正则匹配、匹配不符时的提示文字]
      ,pass: [
        /^[\S]{6,12}$/
        ,'密码必须6到12位,且不能出现空格'
      ] 
    });      
    
  4. select ajax获取

    <div class="layui-form" lay-filter="boardFilter">
    
    layui.form.render('select','boardFilter');
    
爬虫

请求发送

  • get
  • post

获取内容

  • text() html() attr() children()

反爬虫

  • ajax 重定向
  • token 签名验证
  • http header数据
  • 动态页面,class,标签

api

  • 交警,保险
  • bat公司,头条,淘宝,360
  • 定制产品 短信,地图,人工智能
  • api数据中心–app key
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值