Python爬虫
Python爬虫
安装requests和bs4 安装requests pip install requests 安装bs4 pip install bs4 爬取豆瓣电影数据 # 获取页面 import requests as req # 1.向服务器发送请求 url="https://movie.douban.com/top250" header={ "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36" } html = req.get(url,headers=header).content.decode("utf-8") # 2.保存文件到本地 with open("top250.html","w",encoding="utf-8") as f: f.write(html) print(html) 数据处理 from bs4 import BeautifulSoup soup = BeautifulSoup(open("top250.html",encoding="utf-8"),"html.parser") print(soup) print(soup.find_all("a",class_="")) 获取所有标题 # 这里获取的爬取之后保存到本地的文件 soup = BeautifulSoup(open("hkiii.html",encoding="utf-8"),"html.parser") text = soup.select(".loglist_title") # 获取标签内的文字 for t in text: print(t.text) 爬取结果
 2022-5-25
axios配置
axios配置
关于Axios Axios,是一个基于promise的网络请求库,作用于node.js和浏览器中,它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生node.js http模块, 而在客户端 (浏览端) 则使用XMLHttpRequest。 全局配置 <body> <button onclick="search()">查询</button> <button onclick="add()">添加</button> </body> <script> // axios的配置 1.全局配置 2.自定义配置 axios.defaults.baseURL='http://localhost:8080/user' // 设置超时时间 axios.defaults.timeout = 3000 function search() { var url= 'search'; axios.get(url).then().catch(err=>{ console.log(err.message) }) } function add() { var url= 'add'; axios.get(url).then().catch(err=>{ console.log(err.message) }) } </script> 自定义配置 <body> <button onclick="search()">查询</button> <button onclick="add()">添加</button> </body> <script> // axios的配置 1.全局配置 2.自定义配置 const ax = axios.create({ baseURL:'http://localhost:8080/user', timeout:'3000' }); function search() { var url= 'search'; ax.get(url).then().catch(err=>{ console.log(err.message) }) } function add() { var url= 'add'; ax.get(url).then().catch(err=>{ console.log(err.message) }) } </script>
 2022-5-24
Es6语法笔记(部分)
Es6语法笔记(部分)
Es6语法介绍 ES6, 全称 ECMAScript 6.0 ,是 JavaScript 的下一个版本标准,2015.06 发版。 ES6 主要是为了解决 ES5 的先天不足,比如 JavaScript 里并没有类的概念,但是目前浏览器的 JavaScript 是 ES5 版本,大多数高版本的浏览器也支持 ES6,不过只实现了 ES6 的部分特性和功能。 完整代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <style> .box-item{ width:100px; background-color: aquamarine; height: 50px; text-align: center; line-height: 50px; margin: 10px; } #ad{ width: 200px; height: 200px; background-color: bisque; } </style> <body> <div class="box-item">1</div> <div class="box-item">2</div> <div class="box-item">3</div> <div id="ad"></div> <script> //let小demo item = document.getElementsByClassName("box-item"); for (let i = 0; i < item.length; i++) { item[i].onclick=function(){ this.style="background-color:red"; this.innerText="我被点击了" } } // 数组的解构 const F4 = ['小沈阳','刘能','赵四','宋小宝']; let [xiao,liu,zhao,song]=F4; console.log(xiao); console.log(liu); console.log(zhao); console.log(song); // 对象的解构 const zhaobs = { name:'赵本山', age:'不详', xiaoping:function(){ console.log("我也可以演小品") } } let {name,age,xiaoping}=zhaobs; console.log(name); console.log(age); console.log(xiaoping); xiaoping(); // es6引入新的声明字符串的方式【``】 // 1.声明 let str = `我是字符串`; console.log(str,typeof str) // 2.内容中可以直接出现换行符 let strTwo = ` <ul> <li>box1</li> <li>box2</li> <li>box3</li> </ul>`; // 3.变量拼接 let lovest = '杨幂'; let out = `${lovest}是我最喜欢的演员`; console.log(out) // Es6 允许在大括号里面,直接写入变量和函数,作为对象的属性和方法。 // 这样写更简洁 let namee = '大彭Sir'; let change=function(){ console.log('我贼能吃!!!') } const bi ={ namee,change} console.log(bi) // Es6允许使用箭头(=>)定义函数。 let fn = (a,b) => { return a+b; } let sum = fn(10,20) console.log(sum) // this是静态的.this始终指向函数声明时所在作用域下的this得值 function getName(){ console.log(this.name); } let getName2 = () =>{ console.log(this.name);//无法改变指向 } window.name = '彭Sir' const es = { name:'PengSir' } getName.call(es); getName2.call(es); // 不能作为构造函数实例化对象 // let person = (name,age) =>{ // this.name = name; // this.age = age; // } // let me = new person('xiao',30); // person is not a constructor // console.log(me); // 箭头函数的简写,当型参有且只有一个可以省略括号 let add = n =>{ console.log(n+n) } add(1) // 当代码体只有一条语句的时候可以省略花括号,return必须省略 // 语句执行结果就是函数的返回值 let pow = n =>n*n; console.log(pow(10)); // 箭头函数demo // 需求一:点击div 2s 后颜色变成 粉色 let ad = document.getElementById('ad'); ad.onclick = function(){ setTimeout(()=>{ this.style.background="pink" },2000) } // 需求二:从数组中返回偶数的元素 const arr = [1,6,9,10,100,25]; // 普通方法 // const result = arr.filter(function(item){ // if (item % 2 === 0) { // return true // } else{ // return false; // } // }); // 箭头函数 const result =arr.filter(item=>item%2===0) console.log(result) // 箭头函数适合与this无关的回调。定时器、数组方法的回调 // 箭头函数不适合与this有关的回调。时间回调,对象的方法 </script> </body> </html>
 2022-5-21
