【100天精通python】Day42:python网络爬虫开发_HTTP请求库requests 常用语法与实战

目录

1 HTTP协议

2  HTTP与HTTPS

3 HTTP请求过程

 3.1 HTTP请求过程

3.2 GET请求与POST请求

3.3 常用请求报头

3.4 HTTP响应

4 HTTP请求库requests 常用语法

4.1 发送GET请求

 4.2 发送POST请求

4.3 请求参数和头部

4.4 编码格式

4.5 requests高级操作-文件上传

4.6 requests高级操作-获取cookie

4.7 request高级操作-证书验证

5 实战

利用requests 库抓取2023年高考新闻的标题和链接


1 HTTP协议

        HTTP协议(Hypertext Transfer Protocol): HTTP是一种用于在客户端和服务器之间传输数据的协议。它基于请求-响应模型,客户端发送HTTP请求,服务器返回HTTP响应。HTTP协议主要用于Web浏览器和服务器之间的通信,用于获取、传输和展示Web页面和资源。

        在网络爬虫中,HTTP(Hypertext Transfer Protocol)协议起着至关重要的作用,它是用于在客户端和服务器之间传输数据的协议。下面是HTTP协议在爬虫中的一些关键作用:

  1. 获取网页内容: 爬虫使用HTTP协议来向服务器发送请求,以获取网页的内容。通过发送GET请求,爬虫能够请求服务器返回网页的HTML代码。

  2. 发送请求: 爬虫可以使用不同的HTTP请求方法,如GET、POST、PUT等,来向服务器发送不同类型的请求。GET请求用于获取资源,而POST请求用于提交数据,PUT请求用于更新资源,等等。

  3. 传递参数: 爬虫可以通过HTTP请求的URL参数或请求体参数来传递各种数据,如查询参数、表单数据等。这在爬取特定数据或进行搜索时非常有用。

  4. 设置请求头: 爬虫可以在HTTP请求中设置请求头,包括User-Agent、Referer、Cookie等,以模拟不同类型的浏览器行为,或者绕过网站的反爬措施。

  5. 处理响应: 服务器返回HTTP响应,其中包含状态码、响应头和响应体。爬虫可以根据状态码来判断请求是否成功,从响应头中获取信息,以及从响应体中提取网页内容。

  6. 解析HTML内容: 爬虫通过解析HTML内容,从中提取所需的信息。这通常涉及使用库(如Beautiful Soup)来解析网页的DOM结构。

  7. 模拟登录: 对于需要登录才能访问的网站,爬虫可以通过模拟POST请求提交登录表单,以获取登录后的数据。

  8. 反爬处理: 爬虫可能会遇到网站的反爬机制,如限制访问频率、验证码等。在这种情况下,爬虫需要适当调整请求头、使用代理IP等来绕过这些限制。

        总之,HTTP协议是爬虫工作的基础,通过向服务器发送请求和解析服务器的响应,爬虫可以从网页中获取所需的数据,然后进行处理、分析和存储。同时,了解HTTP协议的各种特性和机制,能够帮助爬虫更有效地操作和与服务器交互。

1.1 HTTP请求结构

         一个HTTP请求由以下几部分组成:

  1. 请求行(Request Line): 包含请求方法、目标URL和协议版本。
  2. 请求头(Request Headers): 包含关于请求的元信息,如User-Agent、Accept、Cookie等。
  3. 空行: 用于分隔请求头和请求体。
  4. 请求体(Request Body): 仅在使用POST等方法时出现,包含请求的实际数据。

1.2 HTTP响应结构

         一个HTTP响应由以下几部分组成:

  1. 状态行(Status Line): 包含协议版本、状态码和状态信息。
  2. 响应头(Response Headers): 包含关于响应的元信息,如Content-Type、Content-Length等。
  3. 空行: 用于分隔响应头和响应体。
  4. 响应体(Response Body): 包含响应的实际数据,如HTML内容、JSON数据等。

