Python 网络爬虫(二):HTTP 基础知识

在这里插入图片描述

《Python入门核心技术》专栏总目录・点这里

文章目录

  • 1. HTTP 协议简述
  • 2. HTTP 请求过程
  • 3. HTTP 的结构
    • 3.1 请求行
    • 3.2 请求头
    • 3.3 请求体
    • 3.4 状态行
    • 3.5 响应头
    • 3.6 响应体
  • 4. Cookie 状态管理
  • 5. HTTP 请求示例
  • 6. 总结


大家好,我是水滴~~

在准备学习网络爬虫之前,深入了解HTTP协议的工作原理和核心概念是至关重要的。HTTP(Hypertext Transfer Protocol)是一种用于在客户端和服务器之间传输数据的协议。它定义了客户端(通常是浏览器)和服务器之间交互的规则和约定。

了解HTTP协议对于学习网络爬虫至关重要,原因如下:

  • 爬虫基于HTTP:网络爬虫是通过模拟HTTP请求和解析HTTP响应来获取网页数据的。爬虫程序发送HTTP请求到目标服务器,并通过HTTP响应获取所需的数据。因此,了解HTTP协议的工作原理和通信过程能够帮助理解爬虫的工作原理。

  • 请求和响应:HTTP协议基于请求-响应模型,客户端发送请求到服务器,服务器返回响应。了解HTTP请求的结构、请求方法(如GET、POST)以及请求头(如User-Agent、Cookie等)可以帮助我们构建合适的请求,获取所需的数据。同时,了解HTTP响应的结构、状态码(如200、404)以及响应头(如Content-Type、Content-Length)可以帮助我们理解服务器返回的数据和处理请求的结果。

  • 数据交互与处理:HTTP协议在数据交互中起着重要的作用。了解HTTP协议可以帮助我们处理网络请求和响应中的数据,包括URL参数的传递、请求体的处理、响应内容的解析等。此外,了解HTTP头部信息的使用和意义可以帮助我们在爬虫过程中设置合适的请求头,模拟真实用户的访问行为,以避免被服务器的反爬机制所阻拦。

  • 调试和故障排除:在进行网络爬虫开发中,经常需要对HTTP请求和响应进行调试和故障排查。了解HTTP协议可以帮助我们更好地理解请求和响应的细节,识别问题所在,快速解决网络请求的异常情况。

总之,在学习网络爬虫之前,深入了解HTTP协议是非常重要的。它不仅为我们提供了与服务器进行数据交互的基础,还能帮助我们理解爬虫的工作原理、构建合适的请求、解析响应数据,并能够更好地调试和排除故障。通过学习HTTP协议,您将为后续的网络爬虫学习奠定坚实的基础。

1. HTTP 协议简述

HTTP(Hypertext Transfer Protocol)是一种用于在Web上进行通信的协议。它定义了客户端和服务器之间的交互方式,使得客户端能够请求资源并接收服务器的响应。

HTTP协议的主要特点如下:

  • 无状态:HTTP是一种无状态协议,即每个请求和响应都是独立的,服务器不会记住之前的请求。这导致服务器无法直接识别用户或跟踪会话状态,但可以使用Cookie来实现会话管理。

  • 请求-响应模型:HTTP使用请求-响应模型,客户端发送请求到服务器,服务器处理请求并返回响应。请求由方法(如GET、POST)、URL、协议版本、请求头和请求体组成,而响应包含状态码、响应头和响应体。

  • 可扩展性:HTTP是一种可扩展的协议,通过使用头部字段,可以添加自定义的请求头和响应头来满足特定需求。

  • 明文传输:HTTP默认以明文形式传输数据,不提供加密和安全性保护。为了保护数据的安全性,可以使用HTTPS(HTTP Secure)协议,它使用TLS/SSL加密来保护数据传输。

  • 支持多媒体:HTTP支持传输多种类型的媒体数据,如HTML、文本、图片、音频和视频等。根据请求头中的Content-Type字段,服务器可以返回适当的响应类型。

  • 状态码:HTTP使用状态码来表示请求的处理结果。常见的状态码有200(成功)、404(未找到)、500(服务器内部错误)等。

HTTP协议被广泛应用于Web开发中,用于浏览器和服务器之间的通信。它为Web提供了标准化的通信方式,使得不同平台和系统之间可以进行交互和共享资源。

2. HTTP 请求过程

