Python爬虫图片:从入门到精通

在数字化时代,图片作为信息传递的重要媒介之一,其获取和处理变得越来越重要。Python作为一种功能强大且易于学习的编程语言,非常适合用来编写爬虫程序,帮助我们自动化地从互联网上获取图片资源。本文将从基础到高级,详细介绍如何使用Python编写图片爬虫。

1. Python爬虫基础

Python爬虫基础是构建任何网络爬虫的起点,无论是用于获取文本数据还是图片。以下是Python爬虫基础的关键要素:

1.1 什么是爬虫

爬虫(Web Crawler 或 Spider)是一种自动浏览网络的程序,它按照一定的算法顺序访问网页,抓取网页上的信息。

1.2 爬虫的工作原理

  1. 发送请求:爬虫向目标网站发送HTTP请求。
  2. 接收响应:服务器响应请求并返回网页内容。
  3. 解析内容:爬虫解析返回的HTML或JSON内容,提取所需信息。
  4. 存储数据:将提取的数据保存到数据库或文件中。
  5. 跟踪链接:爬虫识别网页中的链接,并跟踪这些链接继续抓取。

1.3 Python语言的优势

  • 易于学习:Python语法简洁,易于上手。
  • 丰富的库:Python有大量的库来支持网络请求、数据解析和处理等任务。

1.4 常用Python库

  • Requests:用于发送HTTP请求。
  • BeautifulSoup 或 lxml:用于解析HTML和XML文档。
  • Scrapy:一个强大的爬虫框架,适用于构建大型爬虫项目。
  • Pandas:数据处理和分析。
  • SQLAlchemy:数据库ORM工具,简化数据库操作。

1.5 爬虫的基本组件

  • URL管理器:负责管理待爬取的URL队列。
  • 下载器:负责获取网页内容。
  • 解析器:负责解析网页内容,提取数据。
  • 存储器:负责将数据存储到数据库或文件中。
  • 调度器:负责控制爬虫的流程和行为。

1.6 编写第一个Python爬虫

以下是一个简单的Python爬虫示例,使用Requests和BeautifulSoup库:

import requests
from bs4 import BeautifulSoup# 目标网页URL
url = 'http://example.com'# 发送GET请求
response = requests.get(url)# 检查请求是否成功
if response.status_code == 200:# 解析网页内容soup = BeautifulSoup(response.text, 'html.parser')# 提取网页的标题title = soup.find('title').get_text()print('网页标题:', title)# 可以继续提取其他信息...
else:print('请求失败,状态码:', response.status_code)

1.7 注意事项

  • 遵守Robots协议:尊重网站的爬虫政策,避免对网站造成负担。
  • 设置请求间隔:避免过快地发送请求,以免对服务器造成压力。
  • 异常处理:编写爬虫时要考虑异常处理,确保爬虫的稳定性。

1.8 结论

Python爬虫基础涵盖了爬虫的定义、工作原理、Python的优势、常用库、基本组件以及如何编写简单的爬虫程序。掌握这些基础知识是深入学习爬虫技术,包括图片爬虫的前提。

在接下来的章节中,我们将深入探讨图片爬虫的特定技术和策略,帮助读者更高效地获取和处理网络图片资源。

2. 图片爬虫概述

图片爬虫是网络爬虫的一种特殊形式,专注于从互联网上抓取图片资源。与文本数据爬虫相比,图片爬虫在技术上有一些独特的考量和挑战。

2.1 图片爬虫的定义

图片爬虫是一种自动下载网页中图片的程序,它可以识别图片链接并将其保存到本地或云存储中。

2.2 图片爬虫的应用场景

  • 数据收集:为机器学习或图像识别算法收集训练数据。
  • 内容聚合:创建图片画廊或图片分享平台。
  • 市场研究:分析特定行业的图片使用趋势。
  • 个人项目:获取特定主题或兴趣的图片资源。

2.3 图片爬虫的技术要点

  • 图片URL识别:从HTML中提取图片的直接链接。
  • 反爬虫策略:应对网站采取的反爬虫措施。
  • 多线程/异步下载:提高图片下载的效率。
  • 错误处理:处理下载失败、链接无效等问题。