Vue 服务端渲染
Vue 服务端渲染
小案例 // 1.创建vue实例 const Vue = require('vue') const server = require('express')() // 2.读取模板 const renderer = require('vue-server-renderer').createRenderer({ template:require('fs').readFileSync('./template.html','utf-8') }) // 3.处理Get方式请求 server.get('*',(req,res)=>{ res.set({'Content-Type':'text/html;charset=utf-8'}) const vm = new Vue({ data:{ title:'当前位置', url:req.url }, template: '<div>{{title}}:{{url}}</div>' }) // 4.将Vue 实例渲染为Html后输出 renderer.renderToString(vm,(err, html) => { if (err){ res.status(500).end('err'+err) return } res.end(html) }) }) server.listen(8080,function () { console.log('server started at localhost:8080') }) 模板文件 <!DOCTYPE html> <html> <head> <title>Title</title> </head> <body> <!--vue-ssr-outlet--> </body> </html>
 2022-5-10
自动化测试
自动化测试
案例代码 import time from selenium import webdriver; from selenium.webdriver.common.action_chains import ActionChains # 获取谷歌驱动 drive = webdriver.Chrome(); # 2.打开百度 drive.get('http://www.baidu.com'); time.sleep(2) # 窗口放大 drive.maximize_window() # 3.找到百度的输入款 # bdEL = drive.find_element_by_id('kw') # time.sleep(3) action = ActionChains(drive); # 4.右键 执行方法 # action.context_click(bdEL).perform() # 5.双击事件 # bdEL.send_keys('tomcat8') # action.double_click(bdEL).perform() # 6.拖拽事件 # drive.get(r'C:\Users\Administrator\Desktop\软件测试\html\drop.html') # 获取到盒子div的元素对象 # div1 = drive.find_element_by_id('div1') # div2 = drive.find_element_by_id('div2') # action = ActionChains(drive); # 将div1拖拽到div2里面 # time.sleep(3) # action.drag_and_drop(div1,div2).perform() #鼠标悬停 gd = drive.find_element_by_id('s-usersetting-top') action.move_to_element(gd).perform() 弹窗 drive.find_element_by_id('alerta').click() time.sleep(2) # drive.switch_to_alert()过时 # 获取到alert对象 alert = drive.switch_to.alert # 点击弹框的确定 alert.accept() 执行js脚本 js2 = 'alert("哈哈")' time.sleep(2) # 执行js脚本 drive.execute_script(js) 在当前页面中找到其他页面 drive.get(r'C:\Users\Administrator\Desktop\素材\注册2实例.html') time.sleep(2) # 切换到a页面 drive.switch_to.frame('myframe1') drive.find_element_by_id('userA').send_keys("admin") # 切换到原来的页面 drive.switch_to.default_content() drive.find_element_by_id("user").send_keys("大彭Sir")
 2022-5-10