HTTP请求过程描述了客户端发送HTTP请求并服务器处理请求的步骤。以下是HTTP请求过程的一般流程:

  • 解析URL:客户端解析要请求的URL,提取出协议、主机名、端口号(如果未指定,默认为协议的默认端口号)、路径和查询参数等信息。

  • 建立连接:客户端使用解析到的主机名和端口号建立与服务器的TCP连接。如果使用的是HTTPS协议,则在建立TCP连接后还需要进行SSL握手过程。

  • 发送请求:客户端构建HTTP请求报文,包括请求行、请求头部和请求正文。请求行包含请求方法(GET、POST等)、请求的路径和协议版本信息。请求头部包含与请求相关的附加信息,如Accept、User-Agent等。如果请求需要发送数据,则请求正文包含要发送的数据。

  • 服务器处理:服务器接收到请求后,根据请求的路径和方法进行处理。这可能涉及到读取文件、执行应用程序逻辑、查询数据库等操作。服务器还会根据需要生成HTTP响应。

  • 发送响应:服务器构建HTTP响应报文,包括响应状态行、响应头部和响应正文。响应状态行包含状态码和状态描述。响应头部包含与响应相关的附加信息,如Content-Type、Content-Length等。响应正文包含要发送给客户端的数据。

  • 接收响应:客户端接收到服务器发送的HTTP响应。它解析响应报文,提取出状态码、头部信息和响应正文。

  • 渲染页面:如果响应的内容是HTML页面,客户端会解析HTML并渲染页面,显示给用户。它会加载和显示页面上引用的其他资源,如CSS、JavaScript、图像等。

  • 关闭连接:客户端和服务器在完成请求-响应交互后,关闭TCP连接。如果客户端需要获取其他资源,它可以重复上述步骤。

这是HTTP请求过程的基本流程。在实际应用中,还可能涉及到缓存、重定向、身份验证等其他机制。了解HTTP请求过程可以帮助开发人员更好地理解和调试Web应用程序,并优化网络性能和安全性。

3. HTTP 的结构

HTTP(Hypertext Transfer Protocol)是一种用于在Web上传输数据的协议。它使用客户端-服务器模型,客户端发送HTTP请求到服务器,服务器返回HTTP响应给客户端。HTTP的结构由请求和响应两部分组成。

  • HTTP请求结构:

    • 请求行(Request Line):包含请求方法、请求的URL和协议版本。

    • 请求头部(Request Headers):包含与请求相关的附加信息,如User-Agent、Accept等。

    • 空行(Blank Line):用于分隔请求头部和请求正文。

    • 请求体(Request Body):可选,包含请求发送的数据。

    示例:

GET /example.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html
  • HTTP响应结构:

    • 状态行(Status Line):包含响应的状态码和状态描述。

    • 响应头部(Response Headers):包含与响应相关的附加信息,如Content-Type、Content-Length等。

    • 空行(Blank Line):用于分隔响应头部和响应正文。

    • 响应体(Response Body):包含服务器返回的数据。

    示例:

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1024<html>
<body>
<h1>Hello, World!</h1>
</body>
</html>

HTTP的结构遵循一定的规范,请求和响应通过起始行、头部和正文进行组织。请求中的方法(如GET、POST)、URL和协议版本描述了客户端的操作。响应中的状态码(如200、404)和状态描述表示服务器对请求的处理结果。头部字段提供了与请求和响应相关的元数据信息,而正文则携带实际的数据内容。

这种结构化的组织方式使得HTTP成为一种可靠、可扩展的协议,广泛应用于Web通信和资源传输。

3.1 请求行

HTTP请求行是HTTP请求的一部分,它包含在请求中的第一行。请求行描述了客户端想要执行的操作。HTTP请求行由三个主要部分组成:请求方法、请求的URL和协议版本。以下是HTTP请求行的结构和示例:

<请求方法> <URL> <协议版本>
  • 请求方法(Method):指定客户端要执行的操作类型。常见的请求方法包括:

    • GET:获取指定资源。

    • POST:向服务器提交数据,用于创建新资源。

    • PUT:向服务器传输数据,用于更新或替换指定资源。

    • DELETE:删除指定资源。

    • HEAD:类似于GET方法,但只返回响应头部,用于获取资源的元数据。

    • OPTIONS:获取服务器支持的请求方法和支持的头部字段。

    • PATCH:对资源进行部分更新。

  • URL(Uniform Resource Locator):指定请求的目标资源的位置。URL由协议、主机名、端口号和路径组成,有时还包括查询字符串和片段标识符。
    示例:/example.htmlhttp://www.example.com/page1https://api.example.com/users?id=123

  • 协议版本(Protocol Version):指定客户端使用的HTTP协议版本。常见的协议版本包括:

    • HTTP/1.1:当前广泛使用的HTTP版本。

    • HTTP/2:较新的HTTP协议版本,引入了多路复用和二进制传输等特性。

    • HTTP/3:基于UDP的新一代HTTP协议,旨在提供更快的性能和更好的安全性。