2.4 图片爬虫的挑战

  • 动态加载内容:某些图片可能通过JavaScript动态加载,需要特殊处理。
  • 反爬机制:网站可能采用各种反爬虫技术,如IP封锁、请求频率限制等。
  • 版权问题:下载和使用图片可能涉及版权问题。

2.5 图片爬虫的开发步骤

  1. 确定目标网站:选择要爬取图片的网站或网页。
  2. 分析网页结构:使用浏览器的开发者工具分析网页,找到图片URL的来源。
  3. 编写爬虫代码:使用Python编写爬虫程序,实现图片的下载。
  4. 测试和优化:测试爬虫的性能,优化下载速度和稳定性。
  5. 遵守法律和道德规范:确保爬虫活动合法合规,尊重版权。

2.6 图片爬虫示例

以下是一个简单的Python图片爬虫示例,使用Requests库下载图片:

import requests
import osdef download_image(url, path):response = requests.get(url)if response.status_code == 200:with open(path, 'wb') as f:f.write(response.content)# 图片URL和保存路径
image_url = 'http://example.com/image.jpg'
image_path = 'path/to/your/directory/image.jpg'# 下载图片
download_image(image_url, image_path)
print('图片下载完成。')

2.7 结论

图片爬虫为自动化图片收集提供了一种有效手段,但同时也带来了技术挑战和法律风险。开发者在编写图片爬虫时,需要充分考虑这些因素,确保爬虫的高效性、稳定性和合法性。在后续章节中,我们将深入探讨图片爬虫的具体实现技术和高级策略。

3. 环境搭建与依赖库

在开始编写Python图片爬虫之前,需要搭建合适的开发环境,并安装所需的依赖库。这一步骤对于确保代码的顺利运行和后续开发至关重要。

3.1 Python环境搭建

安装Python

  • 访问Python官网下载并安装Python。
  • 可以选择安装Python 2或Python 3,但推荐使用Python 3,因为它是当前的主流版本。
  • 可以参考我之前写的文章:01-Python详细安装教程(大妈看了都会)

创建虚拟环境

  • 使用虚拟环境可以隔离项目依赖,避免不同项目间的依赖冲突。
  • 在命令行中执行以下命令创建虚拟环境:
    python -m venv myenv
  • 激活虚拟环境:
    • Windows:
      myenv\Scripts\activate
    • macOS/Linux:
      source myenv/bin/activate

3.2 依赖库安装

使用pip安装依赖

  • 在激活虚拟环境后,使用pip安装所需的库:
    pip install requests beautifulsoup4 pillow lxml

依赖库说明

  • Requests:用于发送HTTP请求,获取网页内容。
  • BeautifulSoup:用于解析HTML和XML文档,提取数据。
  • Pillow:Python Imaging Library的更新版,用于处理图像文件。
  • lxml:另一个高效的解析库,可以作为BeautifulSoup的解析器。

3.3 编辑器或IDE选择

  • 选择编辑器:选择一个适合自己的代码编辑器,如VSCode、Sublime Text、Atom等。
  • 配置IDE:如果使用集成开发环境(IDE),如PyCharm,确保配置好Python解释器和虚拟环境。

3.4 测试环境

  • 在安装完所有依赖后,创建一个简单的Python脚本测试环境是否搭建成功:
    import requests
    import bs4print("Requests version:", requests.__version__)
    print("BeautifulSoup version:", bs4.__version__)

3.5 版本管理

  • 使用版本控制系统,如Git,来管理你的代码和依赖。
  • 创建requirements.txt文件来记录项目依赖的版本:
    pip freeze > requirements.txt

3.6 依赖库的高级使用

  • 学习Requests、BeautifulSoup、Pillow等库的高级用法,以应对更复杂的爬虫任务。

3.7 结论

搭建一个稳定且高效的开发环境是编写Python图片爬虫的第一步。通过安装Python、创建虚拟环境、安装依赖库、选择编辑器或IDE以及进行版本管理,可以为后续的开发工作打下坚实的基础。确保你熟悉这些工具和库,以便在编写爬虫时能够更加得心应手。

