测试必要会的接口测试,不一样的接口测试学完就能涨薪3k。

【文章末尾给大家留下了大量的福利】 

requests是基于urllib的HTTP库,可以帮助我们发送各式各样的请求,携带各式各样的参数。

pip install requests

请求

包括:

  • 如何发送不同类型的请求

    • get

    • post

    • delete

    • put

    • 。。。。

  • 在请求中,如何携带参数

    • cookies

    • headers

    • data

    • json

响应

在响应对象中:

  • 都有哪些属性

  • json

  • bytes

  • 文本类型

如何通过响应头判断该响应体的内容?通过content-type来判断:

  • json类型的响应content-type:application/json

  • 图片:content-type:image/gif

  • 文本类型的响应:content-type:text/html

如果获取到的文本内容有乱码,如何解决?

  1. 要想到查看当前页面编码格式

  2. 使用response.encoding = 编码格式

requests.request(method, url, **kwargs)类能够构造一个请求,支持不同的请求方式。

import requests
​
response = requests.request(method='get', url='https://www.baidu.com')
print(response.status_code)

request类中来看看几个参数:

  • method:请求方式。

  • url:请求URL。

  • **kwargs:

    • params:字典或者字节序列,作为参数增加到url中,使用这个参数可以把一些键值对以k1=v1&k2=v2的模式增加到url中,get请求中用的较多。

    • data:字典、字节序列或者文件对象,重点作为向服务器提供或提交资源,作为请求的请求体,与params不同放在url上不同。它也可以接受一个字符串对象。

    • json:json格式的数据,可以向服务器提交json类型的数据。

    • headers:字典,定义请求的请求头,比如可以headers字典定义user agent。

    • cookies:字典或者CookieJar。

    • auth:元组,用来支持HTTP认证功能。

    • files:字典,用来向服务器传输文件。

    • timeout:指定超时时间。

    • proxies:字典,设置代理服务器。

    • allow_redirects:开关,是否允许对URL进行重定向,默认为True。

    • stream:开关,是否对获取内容进行立即下载,默认为False,也就是立即下载。这里需要说明的,stream一般应用于流式请求,比如说下载大文件,不可能一次请求就把整个文件都下载了,不现实,这种情况下,就要设置stream=True,requests无法将连接释放回连接池,除非下载完了所有数据,或者调用了response.close。

    • verify:开关,用于SSL证书认证,默认为True。

    • cert:用于设置保存本地SSL证书路径。

流式请求,指的不是请求是流,而是请求返回的数据流,返回一点取一点,而普通的请求是返回完毕你再取内容。

分享:httpbin.org # httpbin,提供了常用的请求方式,用于接口练习

requests示例介绍 

params参数

常用于get请求。

import requests
# response = requests.get(url='http://www.neeo.cc:6001/get?user=zhangkai&pwd=666')
# print(response.json())
​
params = {"user": "张开","pwd": 666
}
response = requests.get(url='http://www.neeo.cc:6001/get', params=params)
print(response.json())

headers

该参数使用所有请求需要携带请求头的场景。

import requests
headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.113 Safari/537.36"
}
​
response = requests.get('https://www.zhihu.com/question/361649589/answer/1163303688', headers=headers)
print(response.status_code)
print(response.text)

cookies参数

import requests
# 1. 登录,获取cookies值
​
response = requests.post(url="http://www.neeo.cc:6002/pinter/bank/api/login?userName=admin&password=1234")
print(response.json())
print(response.cookies)
print(response.cookies.get_dict())
​
​
# 2. 在需要cookies验证的时候,携带上刚才获取到的cookies值
response = requests.get(url='http://www.neeo.cc:6002/pinter/bank/api/query?userName=admin', cookies=response.cookies.get_dict())
print(response.status_code)
print(response.json())

data参数

import requests
data = {"userName": "=admin","password": "1234"
}
response = requests.post(url="http://www.neeo.cc:6002/pinter/bank/api/login", data=data)
print(response.json())
print(response.cookies)