1.3 常见的HTTP方法

  1. GET: 用于从服务器获取数据,将数据附加在URL中。
  2. POST: 用于向服务器提交数据,将数据包含在请求体中。
  3. PUT: 用于更新服务器上的资源,将数据包含在请求体中。
  4. DELETE: 用于从服务器删除资源,将数据附加在URL中。
  5. HEAD: 类似于GET,但只返回响应头,用于获取资源的元信息。
  6. OPTIONS: 用于查询服务器支持的HTTP方法。

1.4 常见的HTTP状态码:

  1. 200 OK: 请求成功。
  2. 201 Created: 资源已成功创建。
  3. 400 Bad Request: 请求有误。
  4. 401 Unauthorized: 请求未经授权。
  5. 403 Forbidden: 服务器拒绝请求。
  6. 404 Not Found: 请求的资源不存在。
  7. 500 Internal Server Error: 服务器内部错误。

示例: 以下是一个简单的示例,演示如何使用Python的http.server模块创建一个简单的HTTP服务器,并发送GET和POST请求。您可以在终端中运行此示例,然后在浏览器中访问相应的URL。

# 创建一个简单的HTTP服务器
# 在终端运行:python http_server_example.py
import http.server
import socketserverclass MyHandler(http.server.SimpleHTTPRequestHandler):def do_GET(self):self.send_response(200)self.send_header('Content-type', 'text/html')self.end_headers()self.wfile.write(b'Hello, GET request!')def do_POST(self):content_length = int(self.headers['Content-Length'])post_data = self.rfile.read(content_length)self.send_response(200)self.send_header('Content-type', 'text/html')self.end_headers()response = f'Hello, POST request! Data: {post_data.decode()}'self.wfile.write(response.encode())if __name__ == "__main__":PORT = 8000with socketserver.TCPServer(("", PORT), MyHandler) as httpd:print(f"Serving at port {PORT}")httpd.serve_forever()

        在浏览器中访问http://localhost:8000可以看到服务器响应。可以使用工具如curl或者requests库发送HTTP请求并接收响应。

2  HTTP与HTTPS

        HTTP(Hypertext Transfer Protocol)和HTTPS(Hypertext Transfer Protocol Secure)都是用于在客户端和服务器之间传输数据的协议,但它们之间存在着重要的安全和加密差异。

HTTP(Hypertext Transfer Protocol): HTTP是一种用于传输超文本数据的协议,它在Web浏览器和Web服务器之间进行通信。HTTP协议是明文传输的,这意味着传输的数据不加密,可能容易被窃听和篡改。它通常使用80端口进行通信

HTTPS(Hypertext Transfer Protocol Secure): HTTPS是HTTP的安全版本,它通过使用加密和认证机制来保护传输的数据。在HTTPS中,数据被加密后传输,从而更难以被窃听和篡改。为了实现加密,HTTPS使用了SSL(Secure Sockets Layer)或TLS(Transport Layer Security)协议。HTTPS通常使用443端口进行通信

主要区别:

  1. 安全性: 最显著的区别是安全性。HTTP不加密数据,而HTTPS通过加密保护数据传输,确保数据的机密性和完整性。

  2. 加密: HTTPS使用SSL或TLS协议对数据进行加密,使得数据在传输过程中无法被轻易窃听或篡改。HTTP不提供加密,数据可能被第三方监视和修改。

  3. 认证: HTTPS在加密过程中还可以对服务器进行身份认证,确保您与正确的服务器进行通信。HTTP不提供此功能,可能容易受到中间人攻击。

  4. URL前缀: HTTP的URL以 "http://" 开头,而HTTPS的URL以 "https://" 开头。

        虽然HTTPS在安全性方面优于HTTP,但由于加密和解密过程会带来一些计算开销,所以HTTPS稍微比HTTP慢一些。然而,随着计算能力的提升,HTTPS的性能差距逐渐减小。

        在现代网络中,保护用户隐私和数据的安全性非常重要,因此,许多网站都在切换到使用HTTPS来确保用户数据的保护。