4. 解析网页内容

一旦你通过requests库获取了网页数据,下一步就是解析这些数据以提取有用的信息。对于图片爬虫来说,主要任务是找到图片的URL并下载它们。Python中最常用的解析库是BeautifulSoup

4.1 BeautifulSoup库简介

BeautifulSoup是一个用于解析HTML和XML文档的库,它能够从复杂的HTML文档中提取数据。

安装BeautifulSoup

如果尚未安装BeautifulSoup,可以通过以下命令安装:

pip install beautifulsoup4

4.2 使用BeautifulSoup解析HTML

from bs4 import BeautifulSoup# 假设response.text包含了网页的HTML内容
soup = BeautifulSoup(response.text, 'html.parser')# 使用BeautifulSoup查找标签
for img_tag in soup.find_all('img'):print(img_tag.get('src'))  # 打印<img>标签的src属性

4.3 定位图片URL

  • 通常图片的URL位于<img>标签的src属性中。
  • 有时图片可能是通过CSS背景、JavaScript动态加载等方式嵌入的,这需要更高级的解析技术。

4.4 处理相对URL

  • 如果图片URL是相对路径,需要转换为绝对路径:
    from urllib.parse import urljoin
    absolute_url = urljoin(response.url, img_src)

4.5 过滤和选择图片

  • 根据图片的属性(如高度、宽度、文件类型)进行过滤:
    for img_tag in soup.find_all('img', {'src': True}):if '.jpg' in img_tag['src'] and int(img_tag.get('height', 0)) > 100:print(img_tag['src'])

4.6 异常处理

  • 在解析过程中,应对可能出现的异常进行处理:
    try:# 解析代码
    except Exception as e:print("解析错误:", e)

4.7 使用CSS选择器

  • BeautifulSoup支持CSS选择器来更精确地定位元素:
    img_tags = soup.select('div.gallery img')  # 选择在class为gallery的div下的img标签

4.8 使用正则表达式

  • 对于某些复杂的HTML结构,可以使用正则表达式辅助提取信息:
    import re
    pattern = re.compile(r'<img src="(.*?)"')
    for match in pattern.finditer(response.text):print(match.group(1))

4.9 性能优化

  • 当解析大量数据时,性能可能成为问题。考虑使用lxml作为解析器,它通常比默认的html.parser更快:
    soup = BeautifulSoup(response.text, 'lxml')

4.10 结论

解析网页内容是爬虫开发中的另一个关键步骤。BeautifulSoup是一个强大的工具,可以帮助你轻松提取HTML文档中的数据。在编写图片爬虫时,你需要熟练使用BeautifulSoup来找到图片的URL,并处理可能遇到的各种情况,包括相对URL转换、异常处理和性能优化。此外,根据网页的不同结构,可能还需要使用正则表达式等其他技术来辅助解析。

5. 图片下载策略

一旦你使用爬虫技术定位并获取了图片的URL,接下来的任务就是将这些图片下载到本地系统中。以下是一些有效的图片下载策略:

5.1 单线程下载

最基本的下载方法是使用单线程按顺序下载每张图片:

import requestsdef download_image(url, path):response = requests.get(url)if response.status_code == 200:with open(path, 'wb') as f:f.write(response.content)

5.2 多线程下载

为了提高下载效率,可以使用threading模块实现多线程下载:

import threadingdef download_image_with_thread(url, path):thread = threading.Thread(target=download_image, args=(url, path))thread.start()

5.3 异步下载

Python的asyncio库和aiohttp库可以用于异步下载,特别适合I/O密集型任务:

import aiohttp
import asyncioasync def download_image_async(session, url, path):async with session.get(url) as response:with open(path, 'wb') as f:while True:chunk = await response.content.read(1024)if not chunk:breakf.write(chunk)async def main(urls):async with aiohttp.ClientSession() as session:tasks = [download_image_async(session, url, f'image_{i}.jpg') for i, url in enumerate(urls)]await asyncio.gather(*tasks)# 调用main函数并传入图片URL列表