示例:

GET /example.html HTTP/1.1
POST /api/users HTTP/1.1
PUT /api/products/123 HTTP/1.1
DELETE /api/users/456 HTTP/1.1

请求行是HTTP请求的第一部分,它指定了客户端要执行的操作、目标资源的位置和使用的协议版本。服务器根据请求行来处理和响应请求。

3.2 请求头

HTTP请求头是在HTTP请求中传递附加信息的部分。以下是一些常见的HTTP请求头部字段及其示例:

  • Accept:指定客户端能够接受的媒体类型。
    示例:Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp

  • Accept-Language:指定客户端首选的自然语言。
    示例:Accept-Language: en-US,en;q=0.9,fr;q=0.8

  • Accept-Encoding:指定客户端能够接受的内容编码方式。
    示例:Accept-Encoding: gzip, deflate, br

  • User-Agent:标识客户端应用程序的名称和版本信息。
    示例:User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36

  • Referer:指定当前请求的来源页面的URL。
    示例:Referer: https://www.example.com/page1.html

  • Authorization:指定身份验证凭据,用于访问受保护的资源。
    示例:Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

  • Cookie:在请求中携带与请求关联的Cookie数据。
    示例:Cookie: sessionid=abcd1234; userid=5678

  • Content-Type:指定请求正文的媒体类型。
    示例:Content-Type: application/json

  • Content-Length:指定请求正文的长度,以字节为单位。
    示例:Content-Length: 1024

  • Host:指定服务器的主机名和端口号。
    示例:Host: www.example.com

  • If-Modified-Since:指定自从指定日期之后,资源是否被修改过。
    示例:If-Modified-Since: Sat, 02 Oct 2021 10:00:00 GMT

  • Cache-Control:指定缓存机制的行为。
    示例:Cache-Control: max-age=3600

这些示例只是常见HTTP请求头部字段的一部分。实际应用中,根据具体需求,您可以选择适当的请求头部字段,并根据标准规范设置请求头部信息。

3.3 请求体

HTTP请求体(HTTP Request Body)是HTTP请求中可选的部分,用于传输请求的数据或内容。请求体通常用于POST、PUT等请求方法,用于向服务器提交数据或更新资源。请求体的格式和内容类型由请求头部的Content-Type字段指定。以下是一些常见的HTTP请求体内容类型及其示例:

  • application/x-www-form-urlencoded:表单数据编码格式,键值对使用key=value的形式,多个键值对使用&符号分隔。
    示例:key1=value1&key2=value2&key3=value3

  • multipart/form-data:用于上传文件或二进制数据,多个字段和内容以分隔符分隔,每个字段包含头部和内容部分。
    示例:

--分割线--
Content-Disposition: form-data; name="file"; filename="example.jpg"
Content-Type: image/jpeg<binary data>
--分割线--
  • application/json:JSON格式的数据。
    示例:{“key1”: “value1”, “key2”: “value2”, “key3”: “value3”}

  • text/plain:纯文本数据。
    示例:This is the request body.

  • application/xml:XML格式的数据。
    示例:

<?xml version="1.0" encoding="UTF-8"?>
<root><key1>value1</key1><key2>value2</key2><key3>value3</key3>
</root>
  • application/octet-stream:二进制数据流。
    示例:Binary data stream.

请求体的内容类型由请求头部的Content-Type字段指定,服务器根据Content-Type来解析请求体的内容。根据实际需求,您可以选择适当的内容类型,并将相应的数据编码为请求体发送给服务器。请注意,GET请求通常不包含请求体,而是将参数附加在URL的查询字符串中。

3.4 状态行

HTTP状态行(HTTP Status Line)是HTTP响应的第一行,它包含了服务器对客户端请求的处理结果的描述。状态行由三个主要部分组成:协议版本、状态码和状态描述。以下是HTTP状态行的结构和示例:

<协议版本> <状态码> <状态描述>
  • 协议版本(Protocol Version):指定服务器使用的HTTP协议版本。常见的协议版本包括:

    • HTTP/1.1:当前广泛使用的HTTP版本。

    • HTTP/2:较新的HTTP协议版本,引入了多路复用和二进制传输等特性。

    • HTTP/3:基于UDP的新一代HTTP协议,旨在提供更快的性能和更好的安全性。

  • 状态码(Status Code):用于表示服务器对请求的处理结果的数字代码。HTTP状态码共有五个类别,每个类别以不同的数字开头:

    • 1xx(Informational):信息性状态码,指示请求已被接收并正在处理。

    • 2xx(Success):成功状态码,指示请求已成功被服务器接收、理解和处理。

    • 3xx(Redirection):重定向状态码,指示客户端需要采取进一步的操作来完成请求。

    • 4xx(Client Error):客户端错误状态码,指示客户端发送的请求有错误。

    • 5xx(Server Error):服务器错误状态码,指示服务器在处理请求时发生了错误。

  • 状态描述(Status Description):对状态码的简短描述,用于更详细地说明状态码的含义。

示例:

HTTP/1.1 200 OK
HTTP/1.1 404 Not Found
HTTP/1.1 500 Internal Server Error

状态行中的协议版本指示服务器使用的HTTP协议版本,状态码表示请求处理的结果,状态描述提供了更详细的说明。客户端可以根据状态行中的状态码和描述来判断请求的处理结果,并根据需要采取相应的操作。

3.5 响应头

HTTP响应头是在HTTP协议中用于传输关于响应的元数据的一种机制。它包含了关于响应的各种信息,如响应的状态码、内容类型、缓存控制、安全性等。

以下是一些常见的HTTP响应头:

  • Content-Type:指定响应主体的媒体类型,例如"text/html"用于HTML文档。

  • Content-Length:指定响应主体的长度,以字节为单位。

  • Cache-Control:指定响应的缓存策略,如"no-cache"表示不缓存响应。

  • Location:用于重定向响应,指定新的URL位置。

  • Set-Cookie:设置一个或多个Cookie,用于在客户端存储数据。

  • Expires:指定响应的过期时间,浏览器将在此时间后重新请求资源。

  • ETag:用于缓存验证,表示资源的唯一标识。

  • Last-Modified:指定资源的最后修改时间。

这只是一些常见的HTTP响应头,实际上还有很多其他的头部字段可用于传递其他信息。HTTP响应头的具体使用取决于服务器和应用程序的需求。

3.6 响应体

HTTP响应体是HTTP协议中包含的响应消息的主体部分,它包含了服务器返回给客户端的实际数据或资源。下面是一些常见的HTTP响应体的示例:

  • HTML页面响应体示例:
<!DOCTYPE html>
<html>
<head><title>我的网站</title>
</head>
<body><h1>欢迎来到我的网站!</h1><p>这是一个HTML响应体的例子。</p>
</body>
</html>
  • JSON格式数据响应体示例:
{"name": "张三","age": 30,"email": "zhangsan@example.com"
}
  • XML格式数据响应体示例:
<user><name>张三</name><age>30</age><email>zhangsan@example.com</email>
</user>
  • 图片文件响应体示例:
    (二进制数据)

  • 文本文件响应体示例:

这是一个文本文件的内容。
它可以包含任何纯文本数据。
  1. 错误响应体示例:
<!DOCTYPE html>
<html>
<head><title>404 Not Found</title>
</head>
<body><h1>404 Not Found</h1><p>The requested resource could not be found.</p>
</body>
</html>

这些示例展示了HTTP响应体的不同类型和格式。具体的响应体内容取决于服务器端的处理逻辑和客户端的请求。

4. Cookie 状态管理

HTTP Cookie状态管理是指在客户端和服务器之间使用Cookie来跟踪和管理用户会话状态的过程。通过使用Cookie,服务器可以存储和检索与特定用户相关的信息,从而实现用户状态的跟踪和管理。

以下是HTTP Cookie状态管理的一般过程:

  • 会话初始化:当用户首次访问网站时,服务器可以创建一个唯一的会话标识符,并将其存储在Cookie中。这个会话标识符可以作为用户会话的唯一标识。

  • Cookie的发送和存储:当服务器设置了Cookie后,它会在响应头中的Set-Cookie字段中将Cookie发送给客户端。客户端的浏览器会将Cookie存储在本地。

  • Cookie的传输:在后续的请求中,客户端的浏览器会自动在请求头的Cookie字段中包含适当的Cookie信息,并将其发送给服务器。

  • 服务器端的Cookie处理:服务器可以根据Cookie中的信息来识别用户,并维护用户的会话状态。服务器可以从请求头的Cookie字段中提取Cookie值,并根据需要进行处理。

  • 更新和删除Cookie:服务器可以通过发送新的Set-Cookie字段来更新Cookie的值或过期时间。要删除Cookie,可以设置过期时间为一个过去的时间。