3 HTTP请求过程

 3.1 HTTP请求过程

         HTTP请求过程涉及客户端向服务器发送请求,服务器处理请求并返回响应。以下是HTTP请求的基本过程:

  1. 客户端发起HTTP请求,包括请求方法(GET、POST等)、目标URL、请求头、请求体等。
  2. 服务器接收并处理请求,根据请求方法和URL找到对应的资源。
  3. 服务器生成HTTP响应,包括状态码、响应头、响应体等。
  4. 服务器将响应发送回客户端。
  5. 客户端接收响应并处理响应内容。

3.2 GET请求与POST请求

         GET和POST是HTTP请求方法,用于向服务器发送请求。

  • GET请求: 用于从服务器获取数据,通过URL传递参数,请求参数在URL中可见,适用于获取数据。
  • POST请求: 用于向服务器提交数据,请求参数在请求体中传递,对数据进行添加、修改等操作。

3.3 常用请求报头

         HTTP请求中的请求报头(Request Headers)包含关于请求的额外信息,如用户代理、内容类型等。以下是一些常见的请求报头:

  • User-Agent: 标识客户端(通常是浏览器)的类型和版本。
  • Content-Type: 指定请求体的媒体类型(如application/json、application/x-www-form-urlencoded等)。
  • Authorization: 包含认证凭据,用于进行身份验证。
  • Referer: 指示请求的来源URL,用于防止CSRF攻击。
  • Cookie: 包含客户端的Cookie信息,用于保持会话状态。

3.4 HTTP响应

         HTTP响应包含服务器对请求的处理结果,包括状态码、响应头、响应体等。

  • 状态码(Status Code): 表示服务器对请求的处理状态,如200 OK表示成功,404 Not Found表示未找到资源。
  • 响应头(Response Headers): 包含关于响应的元信息,如Content-Type、Server等。
  • 响应体(Response Body): 包含实际的响应内容,如网页的HTML内容、JSON数据等。

以下是一个示例,演示使用Python的requests库发送GET请求,然后解析并打印响应内容:

import requestsurl = 'https://www.example.com'
response = requests.get(url)print("Status Code:", response.status_code)
print("Headers:", response.headers)
print("Content:", response.text)

4 HTTP请求库requests 常用语法

  requests是一个常用的Python库,用于发送HTTP请求和处理HTTP响应。以下是requests库的基本用法示例:

首先,确保您已经安装了requests库。如果没有安装,您可以使用以下命令进行安装:

pip install requests

然后,您可以在Python代码中导入requests库并使用它发送HTTP请求和处理响应。

4.1 发送GET请求

        使用requests.get()方法,以下示例演示如何使用requests库发送一个简单的GET请求并处理响应:

import requests# 发送GET请求获取网页内容
url = 'https://www.baidu.com'  # 替换为您要访问的网页URL
response = requests.get(url)
response.encoding = 'utf-8'  # 指定编码为UTF-8
html_content = response.text# 输出网页内容
print(html_content)

常用语法:

发起GET请求

import requestsresponse = requests.get('https://www.example.com')
print(response.text)  # 输出响应内容

发起带参数的GET请求

params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('https://www.example.com', params=params)

 发送请求并设置Headers

headers = {'User-Agent': 'My User Agent'}
response = requests.get('https://www.example.com', headers=headers)

获取响应状态码

response = requests.get('https://www.example.com')
status_code = response.status_code

 获取响应头部信息

response = requests.get('https://www.example.com')
headers = response.headers

获取响应内容(字节)

response = requests.get('https://www.example.com')
content = response.content

 获取响应内容(文本)

response = requests.get('https://www.example.com')
text = response.text

处理响应中的JSON数据

response = requests.get('https://api.example.com/data.json')
data = response.json()

 处理超时

try:response = requests.get('https://www.example.com', timeout=5)  # 5秒超时
except requests.Timeout:print("请求超时")

处理异常