5.4 断点续传

对于大文件,实现断点续传可以避免因中断而重新开始下载:

def download_image_with_resume(url, path):try:with requests.Session() as s:s.trust_env = Falser = s.get(url, stream=True)if r.status_code == 200:with open(path, 'ab') as f:  # 'ab' 追加二进制模式for chunk in r.iter_content(chunk_size=8192):if chunk:f.write(chunk)except requests.exceptions.RequestException as e:print(e)

5.5 错误处理

在下载过程中,应妥善处理可能发生的错误,如网络问题或文件写入错误:

try:download_image(url, path)
except requests.exceptions.RequestException as e:print(f"下载失败: {e}")

5.6 用户代理和Cookies

为了绕过一些简单的反爬虫机制,可以在请求中添加用户代理和Cookies:

headers = {'User-Agent': 'Your User Agent String'}
response = requests.get(url, headers=headers, cookies=your_cookies)

5.7 代理使用

当目标网站限制了你的IP时,可以使用代理来下载图片:

proxies = {'http': 'http://10.10.1.10:3128','https': 'http://10.10.1.10:1080',
}
response = requests.get(url, proxies=proxies)

5.8 限速下载

为了避免对目标网站服务器造成过大压力,可以限制下载速度:

class BandwidthLimiter(object):def __init__(self, max_bandwidth):self.max_bandwidth = max_bandwidthdef __enter__(self):self.start_time = time.time()def __exit__(self, exc_type, exc_val, exc_tb):if (time.time() - self.start_time) >= self.max_bandwidth:time.sleep(self.max_bandwidth - (time.time() - self.start_time))# 使用示例
with BandwidthLimiter(max_bandwidth=0.5):  # 限制在0.5秒内完成下载download_image(url, path)

5.9 结论

图片下载策略需要根据你的具体需求和目标网站的特点来定制。单线程下载简单但效率低,多线程和异步下载可以显著提高效率,而断点续传和错误处理则增强了下载的稳定性和可靠性。同时,考虑到网站的反爬虫机制,可能需要使用用户代理、Cookies和代理等技术来规避限制。最后,限速下载是出于对网站服务器的尊重和遵守Robots协议的考虑。

6. 处理反爬虫机制

在开发爬虫时,经常会遇到网站采取的反爬虫机制,这些机制旨在限制或阻止自动化程序访问网站。以下是一些常见的反爬虫策略和应对方法:

6.1 常见反爬虫机制

  1. IP限制:短时间内多次请求同一IP地址被封锁。
  2. User-Agent检查:检查请求的User-Agent是否为常见的浏览器。
  3. Cookies限制:需要有效的Cookies才能访问某些页面。
  4. 验证码:需要人工输入验证码以验证请求是否来自真人。
  5. 动态令牌:通过JavaScript生成的动态令牌,需要执行JS才能获取。
  6. 隐藏资源:通过CSS或JavaScript动态加载的图片和链接。
  7. HTTPS:强制使用HTTPS协议,增加抓包分析的难度。

6.2 应对策略

  1. 设置User-Agent: 使用常见的浏览器User-Agent模拟浏览器请求。

  2. 使用Cookies: 维持会话Cookies,或使用登录后的Cookies进行请求。

  3. 使用代理: 使用代理IP池,避免单个IP被封锁。

  4. 处理验证码: 使用OCR技术识别验证码,或人工打码平台。

  5. 浏览器自动化: 使用Selenium或Puppeteer模拟真实浏览器行为,执行JavaScript。

  6. 分布式爬虫: 使用分布式爬虫系统,分散请求来源。

  7. 降低请求频率: 设置合理的请求间隔,避免触发频率限制。

  8. 模拟正常用户行为: 模拟正常用户的浏览行为,如随机等待时间。

  9. 使用Web驱动: 对于动态加载的资源,使用WebDriver等待元素加载。

  10. HTTPS抓包: 使用Charles、Fiddler等工具进行HTTPS抓包分析。