通过Cookie状态管理,服务器可以跟踪用户的会话状态,例如登录状态、购物车内容、偏好设置等。这使得网站能够提供个性化的用户体验,并为用户提供持久性的会话。

需要注意的是,Cookie的使用应遵循隐私和安全性的最佳实践,以保护用户的个人信息和确保安全性。

5. HTTP 请求示例

您可以使用浏览器发送HTTP请求并接收HTTP响应。在浏览器的地址栏中输入URL,按下回车键即可发送GET请求。

浏览器会自动处理请求头,并显示接收到的HTTP响应,包括状态行、响应头和响应体。

以下是一个使用浏览器发送GET请求和接收HTTP响应的示例:

请求:

GET / HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0

响应:

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 1234<!DOCTYPE html>
<html>
<head><title>Example Domain</title><!-- more HTML content -->
</head>
<body><h1>Hello, World!</h1><!-- more HTML content -->
</body>
</html>

通过浏览器发送HTTP请求和接收HTTP响应的示例可以帮助您更好地理解和实践HTTP请求与响应的过程。

6. 总结

在学习爬虫之前,了解HTTP请求与响应是非常重要的。本文介绍了HTTP请求的基本概念、常见的请求方法和请求头,以及HTTP响应的结构和常见的响应状态码。

通过浏览器发送HTTP请求和接收HTTP响应的示例,您可以更好地理解和实践HTTP请求与响应的过程。这将为您进一步学习爬虫提供良好的基础。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot慢性胃炎管理系统-计算机毕设 附源码 35541

SpringBoot慢性胃炎管理系统 摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;医疗行业当然也不例外。慢性胃炎管理系统是以实际运用为开发背景&#xff0c;运用软件工程…

PLC通过485Modbus转Profinet网关与温控表通讯在发酵罐的应用

前提&#xff1a;在自动化控制系统中&#xff0c;PLC通常需要和各种设备进行数据通讯&#xff0c;其中就包括温控表。而这些设备之间的通讯常常需要通过485Modbus转Profinet网关&#xff08;XD-MDPN100&#xff09;来实现。 方案&#xff1a;在一些应用场合中&#xff0c;Profi…

Spring Boot 3 整合 Spring Cache 与 Redis 缓存实战

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

2023/11/30JAVAweb学习(postman,各种参数,统一响应数据,三层架构,分层解耦,bean组件扫描,Bean注入及解决方式)

数组json形式 想切换实现类,只需要只在你需要的类上添加 Component 如果在同一层,可以更改扫描范围,但是不推荐这种方法 注入时存在多个同类型bean解决方式

C++不同平台下的RTTI实现

给定一个含有虚函数的对象的地址&#xff0c;找到对应的类名&#xff0c;不同平台下方法也不同&#xff0c;这是由于RTTI实现并没有统一的标准。 Linux&#xff1a; #include <iostream> #include <typeinfo>class Person { public:virtual void func(){std::cout…

正则表达式(3):入门

正则表达式&#xff08;3&#xff09;&#xff1a;入门 小结 本博文转载自 从这篇文章开始&#xff0c;我们将介绍怎样在Linux中使用”正则表达式”&#xff0c;如果你想要学习怎样在Linux中使用正则表达式&#xff0c;这些文章就是你所需要的。 在认识”正则表达式”之前&am…

ODN光纤链路全程衰减如何计算

在FTTH等宽带光纤接入工程设计中&#xff0c;需根据应用系统的相应波长计算ODN光纤链路的全程衰减&#xff0c;一方面验证是否满足系统的光功率预算指标要求&#xff0c;另一方面作为工程验收的参考指标。 1 计算方法 ODN光纤链路的全程衰减是指从OLT至ONU的光纤链路中&#xf…

LinuxBasicsForHackers笔记 -- 控制文件和目录权限

对于每个文件和目录&#xff0c;我们可以指定文件所有者、特定用户组以及所有其他用户的权限状态。 不同类型的用户 在Linux中&#xff0c;root用户是拥有一切权力的。 root 用户基本上可以在系统上执行任何操作。 系统上的其他用户具有有限的能力和权限&#xff0c;并且几乎…