try:response = requests.get('https://www.example.com')response.raise_for_status()  # 抛出HTTP错误状态码异常
except requests.HTTPError as http_err:print(f"HTTP错误: {http_err}")
except requests.RequestException as req_err:print(f"请求异常: {req_err}")

 4.2 发送POST请求

以下示例演示如何使用requests库发送一个POST请求并附带数据:

import requests# 登录URL和登录所需的数据
login_url = 'https://mail.163.com/'
login_data = {'username': 'your_username',  # 替换为您的邮箱用户名'password': 'your_password'   # 替换为您的邮箱密码
}# 创建会话对象
session = requests.Session()# 发送POST请求模拟登录
response = session.post(login_url, data=login_data)# 检查登录是否成功
if '退出' in response.text:print("Login successful.")
else:print("Login failed.")

        在这个示例代码中,我们使用requests.Session()来创建一个会话对象,这样可以在多个请求之间保持会话状态。然后,我们使用session.post()方法发送POST请求来模拟登录。在这个例子中,我们使用了163邮箱的登录页面作为示范,您需要替换login_urllogin_data为实际的登录URL和登录所需的数据。

        请注意,这只是一个简单示例,实际的网站可能会有更复杂的登录逻辑,如验证码、动态令牌等。同时,爬虫访问网站时需要遵守网站的使用规则和政策,确保您的行为合法和合规。

常用语法:

发送POST请求 

data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('https://www.example.com', data=data)

 发送JSON数据的POST请求

import jsondata = {'key1': 'value1', 'key2': 'value2'}
headers = {'Content-Type': 'application/json'}
response = requests.post('https://www.example.com', data=json.dumps(data), headers=headers)

4.3 请求参数和头部

        在使用requests库发送HTTP请求时,您可以通过请求参数和头部来传递附加的信息。请求参数通常用于GET请求或者带有查询参数的请求,而请求头部用于传递各种信息,如用户代理、Cookie等。以下是关于请求参数和头部的示例代码:

import requests# 请求参数示例
params = {'key1': 'value1','key2': 'value2'
}# 请求头部示例
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36','Referer': 'https://www.baiud.com','Cookie': 'your_cookie_data'
}# 发送GET请求,带参数和头部
url = 'https://www.baidu.com'  # 替换为您要访问的网页URL
response = requests.get(url, params=params, headers=headers)# 输出响应内容
print(response.text)

4.4 编码格式

        在使用requests库发送HTTP请求时,编码格式(也称为字符集或字符编码)是指用于解码响应内容的规则。requests库会尝试自动识别并设置响应的编码格式,但有时您可能需要手动设置编码以确保正确解析响应内容。

以下是一些关于编码格式的详解和示例:

  1. 自动识别编码: 默认情况下,requests库会根据响应头中的Content-Type字段来尝试自动识别响应的编码格式。例如,如果Content-Type中包含charset=utf-8requests会使用UTF-8编码来解码响应内容。

  2. 手动设置编码: 如果自动识别的编码不正确,您可以手动设置编码来解决乱码问题。通过将response.encoding设置为适当的编码,可以确保正确解码响应内容。

下面是一个示例,演示了如何手动设置编码格式以正确解析响应内容:

import requests# 发送GET请求获取网页内容
url = 'https://www.baidu.com'  # 替换为您要访问的网页URL
response = requests.get(url)
response.encoding = 'utf-8'  # 手动设置编码为UTF-8# 输出响应内容
print(response.text)

4.5 requests高级操作-文件上传

    requests库允许您发送文件上传请求,即将文件作为请求的一部分发送到服务器。这在与包含文件上传功能的API进行交互时非常有用。

        要发送文件上传请求,您可以使用requests.post()方法,并通过files参数传递要上传的文件。files参数应该是一个字典,其中键是字段名称,值是文件对象。文件对象可以通过open()函数来创建。

以下是一个简单的文件上传示例,假设您要将一个本地文件上传到服务器:

import requests# 目标URL和文件路径
url = 'https://www.example.com/upload'  # 替换为实际的上传URL
file_path = 'path/to/your/file.txt'  # 替换为实际的文件路径# 创建文件对象
with open(file_path, 'rb') as file:files = {'file': file}  # 'file'是字段名称,可以根据实际情况更改# 发送文件上传请求response = requests.post(url, files=files)# 输出响应内容
print(response.text)

在这个示例中,我们使用open()函数以二进制模式打开文件,然后将文件对象传递给files参数。在files字典中,键是服务器期望接收的字段名称,值是文件对象。您需要将'file'替换为实际字段名称。

请注意,实际的服务器可能需要其他额外的字段或参数,如身份验证、令牌等。您需要根据实际情况调整代码。

4.6 requests高级操作-获取cookie

        在requests库中,您可以通过response.cookies属性来获取从服务器接收的Cookie信息。Cookies是服务器在HTTP响应头中设置的一些键值对,用于在客户端和服务器之间存储状态信息。以下是获取Cookie的详细说明和示例:

import requests# 发送GET请求获取网页内容
url = 'https://www.example.com'  # 替换为您要访问的网页URL
response = requests.get(url)# 获取响应中的Cookie信息
cookies = response.cookies# 打印Cookie信息
for cookie in cookies:print("Name:", cookie.name)print("Value:", cookie.value)

        在这个示例中,我们使用requests.get()方法发送GET请求,并通过response.cookies属性来获取响应中的Cookie信息。response.cookies返回一个RequestsCookieJar对象,您可以通过遍历它来获取每个Cookie的名称和值。

        请注意,响应中可能会包含多个Cookie,每个Cookie都是一个键值对。您可以根据实际需求进一步处理这些Cookie信息,如存储到会话中、发送到下一个请求中等。

此外,如果您想手动设置Cookie并在后续请求中使用它们,可以通过在请求头部中添加Cookie字段来实现。例如:

import requests# 设置Cookie
cookies = {'cookie_name': 'cookie_value'}# 发送GET请求并添加Cookie到请求头部
url = 'https://www.example.com'  # 替换为您要访问的网页URL
response = requests.get(url, cookies=cookies)# 处理响应...

 在这个示例中,我们使用cookies参数将要发送的Cookie信息添加到请求中。这对于需要手动处理Cookie的情况非常有用。

4.7 request高级操作-证书验证

requests库中,您可以通过verify参数来控制是否对SSL证书进行验证。SSL证书验证是用于确保与服务器建立安全的加密连接的过程。默认情况下,requests库会验证SSL证书,但您可以通过设置verify参数来禁用验证或提供自定义证书。

以下是关于证书验证的详细说明和示例:

  1. 默认验证: 默认情况下,requests库会验证SSL证书。这是安全的做法,确保与服务器之间的通信是加密的。例如:

import requests# 发送GET请求
url = 'https://www.example.com'  # 替换为您要访问的网页URL
response = requests.get(url)# 处理响应...

禁用验证: 在某些情况下,您可能想要禁用证书验证,例如访问自签名证书的服务器。您可以通过将verify参数设置为False来禁用验证:

import requests# 发送GET请求并禁用证书验证
url = 'https://www.example.com'  # 替换为您要访问的网页URL
response = requests.get(url, verify=False)# 处理响应...

 请注意,禁用证书验证会降低安全性,仅在了解风险的情况下使用。

自定义证书: 如果需要连接到使用自定义证书的服务器,您可以提供证书文件的路径作为verify参数的值:

import requests# 发送GET请求并使用自定义证书进行验证
url = 'https://www.example.com'  # 替换为您要访问的网页URL
response = requests.get(url, verify='/path/to/custom/certificate.pem')# 处理响应...

 在这个示例中,/path/to/custom/certificate.pem是您的自定义证书文件的路径。

 请注意,为了保护您的数据安全,建议在实际应用中保持证书验证的开启状态。如果您需要在特定情况下禁用或自定义证书验证,请确保您理解可能的安全风险并采取适当的措施。