6.3 示例:设置User-Agent和使用代理

import requestsheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}proxies = {'http': 'http://123.456.78.90:8080','https': 'https://123.456.78.90:8080',
}response = requests.get('http://example.com', headers=headers, proxies=proxies)

6.4 结论

处理反爬虫机制是爬虫开发中的一个挑战。了解常见的反爬虫技术,并掌握相应的应对策略,是开发稳定爬虫的关键。在实施爬虫策略时,应始终遵守网站的使用条款和法律法规,尊重网站的Robots协议,合理合法地进行数据抓取。

7. 存储图片数据

下载图片后,存储和管理这些图片数据是图片爬虫的另一个重要环节。以下是几种常见的存储方法和实践:

7.1 本地文件系统存储

存储策略

  • 目录结构:创建一个有逻辑的目录结构,例如按照日期或主题分类。
  • 文件命名:给图片命名,确保名称唯一,避免覆盖。

示例代码

import osdef save_image(image_data, folder_path, file_name):# 确保目录存在if not os.path.exists(folder_path):os.makedirs(folder_path)# 保存图片with open(os.path.join(folder_path, file_name), 'wb') as file:file.write(image_data)# 使用示例
response = requests.get(image_url)
if response.status_code == 200:save_image(response.content, 'path/to/folder', 'image.jpg')

7.2 云存储服务

流行的云存储服务

  • Amazon S3
  • Google Cloud Storage
  • Microsoft Azure Blob Storage
  • 阿里云OSS

存储策略

  • 桶(Bucket):在云存储服务中创建桶来存储图片。
  • 访问权限:设置合适的访问权限,如私有或公共读取。

示例代码(以AWS S3为例)

import boto3def upload_to_s3(file_path, bucket_name, s3_file_name):s3 = boto3.client('s3')s3.upload_file(file_path, bucket_name, s3_file_name)# 使用示例
with open('local_image.jpg', 'rb') as f:image_data = f.read()response = requests.post(upload_url, data=image_data)if response.status_code == 200:upload_to_s3('local_image.jpg', 'my-bucket', 'uploaded_image.jpg')

7.3 数据库存储

存储策略

  • 元数据:除了图片本身,还可以将图片的元数据(如URL、下载时间、描述等)存储在数据库中。
  • 数据库选择:关系型数据库(如MySQL、PostgreSQL)或非关系型数据库(如MongoDB)。

示例代码(以SQLite为例)

import sqlite3def save_image_metadata(db_path, image_url, image_name):conn = sqlite3.connect(db_path)cursor = conn.cursor()cursor.execute("CREATE TABLE IF NOT EXISTS images (url TEXT, name TEXT)")cursor.execute("INSERT INTO images (url, name) VALUES (?, ?)", (image_url, image_name))conn.commit()conn.close()# 使用示例
save_image_metadata('images.db', image_url, 'image.jpg')

7.4 考虑因素

  • 备份:定期备份存储的图片数据,防止数据丢失。
  • 安全性:确保存储的图片数据安全,特别是当使用云存储服务时。
  • 访问速度:根据需要访问图片的速度选择合适的存储解决方案。

7.5 结论

存储图片数据需要考虑存储位置、数据安全、访问速度和成本等因素。本地文件系统适合小规模项目,而云存储服务提供了更好的可扩展性和可靠性。数据库存储则有助于管理图片的元数据。开发者应根据项目需求和资源选择合适的存储策略。同时,确保遵守数据保护法规和最佳实践,妥善管理图片数据。

8. 高级技巧与实战

在掌握了Python爬虫的基本技能后,可以通过一些高级技巧来提升爬虫的性能、效率和智能化水平。以下是一些高级技巧和实战应用的示例:

8.1 使用Scrapy框架