node根据不同路径跳转到指定的页面
node根据不同路径跳转到指定的页面
完整代码 //1.引入http的模块 var http= require('http'); var fs=require('fs');//读取页面内容 var path=require('path');//拼接 const { throws } = require('assert'); //2.创建服务器 var server= http.createServer(); //3.启动服务器 server.listen(3000,function () { console.log('server .... start.. success'); }); //4.监听客户发送过来的请求,并相应数据给客户端 request(请求对象) response(响应对象) server.on('request',function (request,response) { //获取的请求路径 var url= request.url; //响应乱码处理 //response.setHeader("cont") if(url==='/login'){ //读取文件 nodeDeme/static/login.html fs.readFile(path.join(__dirname,'static/login.html'),'utf8',function (err,data) { if(err){ throw err; } response.end(data); }); }else if(url==='/register'){ fs.readFile(path.join(__dirname,'static/register.html'),'utf8',function (err,data) { if(err){ throw err; } response.end(data); }); } else if(url==='/'){ fs.readFile(path.join(__dirname,'static/index.html'),'utf8',function (err,data) { if(err){ throw err; } response.end(data); }); } else if(url==='/add'){ fs.readFile(path.join(__dirname,'static/add.html'),'utf8',function (err,data) { if(err){ throw err; } response.end(data); }); }else { fs.readFile(path.join(__dirname,'static/404.html'),'utf8',function (err,data) { if(err){ throw err; } response.end(data); }); } }); 改进之后 //1.引入http模块 path模块(拼接路径) fs模块 文件读写 var http = require('http'); var fs = require('fs'); var path = require('path'); const { ifError } = require('assert'); //2.创建服务器 var serve = http.createServer(); //3.启动服务器 serve.listen(3000,function(){ console.log('server start success!') }); //4.监听客户端发来的请求 serve.on('request',function(request,response){ //获取请求路径 var url = request.url; //根据不同的请求,找对应的页面 var filepath; if(url==='/'){ filepath = path.join(__dirname,'public/index.html'); //读取页面内容 fs.readFile(filepath,'utf8',function(err,data){ if(err){ throw err; }else{ response.end(data); } }) }else{ if(url.indexOf('.')>=0){ filepath= path.join(__dirname,'public',url); }else{ filepath= path.join(__dirname,'public',url+'.html'); } //读取页面内容 fs.readFile(filepath,'utf8',function(err,data){ if(err){ throw err; }else{ response.end(data); } }) } })
 2022-5-7
springmvc 将数据转换成json数据
springmvc 将数据转换成json数据
将数据转换成json数据 Controller类 @Controller public class UserController { @RequestMapping("/m1") public String m1(){ System.out.println("进入m1方法...."); return "m1"; } //同步请求 返回页面和数据 @RequestMapping("/m2") public ModelAndView m2(){ ModelAndView mv = new ModelAndView(); mv.addObject("msg","今天星期一"); mv.setViewName("m1"); return mv; } //异步请求 响应一个字符串 @RequestMapping("/m3") public void m3(HttpServletResponse response) throws IOException { response.getWriter().println("hello,word"); } //异步请求 响应一个对象 @RequestMapping("/m4") public void m4(HttpServletResponse response) throws IOException { response.getWriter().println("{id:1,name:\"admin\",address:\"武汉\"}"); } // 通过jackjson将对象转换成json数据 @RequestMapping("/m5") @ResponseBody//返回学生对象,转json public Student m5 (){ Student student = new Student(); student.setId(1); student.setName("admin"); student.setAddress("wuhan"); return student; } //将集合转换为json数据 @RequestMapping("/m6") @ResponseBody//返回学生对象,转json public List<Student> list (){ List<Student> list = new ArrayList<>(); for(int i=1;i<=3;i++){ Student s = new Student(); s.setId(i); s.setName("admin"+i); s.setAddress("wuhan"+i); } return list; } } 学生类 package com.hehe.controller; /** * 学生类 alt+insert 快捷键 */ public class Studnet { private Integer id;//学号 private String name;//姓名 private String address;//地址 //toString方法 //get和set方法 } 配置文件 <!--配置json数据转换--> <mvc:annotation-driven></mvc:annotation-driven> 依赖 <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.11.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.11.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.11.0</version> </dependency>
 2022-5-2
    自动化测试
    Mac
    图形
    代码高亮
    测试
    铭记
    Emlog小程序
    铭记国耻
    轮播图
    uniapp
    js
    递归算法
    emlog
    nodejs
    心情
    QQ小程序
    说说
    css
    编程
    源码
    伪静态
    PS
    文章
    小程序
    Downie4
    SSM
    下载
    事件
    三层架构
    axios
    封装
    ajax
    邮箱验证
    web
    组件
    正则表达式
    Brief
    jQuery
    VUE
    图片上传
    教程
    代码
    javaScript
    QQx
    插槽
    微信小程序
    系统
    数据库
    箭头函数
    Python
    MYSQL
    弹性布局
    Spring-MVC
    内容安全
    Java
    爬虫
    JSP
    软件
    缓存
    Vuex
    插件
    QQ
    node
    表单提交
    robots
    PHP
    Es6
    微信
    表白墙
    SQL
    空间
    晚安心语
    模板
    名片赞助手
    Vue脚手架
    页面
    VuePress
    SEO
    前端
    教学
    工具
    新拟态效果
    九一八事变
    安装
    IO流
    电脑
    笔记
    promise
    PhotoShop
    Json
    Fabric
    服务端
    Spring
    Mybatis
    Servlet
    墨菲定律
    HTML

Theme By Brief 鄂ICP备19010459号

站长统计 sitemap

首页

分类

友链

标签