5 实战

利用requests 库抓取2023年高考新闻的标题和链接

import requests
from bs4 import BeautifulSoup
import timedef fetch_news_by_page(page_number):keyword = "2023年高考录取"results_per_page = 10pn = (page_number - 1) * results_per_page# 构造搜索的URL,包括搜索关键词和分页参数url = f"https://www.baidu.com/s?wd={keyword}&pn={pn}"# 添加头部信息模拟浏览器请求headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36","Referer": "https://www.baidu.com/"}# 发送请求response = requests.get(url, headers=headers)# 如果请求成功if response.status_code == 200:# 解析网页内容soup = BeautifulSoup(response.text, 'html.parser')news_list = []# 找到所有的新闻标题和链接for news in soup.find_all('div', class_='result'):title_elem = news.find('h3', class_='t')title = title_elem.get_text() if title_elem else Nonelink_elem = news.find('a')link = link_elem['href'] if link_elem and 'href' in link_elem.attrs else Noneif title and link:news_list.append({"title": title, "link": link})return news_listelse:print("请求失败,状态码:", response.status_code)return Noneif __name__ == "__main__":for page in range(1, 4):  # 输出前三页print(f"第{page}页的搜索结果:")news = fetch_news_by_page(page)if news:for idx, item in enumerate(news, start=1):print(f"{idx}. {item['title']}")print(f"   Link: {item['link']}")print("=" * 50)else:print("没有搜索结果。")time.sleep(2)  # 添加延时,模拟人类浏览行为

输出如下:

         这段代码是一个Python网络爬虫,用于从百度搜索引擎中抓取关于"2023年高考录取"的新闻标题和链接。

  1. 首先,它导入了requests库(用于发送HTTP请求)、BeautifulSoup库(用于解析HTML文档)和time库(用于暂停程序执行)。

  2. 首先,它定义了一个函数fetch_news_by_page(),这个函数接受一个参数page_number,表示要抓取的页数。

  3. 在函数内部,首先定义了搜索关键词"2023年高考录取"和每页显示的结果数量results_per_page。

  4. 然后,构造了百度搜索的URL,包括搜索关键词和分页参数。这里使用了f-string格式化字符串,将page_number和results_per_page插入到URL中。

  5. 接着,定义了一个headers字典,其中包含了User-Agent和Referer两个字段,用于模拟浏览器发送请求。

  6. 使用requests.get()函数发送GET请求,将headers字典作为参数传入。

  7. 如果请求成功(即HTTP状态码为200),则使用BeautifulSoup解析返回的HTML文档。

  8. 在解析后的HTML文档中,找到所有的新闻标题和链接。这里使用了find_all()函数查找所有class为'result'的div元素,然后在每个div元素中查找h3标签(class为't')和a标签。

  9. 如果找到了标题和链接,就添加到news_list列表中。

  10. 最后,如果请求失败,就打印出失败的状态码,并返回None。

  11. 在主程序中,调用fetch_news_by_page()函数,遍历前三页的搜索结果,并打印出来。为了避免频繁的网络请求,每次打印结果后都暂停了2秒。

上一篇:

【100天精通python】Day41:python网络爬虫开发_爬虫基础入门_LeapMay的博客-CSDN博客网络爬虫(Web Crawler),是一种自动化程序,用于在互联网上浏览和抓取信息。爬虫可以遍历网页,收集数据,提取信息,以便于进一步处理和分析。网络爬虫在搜索引擎、数据采集、信息监测等领域发挥着重要作用。1.1 工作原理初始URL选择: 爬虫从一个或多个初始URL开始,这些URL通常是你希望开始爬取的网站的主页或其他页面。发送HTTP请求: 对于每个初始URL,爬虫会发送HTTP请求以获取网页内容。https://blog.csdn.net/qq_35831906/article/details/132377113?spm=1001.2014.3001.5502

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

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

相关文章

Spring Boot 统一功能处理