Scrapy是一个快速的、高层次的web抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。

  • 安装Scrapy

    pip install scrapy
  • 创建Scrapy项目

    scrapy startproject myproject
  • 定义Item和Spider

    # myproject/items.py
    import scrapyclass ImageItem(scrapy.Item):url = scrapy.Field()image_urls = scrapy.Field()filename = scrapy.Field()# myproject/spiders/example.py
    from scrapy.spiders import CrawlSpider
    from myproject.items import ImageItemclass ExampleSpider(CrawlSpider):name = 'example'allowed_domains = ['example.com']start_urls = ['http://www.example.com']def parse(self, response):item = ImageItem()item['url'] = response.url# 根据实际情况提取图片URLreturn item

8.2 浏览器自动化测试工具

使用Selenium或Puppeteer等工具模拟浏览器行为,处理JavaScript渲染的页面。

  • 安装Selenium

    pip install selenium
  • 使用Selenium获取动态内容

    from selenium import webdriverdriver = webdriver.Chrome()
    driver.get('http://www.example.com')
    # 等待页面加载完成,或执行某些操作
    html = driver.page_source
    driver.quit()

8.3 分布式爬虫

对于需要处理大规模数据的爬虫任务,可以使用分布式爬虫架构来提高效率。

  • 使用Scrapy的分布式功能: Scrapy可以与Celery、RabbitMQ等配合使用,实现分布式爬取。

8.4 爬虫的自我学习和优化

  • 使用机器学习识别内容: 利用机器学习算法自动识别和分类网页内容。

  • 动态调整请求策略: 根据爬取的反馈动态调整请求频率、User-Agent等。

8.5 处理大规模数据

  • 使用数据库: 对于大规模数据,使用数据库存储比文件系统更有效。

  • 数据清洗和预处理: 对爬取的数据进行清洗和预处理,提高数据质量。

8.6 遵守法律和道德规范

  • 尊重Robots协议: 检查并遵守网站的robots.txt文件。

  • 合法合规: 确保爬虫活动符合相关法律法规。

8.7 结论

高级爬虫技巧和实战应用可以帮助开发者构建更高效、更智能的爬虫系统。使用Scrapy框架、浏览器自动化工具、分布式架构以及机器学习技术,可以显著提升爬虫的性能和数据处理能力。同时,开发者应始终注意遵守法律和道德规范,尊重网站的数据使用政策。通过不断学习和实践,开发者可以掌握更高级的爬虫技术,应对各种复杂的爬取任务。

9. 法律与道德考量

在开发和运行爬虫程序时,法律和道德考量是至关重要的。这些考量不仅影响爬虫的合法性,还涉及到个人和公司的声誉。

9.1 法律考量

遵守法律法规

  • 确保爬虫活动遵守所在国家或地区的法律法规,包括但不限于版权法、隐私法和计算机欺诈与滥用法。

尊重版权

  • 许多网站的内容都是受版权保护的。在下载和使用图片、文本或其他媒体内容时,必须尊重版权所有者的权利。

Robots协议

  • 遵守目标网站的robots.txt文件,这是网站所有者指定爬虫可以或不能访问的网页的标准。

个人数据保护

  • 如果爬虫涉及到个人数据,需要确保遵守相关的数据保护法规,如欧盟的通用数据保护条例(GDPR)。

9.2 道德考量

尊重网站所有者

  • 即使法律没有明确禁止,也应该尊重网站所有者不希望被爬取的意愿。

避免滥用爬虫

  • 不应该使用爬虫进行不正当竞争、侵犯隐私或干扰网站正常运行。

透明使用

  • 在可能的情况下,公开说明爬虫的使用目的和方式,保持透明。

9.3 技术实践

限制请求频率

  • 避免对目标网站服务器造成过大压力,合理设置爬虫的请求频率。

用户代理

  • 诚实地使用用户代理字符串,不要伪装成其他用户代理。

错误处理

  • 在爬虫中实现错误处理机制,确保在遇到问题时能够优雅地停止或重试。

9.4 社区和行业标准

参与讨论

  • 参与爬虫相关的社区讨论,了解行业最佳实践和标准。

持续学习

  • 法律和道德标准是不断发展的,持续学习以确保爬虫活动始终符合最新的要求。

9.5 结论