json参数

import requests
response = requests.post('http://www.neeo.cc:6001/post', json={"user":"zhangkai"})
print(response.json())

文件上传

import requests
file = {"file": open('a.gif', 'rb')}
response = requests.post("http://www.neeo.cc:6001/post", files=file)
print(response.json())

requests模块的基本操作

import requests# response = requests.request(method='get', url='https://www.autohome.com.cn/news/')
response = requests.get('https://www.autohome.com.cn/news/')
# print(response)  # 查看响应状态
print(response.status_code)  # 查看响应状态
# print(response.content)  # 查看bytes类型的数据,通常是获取图片
# print(response.headers)   # 查看响应头
# print(response.json())   # 获取json类型的数据,要确保响应类型是json,不然报错
# response.encoding = "GBK"   # 指定(修改)当前响应结果的编码类型
# print(response.text)   # 文本类型的数据用text
# print(response.content)  # 获取bytes类型的数据
# print(response.url)  # 当前请求的url
# print(response.encoding)  # 获取当前响应的编码类型
# print(response.request)  # 请求类型
# print(response.request.method)  # 请求类型
# print(response.cookies)  # 查看cookis
# print(response.is_redirect)  # 查看是否是重定向的响应
# print(response.iter_lines())  # 循环获取,一行一行的取,但是,请忘掉这个方法
# print(response.iter_content(chunk_size=1024))  # 迭代取值,可以指定chunk_size
# print(response.reason)

bs4模块,解析文本查找标签及标签属性或者内容:

"""
pip install beautifulsoup4
"""from bs4 import BeautifulSoupsoup = BeautifulSoup(文本类型请求结果, 解析器)   # response.text, "html.parser"div_obj = soup.find(name="div", attr={"id": "xxxxx"})   # 找一个
img_list = div_obj.find_all(name="img", [attr])   # 找多个标签, 可以根据attr属性过滤,以列表的形式返回多个for img in img_list:img.get("src")   # 获取标签的属性
div_obj.text  # 获取标签的文本内容

requests/bs4爬虫练习

https://www.autohome.com.cn/news/
# 爬取汽车之家新闻页的新闻列表缩略图

# 思路:
1. 访问汽车之家新闻页
2. 定位到缩略图外部的div
3. 获取所有的img标签中的src属性
4. 使用requests模块向img的src地址发请求
5. 保存到本地

 View Code