目录 1.用户登录权限效验 1.1 Spring AOP 用户统一登录验证的问题 1.2 Spring 拦截器 1.2.1 自定义拦截器 1.2.2 将自定义拦截器加入到系统配置 1.3 拦截器实现原理 1.3.1 实现原理源码分析 2. 统一异常处理 2.1 创建一个异常处理类 2.2 创建异常检测的类和处理业务方法 3. 统一…

【Spring系列篇--关于IOC的详解】

目录 面试经典题目: 1. 什么是spring?你对Spring的理解?简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。 2.什么是IoC?你对IoC的理解?IoC的重要性?将实例化对象的权利从程序员…

Centos 8 网卡connect: Network is unreachable错误解决办法

现象1、ifconfig没有ens160配置 [testlocalhost ~]$ ifconfig lo: flags73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopba…

基于深度学习的指针式仪表倾斜校正方法——论文解读

中文论文题目:基于深度学习的指针式仪表倾斜校正方法 英文论文题目&#xff1a;Tilt Correction Method of Pointer Meter Based on Deep Learning 周登科、杨颖、朱杰、王库.基于深度学习的指针式仪表倾斜校正方法[J].计算机辅助设计与图形学学报, 2020, 32(12):9.DOI:10.3724…

【Java】智慧工地SaaS平台源码:AI/云计算/物联网/智慧监管

智慧工地是指运用信息化手段&#xff0c;围绕施工过程管理&#xff0c;建立互联协同、智能生产、科学管理的施工项目信息化生态圈&#xff0c;并将此数据在虚拟现实环境下与物联网采集到的工程信息进行数据挖掘分析&#xff0c;提供过程趋势预测及专家预案&#xff0c;实现工程…

《强化学习:原理与Python实战》——可曾听闻RLHF

前言&#xff1a; RLHF&#xff08;Reinforcement Learning with Human Feedback&#xff0c;人类反馈强化学习&#xff09;是一种基于强化学习的算法&#xff0c;通过结合人类专家的知识和经验来优化智能体的学习效果。它不仅考虑智能体的行为奖励&#xff0c;还融合了人类专家…

kafka安装说明以及在项目中使用

一、window 安装 1.1、下载安装包 下载kafka 地址&#xff0c;其中官方版内置zk&#xff0c; kafka_2.12-3.4.0.tgz其中这个名称的意思是 kafka3.4.0 版本 &#xff0c;所用语言 scala 版本为 2.12 1.2、安装配置 1、解压刚刚下载的配置文件&#xff0c;解压后如下&#x…

【机器学习】处理不平衡的数据集

一、介绍 假设您在一家给定的公司工作&#xff0c;并要求您创建一个模型&#xff0c;该模型根据您可以使用的各种测量来预测产品是否有缺陷。您决定使用自己喜欢的分类器&#xff0c;根据数据对其进行训练&#xff0c;瞧&#xff1a;您将获得96.2%的准确率&#xff01; …

Integer中缓存池讲解

文章目录 一、简介二、实现原理三、修改缓存范围 一、简介 Integer缓存池是一种优化技术&#xff0c;用于提高整数对象的重用和性能。在Java中&#xff0c;对于整数值在 -128 到 127 之间的整数对象&#xff0c;会被放入缓存池中&#xff0c;以便重复使用。这是因为在这个范围…

Python绘制爱心代码(七夕限定版)

写在前面&#xff1a; 又到了一年一度的七夕节啦&#xff01;你还在发愁送女朋友什么礼物&#xff0c;不知道怎样表达你满满的爱意吗&#xff1f;别担心&#xff0c;我来帮你&#xff01;今天&#xff0c;我将教你使用Python绘制一个跳动的爱心&#xff0c;用创意和幽默为这个…

Angular安全专辑之二——‘unsafe-eval’不是以下内容安全策略中允许的脚本源

一&#xff1a;错误出现 这个错误的意思是&#xff0c;拒绝将字符串评估为 JavaScript&#xff0c;因为‘unsafe-eval’不是以下内容安全策略中允许的脚本源。 二&#xff1a;错误场景 testEval() {const data eval("var sum2 new Function(a, b, return a b); sum2(em…