法律和道德是爬虫开发和使用中不可忽视的两个方面。开发者必须确保他们的爬虫程序在法律允许的范围内运行,并且遵守道德规范。通过尊重版权、个人数据和网站所有者的意愿,开发者可以建立一个积极、负责任的爬虫使用者形象。同时,随着技术的发展和法律的更新,持续关注和学习相关的法律和道德议题对于每个开发者来说都是必要的。

结语 

编写Python图片爬虫是一个涉及多方面技能的过程,从基础的网络请求到高级的反爬虫策略,再到法律和道德的考量,每一步都至关重要。希望本文能帮助你构建自己的图片爬虫,高效地获取和处理网络图片资源。

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

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

相关文章

【qt】跳转到另一个界面

如何在一个界面跳转到另一个界面呢&#xff1f; 1.具体步骤 1.先新建一个界面 2.选择qt设计师界面 3.选择W 4.新界面名称 5.界面设计 因为我们要实现通信&#xff0c;需要一个发送信息栏&#xff0c;一个发送按钮&#xff0c;一个清空发送栏按钮 6.实现跳转 我们可以参…

python 已知x+y=8 求x*y*(x-y)的最大值

先用导数求解 已知xy8 求xy(x-y)的最大值 令y8-x 则 f(x)x⋅(8−x)⋅(x−(8−x))x⋅(8−x)⋅(2x−8) 导数方程为 f(x)-3x^2 24x - 32 求方程 − 3 x 2 24 x − 32 0 -3x^2 24x - 32 0 −3x224x−320 的根。 首先&#xff0c;我们可以尝试对方程进行因式分解。观察…

Airtest 的使用

Airtest 介绍 Airtest Project 是网易游戏推出的一款自动化测试框架&#xff0c;其项目由以下几个部分构成 Airtest : 一个跨平台的&#xff0c;基于图像识别的 UI 自动化测试框架&#xff0c;适用于游戏和 App &#xff0c; 支持 Windows, Android 和 iOS 平台&#xff0c…

鸿蒙应用程序框架基础

鸿蒙应用程序框架基础 应用程序包基础知识应用的多Module设计机制Module类型 Stage模型应用程序包结构开发态包结构编译包形态发布台包结构选择合适的包类型 应用程序包基础知识 应用的多Module设计机制 **支持模块化开发&#xff1a;**一个应用通常会包含多种功能&#xff0…

为什么MCU I2C波形中会出现的脉冲毛刺?

在I2C的波形中&#xff0c;经常会发现有这样的脉冲毛刺&#xff0c;会被认为是干扰或者器件不正常。 看到这个波形时&#xff0c;可以先数一下出现在第几个clock的位置&#xff0c;如果出现在第9个clock的低电平期间&#xff0c;就不是干扰或者器件异常导致。 在I2C的协议中&a…

虎牙驶入快车道

撰稿 | 多客 来源 | 贝多财经 一份Q2财报&#xff0c;狠狠打脸了那些唱反调的人&#xff0c;特别是故意唱衰直播和游戏公司的一些TMT观察者。 同时&#xff0c;直播平台如何健康转型实现可持续发展&#xff0c;游戏相关服务业务应该怎么做增量&#xff0c;虎牙的这份财报也给…

【Kubernetes】虚拟 IP 与 Service 的代理模式

虚拟 IP 与 Service 的代理模式 1.userspace 代理模式2.iptables 代理模式3.IPVS 代理模式 由于 Service 的默认发布类型是 ClusterlP&#xff0c;因此也可以把 ClusterIP 地址叫作 虚拟 IP 地址。在 Kubernetes 创建 Service 时&#xff0c;每个节点上运行的 kube-proxy 会自动…

golang基于WMI获取所有外接硬盘(USB,移动硬盘)信息

golang基于WMI获取所有外接硬盘(USB,移动硬盘)信息 package mainimport ("fmt""regexp""github.com/StackExchange/wmi""github.com/shirou/gopsutil/v3/disk" )// 定义 WMI 类结构体 type Win32_LogicalDiskToPartition struct {Ant…

高数4.2 积分方法-换元积分法

1. 第一类换元积分法 2. 第二类换元积分法