beautifulsoup4:

  • soup_obj = BeautifulSoup(response.text, "html.parser") # response.text: 要解析的文本 html.parser:指定什么解析器来解析文本

  • soup_obj.find(name=标签名, attr={”属性名":"属性值"}) 因为找到的标签可能有多个,那使用attr来过滤指定的标签。

  • soup_obj.find_all(name=标签名, attr={”属性名":"属性值"})) 找到所有以attr过滤的标签。

  • img.get('src'),表示获取指定标签的属性

  • 获取标签的文本内容,使用标签名.text

postman

  1. 常见的接口

    1. 普通的get请求

    2. 带参数get请求

    3. post请求:k:v

    4. post请求:k:{“k1”:"va1"}

    5. post请求:json

    6. webservice接口

  2. 特殊的接口

    1. 文件上传

    2. cookies

    3. token

    4. 签名接口

  3. 环境管理

    1. 如何配置环境

  4. 断言

    1. 状态码断言

    2. json断言

  5. 接口自动化

  6. 命令行测试

  7. 参数化配置

普通请求

  1. k:v格式的post请求

  1. 参数为json的post请求

  1. 文件上传:

集合的概念

将同一类型,同一项目的接口管理起来。

今日内容

环境管理

创建环境:

编辑当前环境的变量:

如何在请求中应用上环境中的变量?

使用{{变量名}}的方式使用环境中的变量值。

变量的作用域

全局变量:作用于全局,postman中的任何地方

集合变量:变量只作用于集合中的接口

内置动态变量:内置的一些时间戳,UIID变量。

自定义环境变量:自己定义的环境,在该环境中创建的变量,只要你使用该环境,就能使用其中变量值。

全局变量

如何创建全局变量

使用{{变量名}}来使用。

集合变量

只作用于当前的集合中。

创建

使用{{变量名}}来使用。

内置的变量

作用于所有地方,使用{{$内置的变量名}}

常用的:

  • timestap

  • guid

更多内置的变量参考:

断言

python中的断言,assert,断定结果是怎样的,否则就断言失败。

import requests
​
response = requests.get("https://www.baidu.com", timeout=5)
​
​
try:assert response.status_code == 201print('断言成功')
except AssertionError as e:print('断言失败')

在postman中,如何使用断言。

postman中,可用的模板?

模板描述示例
clear a global variable清除全局变量pm.globals.unset("variable_key");
Clear an environment variable清除一个环境变量pm.environment.unset("variable_key");
get a global variable得到一个全局变量pm.globals.get("variable_key");
get a variable得到一个变量pm.variables.get("variable_key");
Get an environment variable得到一个环境变量pm.environment.get("variable_key");
response body:contains string检查response body包含字符串pm.test("Body matches string", function () { pm.expect(pm.response.text()).to.include("string_you_want_to_search"); });
response body:convert XML body to a JSON objectresponse body:将XML转换为JSON对象var jsonObject = xml2Json(responseBody);
response body:is equal to a string检查响应体等于一个字符串pm.test("Body is correct", function () { pm.response.to.have.body("response_body_string"); });
response body:JSON value check检查response body中JSON某字段值pm.test("Your test name", function () { var jsonData = pm.response.json(); pm.expect(jsonData.value).to.eql(100); });
response headers:content-Type header check检查content-Type是否包含在header返回pm.test("Content-Type is present", function () { pm.response.to.have.header("Content-Type"); });
response time is than 200ms响应时间超过200mspm.test("Response time is less than 200ms", function () { pm.expect(pm.response.responseTime).to.be.below(200); });
send s request发送一个请求pm.sendRequest("https://postman-echo.com/get", function (err, response) { console.log(resp onse.json()); });
set a global variable设置一个全局变量pm.globals.set("variable_key", "variable_value");
set an environment variable设置一个环境变量pm.environment.set("variable_key", "variable_value");
status code:Code is 200状态码:代码是200pm.test("Status code is 200", function () { pm.response.to.have.status(200); });
status code:code name has string状态码:代码中有指定字符串pm.test("Status code name has string", function () { pm.response.to.have.status("Created"); });
status code:successful POST request状态码:成功的post请求pm.test("Successful POST request", function () { pm.expect(pm.response.code).to.be.oneOf([201,202]); });
use tiny validator for JSON data为json数据使用tiny验证器var schema = { "items": { "type": "boolean" } }; var data1 = [true, false]; var data2 = [true, 123]; pm.test('Schema is valid', function() { pm.expect(tv4.validate(data1, schema)).to.be.true; pm.expect(tv4.validate(data2, schema)).to.be.true; });

常用的断言

// 状态码断言
​
pm.test("判断响应状态码是否是 200", function () {pm.response.to.have.status(200);
});
​
// 判断json中的key value是否符合预期,如果你的key是嵌套结构,就点下去
​
pm.test("Your test name", function () {var jsonData = pm.response.json();pm.expect(jsonData.args.k2).to.eql("v2");
});
​
​
// 判断文本类型的响应文本中,是否包含指定的字段
pm.test("判断响应体是否包含指定的字段", function () {pm.expect(pm.response.text()).to.include("百度一下");
});

集合公共断言

创建集合公共断言。

可以将集合中的一些公共的断言写到集合配置中,在集合中的接口在执行时,会自动的应用上集合配置中的断言。

特殊接口

签名接口

  1. 知道签名接口的加密规则

    1. sign:md5(手机号 + 盐 + 时间戳)

  2. 知道,在请求之前处理相关的数据

// 获取手机号
​
var phone = "1212113";
​
// 获取盐
var optCode = "testfan";
​
​
// 获取时间戳
​
var timestamp = new Date().getTime();
​
// console.log(timestamp);
​
// md5 加密
​
var md5 = CryptoJS.MD5(phone + optCode + timestamp).toString();
// console.log(md5);
​
// 将加密后的字符串set回环境中
pm.globals.set("phone", phone);
pm.globals.set("timestamp", timestamp);
pm.globals.set("md5", md5);

cookies

处理cookie有两种方式:

  • 第一种,手动的获取cookies值,然后在需要cookies的请求中,手动携带,注意:你要保证cookie值是有效的。

  • 第二种,postman在发送请求的时候,如果响应中有cookies返回,就会自动的帮我们保存在cookie管理器中。当有向该域名发送请求的时候,postman会自动的帮我们携带cookie值。

token

postman不会帮我们处理token,只能我们自己来完成:

  • 第一种,用例浏览器登录账号,获取token值,在有需要的接口中,手动添加。

  • 第二种:

    • 在登录接口访问成功后,从请求体中获取token字段,并且set到全局变量中。

    // 从响应体中获取token字段: data
    var token = pm.response.json().data;
    ​
    // 将token值set到全局的环境中去。
    pm.globals.set("my_token", token);

    • 在需要使用token的接口中,在该接口请求发送之前, 从环境中获取token值,填写在请求头中。

webservice接口

简单来说,webservice是通过xml进行交互的web请求,本质上也是HTTP请求。

Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。是通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册。

如何调试webservice接口

  1. 在post请求的raw中输入请求的参数,并且,格式选择xml:

  1. 由于上一步中,选择xml格式的时候,postman会自动的在请求头中,添加上Content-Type:application/xml,但是webservice接口的content-type不是application/xml而是text/xml.

  1. 修改请求content-type值。

  1. 就正常的发请求就完了。

集合自动化

如上图,在启动集合的时候,有如下参数配置:

  • Environment:选择接口执行时依赖的环境。

  • Iterations:表示该集合内的接口运行的次数。

  • Delay:接口执行前延时多少毫秒。

  • Log Response:默认记录所有的响应日志。

  • Data:参数数据,暂时先不管它。

  • Keep variable values:保存在运行过程中产生的变量或者值,选择默认即可。

  • Run collection without using stored cookies:运行中不使用cookie,这里也保持默认。

  • Save cookies after collection run:在集合执行之后,保存cookies,选择默认。

  • Run 集合名称:运行集合。

数据驱动这里:一般轮训次数会自动的根据你的数据行数来定。如果轮训次数大于数据行数,那么在剩余的轮训中,提取的数据就是数据文件的最后一行。

命令行测试

环境配置

  1. 安装nodejs:,注意,nodejs版本不低于10。

  2. 由于自带的npm命令受网络影响严重,我们需要配置一个国内的淘宝镜像:cnpm,终端(管理员权限)执行如下命令:

npm install -g cnpm --registry=https://registry.npm.taobao.org

  1. 测试vnpm是否安装成功:

cnpm -v

  1. 使用cnpm来安装Newman插件:

cnpm install newman --global
newman -v

  1. 安装reporter插件,用来生成测试报告

cnpm install -g newman-reporter-html

  1. 执行终端命令,获取html类型的报告

newman run 脚本 -d 参数文件 -e 环境文件 -n 循环次数 -r html --reporter-html-export 测试报告路径

question

newman required node version >=10

意思是nodejs版本太低了,需要10及以上的版本。

nodejs需要win8以上的系统

这个意思是新版本的nodejs要求的Windows系统在win8以上,你可以安装一个稍微低一点的nodejs,如12.x版本

本地部署Java项目

  1. 要安装java jdk(Windows/Mac):

  2. 下载apache-tomcat-8.5.38.zip压缩包,解压到你的本机上,一个没有中文,空格的目录中。

  3. 配置相关的环境变量。

变量名
JAVA_HOMEjava jdk 的安装目录
PATH%JAVA_HOME%\bin
CATALINA_HOMEtomcat的安装目录
PATHtomcat的bin目录
  1. 启动,在任意目录打开终端,输入pinter,启动过程稍慢,选哟静等一会儿

  2. 浏览器访问127.0.0.1:8231/pinter/index

问题

打开tomcat的启动文件,一闪即逝,意思是你的Java环境配置的有问题,解决办法:

  1. 检擦你的环境变量是否配置好了。

  2. 重启电脑

内容回顾

  1. 如何使用postman处理各式请求

    • get请求

    • post请求

    • 其他类型的请求

  2. 在请求中如何携带参数

    • params

    • data, x-www-form-urlencoded k:v ---> content-type:application/x-www-form-urlencoded

    • json, raw, json ---> content-type:application/json

  3. 特殊接口

    • cookies

      • 手动去浏览器做登录操作,获取cookies,然后,在postman发请求时,自己携带

      • 使用postman向登录接口发请求,如果该响应有cookies,就保存到cookies管理器中,当有想同域名的接口发送请求时,会去cookies管理器中,自动添加

    • token

      • 手动去浏览器做登录操作,获取token,然后,在postman发请求时,自己携带

      • 在postman中,首先向登录接口发请求,在请求结束后,手动的通过脚本获取token值,然后set到全局变量中;当向需要token的接口发请求时,在带上

    • 签名接口

      • 首先要知道该接口的加密算法

      • 要手动的去处理各个参数和加密后的结果, set到环境变量中

      • 在请求的参数中使用{{变量名}}引用

    • webservice接口

      • 以xml格式作为数据交换的HTTP请求。

      • 携带参数时,需要选择xml类型,注意,当你选择了xml类型,postman会自动的在请求头中携带content-type:application/xml

      • 但是,至于该接口的content-type需要什么值

    • 文件上传

      • 请求类型是 form-data

  4. 环境管理

    • 自定义的环境变量,当使用时,直接选择即可

    • 全局的环境变量,可以定义基础的一些变量

    • 集合变量,作用域只作用于当前集合中

    • 内置的动态变量$guid

    • 使用,内置动态变量使用{{$guid}}, 其他引用直接{{变量名}}

  5. 断言

    • 该功能就是在请求结束后要做的操作,不仅限于断言,还能,set变量,get变量,clear变量。

    • 断言:

      • 状态码断言,判断响应状态码是否是指定的状态码

      • 字符串断言,文本类型的请求结果中是否包含指定的字符

      • json断言,判断jsonData中,指定的key值是否符合预期

    • 在集合中,如果有一些公共的断言,可以写在集合的断言中,不用在每个接口里面写断言了,避免了重复造轮子,只需要在接口中实现接口特定的断言

  6. 集合自动化

    • 能自动的将集合内的接口进行自动化运行,指定运行的轮次

    • 在自动化运行中,可以加入断言

    • 还可以做数据驱动测试,即测试数据来自外部的文件中,一般我们选择将外部数据保存为CSV和json类型。

      • CSV:是一个无格式的文本文件,但它可以使用Excel打开。

    • 可以导出json类型的运行结果。

  7. 命令行测试

    • 在终端中进行执行postman脚本。

    • 要下载newman插件,该插件用来在终端中执行postman脚本,但该插件本身基于nodejs开发,所以要配置:

      • nodejs ---- 版本问题,不能太高,太高了,低版本的Windows报错,太低了,插件装不上,所以,选择 >=10版本的, 也不要选择最新版本的

      • nodejs有nmp(下载软件的工具),在国内受网络影响,所以,配置cnpm,即淘宝的npm镜像

    • 在进行终端测试时,还需要导出html文件, 那就要在下载 reporter插件

    • 上述几个软件和插件下载完毕,可以执行命令:

      • newman run 脚本 -d 参数文件 -e 环境文件 -n 循环次数 -r html --reporter-html-export 测试报告路径

      •  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/351521.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

第十九节 HTTP 协议

什么是HTTP 协议? 日常我们使用网络用得最多的无疑是在Web 浏览器(下文统一使用浏览器)上查找资料、看视频、看书、看新闻等等,而在浏览器中只需要输入一些搜索就可以得到想要的信息,这归根于搜索引擎的好处,但是实际…

102.【Redis】

Resies集群 前言(一)、Nosql概述1、为什么要用NoSQL ?2、什么是Nosql3、Nosql特点4、Nosql的四大分类5、阿里巴巴数据结构演进 (二)、Redis入门1.概述2.Redis能干什么?3、Redis的特点4、window安装Redis5、Linux安装Redis6、redis-benchmark性能测试7、Redis基础知…

菌子导航系统(持续开发中)

文章目录 菌子导航前言项目架构spring-cloud 和 spring-boot 版本选择使用到的组件(依赖)架构分层 项目基本功能1 使用Nacos做配置中心2 logback日志3 mybatis-plus操作数据库4 Caffeine 缓存整合5 LocalDateTime 序列化&反序列化6 参数校验快速失败…

狂神Javaweb完整版基础入门(IDEA版)值得学习的JavaWeb教程

Java web Java web 1、基本概念 web开发: web,网页的意思,www.baidu.com静态web html,css提供给所有人看的数据始终不会发生变化! 动态web 淘宝,几乎是所有的网站提供给所有的人看的数据始终会变化&…

阿里腾讯“双向奔赴”新进展:互联互通再提速

《中智观察》第1636篇推送 作者:雨涵 编辑:小瑞瑞 头图来源:摄图网 “冬天来了,春天还会远吗”?当推倒了“篱笆墙”,大厂互联互通的“脚步”就在持续向前迈进。 近日,有消息称淘宝开始内测使用微…

【转载】JAVA知识点集锦(中)

这部分主要是与Java Web和Web Service相关的面试题。 96、阐述Servlet和CGI的区别? 答:Servlet与CGI的区别在于Servlet处于服务器进程中,它通过多线程方式运行其service()方法,一个实例可以服务于多个请求,并且其实例一般不会销…

B站---【狂神说Java】JavaWeb入门到实战---笔记

该笔记大部分搬运B站遇见狂神说的javaWeb,顺便把图文合并记录,便于回顾 视频地址:https://www.bilibili.com/video/BV12J411M7Sj 记得三连 文章目录 1、基本概念1.1、前言1.2、web应用程序web应用程序:1.3、静态web1.4、 动态web …

关于NoSQL与SQL的区别

转载自:http://blog.csdn.net/xlgen157387/article/details/47908797 云计算背后的秘密:NoSQL诞生的原因和优缺点 我本来一直觉得NoSQL其实很容易理解的,我本身也已经对NoSQL有了非常深入的研究,但是在最近准备YunTable的Chart的时…

Java面试题全集(中)

这部分主要是与Java Web和Web Service相关的面试题。 96、阐述Servlet和CGI的区别? 答:Servlet与CGI的区别在于Servlet处于服务器进程中,它通过多线程方式运行其service()方法,一个实例可以服务于多个请求,并且其实例一般不会销…

Node.js(一)——(Node.js安装及使用,通过Node.js搭建服务器,模块化及自定义模块,npm/yarn/nvm,内置模块fs的使用,buffer及stream,新闻列表案例)

目录 1.Node.js介绍 2.安装Node.js 3.使用Node.js实现第一个服务器 3.1初步感受Node.js 3.2Google Chrome 默认非安全端口列表,尽量避免以下端口。 3.3nodemon自动监控服务端更改 4.模块化——Node.js使用commonjs规范 4.1创建自定义模块(引入文…

限期解除!要跟乱七八糟的口令说拜拜了

大家好,欢迎来到编程教室~我是Crossin。 这两天有个事关很多人的新闻: 转自 澎湃新闻 https://m.thepaper.cn/baijiahao_14480198 为什么说事关很多人?因为以下这两个场景,想必大家都遇到过: 出现这种情况,…

数据分析与爬虫实战视频——学习笔记(一)(python基础、urllib、超时设置、自动模拟HTTP请求、异常处理、浏览器伪装、代理服务器、新闻爬虫、淘宝登陆和图片爬取)

未经允许,请勿转载。 连载未完成状态 网址: 【数据挖掘】2019年最新python3 数据分析与爬虫实战_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili https://www.bilibili.com/video/av22571713/?p1 目标: 网络爬虫工程师 数据分析(数据挖…

从零开始使用深度学习训练一个新闻分类器(干货)

https://mp.weixin.qq.com/s/qR-d9Zay-7NJZgmYYlwn0A?utm_sourcetuicool&utm_mediumreferral 我们在浏览新闻的时候,通常会看到新闻网站对每个新闻都进行了分类: 新闻分类的应用相当广泛。对于网站来说,可以根据你看得较多的新闻类别给你…

跑实验_word2vector词向量实现_基于搜狗新闻预料+维基百科

这篇博客只是记录一下如何解决 跑别人的代码没通的过程。 文章目录 1 运行代码0设备环境1.获取语料库2.语料库预处理3.训练4.开动!使用词向量近义词获取某个词语的词向量计算句子相似度词向量加减运算选出集合中不同类的词语 2总结一下经验3补充 1 运行代码 最经在…

web编程项目--新闻网站搭建

文章目录 一、新闻爬取1.爬虫原理2.分析网站链接格式和网页信息格式cheerio爬取新浪新闻爬取人民网新闻央视新闻爬取网易新闻 3.数据库设计4.爬虫具体代码实现5.存储结果展示 二、 网站搭建1.用express构建网站访问mysql2.显示查询结果后端实现前端实现 3.对查询结果进行分页4.…

彻底解决网络爬虫遇到的中文乱码问题

你是否遇到过下面的情况: 作为爬虫新手好不容易写了一个爬虫结果爬出来的数据中文数据乱码导致不能使用 如图: 其实很好解决: 如果你是使用的request模块得到的相应对象则可以如下设置: 主要由两种情况,这是根据网页所…

解析网页出现中文乱码问题的解决方案

最近在解析淘宝中商品的信息&#xff0c;结果出现乱码&#xff0c;如&#xff1a; 原因就是中文字符格式出现冲突&#xff0c;ASP.NET MVC 默认采用utf-8,但是淘宝网页采用gbk。 在网上找了一下&#xff0c;最常用的解决方法就是修改web.config: < system.web> ......…

java并发编程:重排序与happens-before介绍

文章目录 什么是重排序&#xff1f;顺序一致性模型与JMM的保证数据竞争与顺序一致性顺序一致性模型JMM中同步程序的顺序一致性效果JMM中未同步程序的顺序一致性效果 happens-before什么是happens-before?天然的happens-before关系 什么是重排序&#xff1f; 计算机在执行程序…

burpsuite工具的使用(详细讲解)

一&#xff09;前言 我已经在之前详细的说明了burpsuite的安装过程&#xff0c;如果不了解的可以看 burpsuite安装教程 &#xff1a;http://t.csdn.cn/uVx9X 在这了补充说明一下&#xff0c;在安装完burpsuite并设置完代理后&#xff0c;会出现如果访问的url是使用http协议的…

Boilsoft Video Splitter(无损视频分割器)官方正式版V8.2.0 | 无损视频分割软件下载 | 视频分割软件哪个好用?

Boilsoft Video Splitter 是一款优秀且快速的专业无损视频分割软件&#xff0c;支持大于2GB以上的视频分割和直接拖放功能&#xff0c;无需重新编码就能帮助大家直接将完整的AVI、MPEG、RM、ASF、WMV、3GP、MKV、FLV 或 MP4等主流视频文件按时间、大小或关键帧等条件拆分、剪切…