JavaWeb_LeadNews_Day6-Kafka

JavaWeb_LeadNews_Day6-Kafka Kafka概述安装配置kafka入门kafka高可用方案kafka详解生产者同步异步发送消息生产者参数配置消费者同步异步提交偏移量 SpringBoot集成kafka 自媒体文章上下架实现思路具体实现 来源Gitee Kafka 概述 对比 选择 介绍 producer: 发布消息的对象称…

寻路算法小游戏

寻路算法小demo 寻路算法有两种&#xff0c;一种是dfs 深度优先算法&#xff0c;一种是 dfs 深度优先算法 深度优先搜索的步骤分为 1.递归下去 2.回溯上来。顾名思义&#xff0c;深度优先&#xff0c;则是以深度为准则&#xff0c;先一条路走到底&#xff0c;直到达到目标。这…

矩形重叠问题

矩形重叠 文章目录 题目描述解题思路方法一方法二 题目描述 矩形以列表 [x1, y1, x2, y2] 的形式表示&#xff0c;其中 (x1, y1) 为左下角的坐标&#xff0c;(x2, y2) 是右上角的坐标。矩形的上下边平行于 x 轴&#xff0c;左右边平行于 y 轴。 如果相交的面积为 正 &#xff0…

linux tomcat server.xml 项目访问路径变更不生效

如果想改成默认的127.0.0.1:8080 访问项目 先确定更改的作用文件 server.xml 的 host:appBase 标签 默认找到appBase webapps 下的war包&#xff0c;并解压&#xff0c;解压后的appname为访问路径 也就变成了 127.0.0.1:8080/appname host:Context:path 标签 appBase的 优先…

深入探索:Kali Linux 网络安全之旅

目录 前言 访问官方网站 导航到下载页面 启动后界面操作 前言 "Kali" 可能指的是 Kali Linux&#xff0c;它是一种基于 Debian 的 Linux 发行版&#xff0c;专门用于渗透测试、网络安全评估、数字取证和相关的安全任务。Kali Linux 旨在提供一系列用于测试网络和…

菜鸟Vue教程 - 实现带国际化的注册登陆页面

初接触vue的时候觉得vue好难&#xff0c;因为项目中要用到&#xff0c;就硬着头皮上&#xff0c;慢慢的发现也不难&#xff0c;无外乎画个布局&#xff0c;然后通过样式调整界面。在通过属性和方法跟js交互。js就和我们写的java代码差不多了&#xff0c;复杂一点的就是引用这种…

Python数据分析实战-多线程并发处理列表(附源码和实现效果)

实现功能 Python数据分析实战-多线程并发处理列表 实现代码 import threading有15个列表&#xff0c;尝试多进程并发处理&#xff0c;每个列表一个进程&#xff0c;进程数和 CPU 核数一致def sum_list(lst):return sum(lst)if __name__ __main__:lists [[1,2,3], [4,5,6], …

BDA初级分析——SQL清洗和整理数据

一、数据处理 数据处理之类型转换 字符格式与数值格式存储的数据&#xff0c;同样是进行大小排序&#xff0c; 会有什么区别&#xff1f; 以rev为例&#xff0c;看看字符格式与数值格式存储时&#xff0c;排序会有什么区别&#xff1f; 用cast as转换为字符后进行排序 SEL…

mysql+jdbc+servlet+java实现的学生在校疫情信息打卡系统

摘 要 I Abstract II 主 要 符 号 表 i 1 绪论 1 1.1 研究背景 1 1.2 研究目的与意义 2 1.3 国内外的研究情况 2 1.4 研究内容 2 2 系统的开发方法和关键技术 4 2.1 开发方法 4 2.1.1 结构化开发方法 4 2.1.2 面向对象方法 4 2.2 开发技术 4 2.2.1 小程序开发MINA框架 4 2.2.2 …