算法【Java】 —— 滑动窗口

滑动窗口 在上一篇文章中&#xff0c;我们了解到了双指针算法&#xff0c;在双指针算法中我们知道了前后指针法&#xff0c;这篇文章就要提到前后指针法的一个经典的使用 —— 滑动窗口&#xff0c;在前后指针法中&#xff0c;我们知道一个指针在前&#xff0c;一个指针在后&a…

JavaScript初级——运算符

一、算数运算符 1、运算符也叫操作符。通过运算符可以对一个或多个值进行运算&#xff0c;并获取运算结果。 比如&#xff1a;typeof 就是运算符&#xff0c;可以获得一个值的类型&#xff0c;他会将该值的类型以字符串的形式返回 &#xff08;number、string、boolean、undefi…

【秋招笔试】8.12-4399秋招(第一套)-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 编程一对一辅导 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍒 本专栏已收…

计算机网络12——IM聊天系统——项目分析和架构搭建

1、IM——聊天系统主要功能 &#xff08;1&#xff09;注册 根据&#xff1a;昵称&#xff0c;手机号&#xff0c;密码 &#xff08;2&#xff09;登录 根据&#xff1a;手机号&#xff0c;密码 &#xff08;3&#xff09;添加好友 根据&#xff1a;昵称 &#xff08;4&…

Secure CRT 9.x版本高亮着色配置文件

Secure CRT的网络配置文件高亮显示&#xff0c;还在完善&#xff0c;逐渐适配不同厂商 设备名字自动蓝色高亮显示设备接口名高亮显示IPv4地址、IPv6地址、MAC地址高亮显示掩码、反掩码高亮显示设备SN号高亮显示接口状态、设备状态等高亮显示各路由协议高亮显示 【下载地址】效果…

XSS-复现dom破坏案例和靶场

目录 xss注入原理&#xff1a; xss是什么&#xff1f; xss原理&#xff1a; DOM&#xff1a; 闯关&#xff1a; 第一关&#xff1a;Ma Spaghet! 源码&#xff1a; 要求&#xff1a; 分析&#xff1a; 第二关&#xff1a; Jefff 源码&#xff1a; 要求&#xff1a; …

ubuntu基于sealos搭建k8s集群,helm3安装配置自动化扩容Prometheus,grafana出图展示,以及动态web搭建

1.项目简介 大方向&#xff1a;k8s云原生方向&#xff0c;运维技术&#xff0c;配置问题解决 解决技术:ubuntu模板机安装&#xff0c;配置远程xshell连接ubuntu&#xff0c;设置静态ip&#xff0c;换ubuntu阿里云源&#xff0c;配置集群间域名解析&#xff0c;解决双IP冲突网…

ubuntu下使用docker、socket、yolov5进行图像处理数据交互记录

ubuntu下使用docker、socket、yolov5进行图像处理数据交互记录 概述&#xff1a;主要实现了在宿主机上通过8000端口传递一张图像给docker镜像&#xff0c;然后镜像中处理后&#xff0c;通过8001端口回传处理后的图像给宿主机。 第一章、构建镜像 一、dockerfile文件 1.拉取…

尚品汇-前端面包屑平台属性、排序处理(三十三)

目录&#xff1a; &#xff08;1&#xff09;面包屑处理平台属性 &#xff08;2&#xff09;排序处理 &#xff08;2&#xff09;单点登录业务介绍 &#xff08;1&#xff09;面包屑处理平台属性 前端显示&#xff1a;面包屑显示效果 搜list搜索方法继续添加返回的平台属性…

Lora 全文翻译

作者&#xff1a; 地点&#xff1a;hby 来源&#xff1a;https://arxiv.org/pdf/2106.09685 工具&#xff1a;文心 LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS 摘要 自然语言处理的一个重要范式包括在通用领域数据上进行大规模预训练&#xff0c;并适应特定任务或…

php 在app中唤起微信app进行支付,并处理回调通知

<?phpnamespace app\api\controller;use think\facade\Db; use think\facade\Log;class Wxzf {