PHP项目启动记录

PHP项目启动记录 1. 项目整体目录2. bash_profile3. nginx的conf配置4. vim /etc/hosts5. php -v6.修改nginx后重新加载nginx7. npm run watch-app --moduleattendance --platformmobile8. vim ~/.zshrc 1. 项目整体目录 2. bash_profile ~/.bash_profile是Mac系统中的一个配置…

JVM之垃圾回收与算法(四)

垃圾回收与算法 1.如何确定垃圾 1.1. 引用计数法 在 Java 中&#xff0c;引用和对象是有关联的。如果要操作对象则必须用引用进行。因此&#xff0c;很显然一个简单的办法是通过引用计数来判断一个对象是否可以回收。简单说&#xff0c;即一个对象如果没有任何与之关联的引用…

网页文章采集工具-人工智能AI功能

简数采集器是一款支持人工智能AI功能的网页文章采集工具&#xff0c;它可以调用百度的文心一言AI对采集的数据进行分析&#xff0c;处理&#xff0c;内容创作等等&#xff0c;根据你的需求进行更加灵活的数据采集和处理。 文心一言人工智能AI功能使用方法&#xff1a; 1. 填写…

7、Qt延时的使用

一、说明 平时用到两种延时方式QThread::sleep()和QTimer::singleShot() 1、QThread::sleep() QThread类中如下三个静态函数&#xff1a; QThread::sleep(n); //延迟n秒 QThread::msleep(n); //延迟n毫秒 QThread::usleep(n); //延迟n微妙 这种方式使用简单&#xff0c;但是会阻…

OpenAI发布一周年,那些声称超过它的模型都怎么样了?

这篇报告详尽地回顾了自ChatGPT发布一年以来&#xff0c;各种声称与ChatGPT相当或更优的开源大语言模型在各种任务上的表现&#xff01;报告整合了各种评估基准&#xff0c;分析了开源LLMs与ChatGPT在不同任务上的比较。 包括一般能力、代理能力、逻辑推理能力、长文本建模能力…

Java生成word[doc格式转docx]

引入依赖 <!-- https://mvnrepository.com/artifact/org.freemarker/freemarker --><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.32</version></dependency> doc…

Mybatis中的设计模式

Mybatis中的设计模式 Mybatis中使用了大量的设计模式。 以下列举一些看源码时&#xff0c;觉得还不错的用法&#xff1a; 创建型模式 工厂方法模式 DataSourceFactory 通过不同的子类工厂&#xff0c;实例化不同的DataSource TransactionFactory 通过不同的工厂&#xff…

17:00面试,17:06就出来了,问的问题有点变态。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到8月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%,…

css新闻链接案例

利用html和css构建出新闻链接案例&#xff0c;使用渐变色做出背景色变化 background: linear-gradient(to bottom, rgb(137, 210, 251), rgb(238, 248, 254), white); 利用背景图片&#xff0c;调整位置完成 dd { height: 28px; line-height: 28px; background-image: url(./图…

@Scheduled,Quartz,XXL-JOB三种定时任务总结

Scheduled&#xff0c;Quartz&#xff0c;XXL-JOB三种定时任务总结 一、Scheduled 简介 Scheduled 是 Spring 框架中用于声明定时任务的注解。通过使用 Scheduled 注解&#xff0c;你可以指定一个方法应该在何时执行&#xff0c;无需依赖外部的调度器。 这个注解通常与Enab…

判断是否存在重复的数

系列文章目录 进阶的卡莎C_睡觉觉觉得的博客-CSDN博客数1的个数_睡觉觉觉得的博客-CSDN博客双精度浮点数的输入输出_睡觉觉觉得的博客-CSDN博客足球联赛积分_睡觉觉觉得的博客-CSDN博客大减价(一级)_睡觉觉觉得的博客-CSDN博客小写字母的判断_睡觉觉觉得的博客-CSDN博客纸币(C…

(C语言)通过循环按行顺序为一个矩阵赋予1,3,5,7,9,等奇数,然后输出矩阵左下角的值。

#include<stdio.h> int main() {int a[5][5];int n 1;for(int i 0;i < 5;i ){for(int j 0;j < 5;j ){a[i][j] n;n 2;}}for(int i 0;i < 5;i ){for(int j 0;j < i;j )printf("%-5d",a[i][j]);printf("\n");}return 0; } 运行截图…