当前位置: 首页 > news >正文

Python的那些事第十六篇:Python的网络爬虫技术

基于Python的网络爬虫技术研究与应用


摘要

随着互联网的飞速发展,网络爬虫技术在数据采集、信息挖掘等领域发挥着重要作用。本文详细介绍了Python环境下常用的网络爬虫技术,包括Requests库、BeautifulSoup库以及Scrapy框架。通过对这些工具的使用方法、项目结构、数据提取与存储等方面的深入探讨,结合具体实例,展示了如何高效地构建网络爬虫项目,以满足不同场景下的数据采集需求。本文的研究成果为网络爬虫技术的应用提供了实践指导,同时也为相关领域的研究提供了参考。


一、引言

网络爬虫是一种自动获取网络信息的程序或脚本,它通过模拟用户浏览器的行为,向目标网站发送HTTP请求,获取网页内容,并从中提取有价值的数据。随着大数据时代的到来,网络爬虫技术在数据分析、机器学习、商业智能等领域得到了广泛应用。Python作为一种简洁高效的编程语言,提供了丰富的库和框架,使得网络爬虫的开发变得更加容易和高效。本文将重点介绍Python环境下常用的网络爬虫技术,包括Requests库、BeautifulSoup库和Scrapy框架,并通过具体实例展示如何使用这些工具构建高效的爬虫项目。


二、网络爬虫基础

(一)网络爬虫的工作原理

网络爬虫的工作原理主要包括以下几个步骤:

  1. 初始化:设置爬虫的目标网站、起始URL等参数。

  2. 发送请求:模拟用户浏览器的行为,向目标网站发送HTTP请求。

  3. 获取响应:接收目标网站返回的HTTP响应,通常为HTML文档。

  4. 解析文档:对HTML文档进行解析,提取其中的有价值数据。

  5. 存储数据:将提取的数据存储到本地文件、数据库或其他存储介质中。

  6. 循环处理:根据需要,重复上述步骤,直到完成所有数据的采集。

(二)网络爬虫的分类

根据不同的分类标准,网络爬虫可以分为以下几种类型:

  1. 通用爬虫:用于大规模采集互联网上的信息,如搜索引擎爬虫。

  2. 聚焦爬虫:针对特定主题或特定网站进行数据采集。

  3. 增量式爬虫:只采集新增或更新的内容,避免重复采集。

  4. 深度优先爬虫:优先采集深度较深的页面。

  5. 广度优先爬虫:优先采集同一层级的页面。


三、基于Requests库的网络爬虫

(一)Requests库简介

Requests是一个Python第三方库,用于发送HTTP请求。它简单易用,支持多种HTTP方法(如GET、POST、PUT、DELETE等),并且可以方便地处理请求头、请求参数、Cookie等。以下是Requests库的主要功能特点:

  • 简洁易用:提供简洁的API,方便发送HTTP请求。

  • 支持多种HTTP方法:支持GET、POST、PUT、DELETE等常用HTTP方法。

  • 自动处理Cookie:自动管理Cookie,方便处理登录等需要Cookie的场景。

  • 支持会话对象:通过Session对象可以保持会话状态,方便多次请求。

(二)发送HTTP请求

以下是一个使用Requests库发送GET请求的示例代码:

import requests# 目标URL
url = 'https://www.example.com'# 发送GET请求
response = requests.get(url)# 打印响应状态码
print('状态码:', response.status_code)# 打印响应内容
print('响应内容:', response.text)

(三)获取响应内容

Requests库返回的响应对象(Response)包含了丰富的信息,可以通过以下属性和方法获取:

  • response.status_code:获取响应状态码。

  • response.text:获取响应内容(HTML文档)。

  • response.headers:获取响应头信息。

  • response.cookies:获取响应中的Cookie信息。

以下是一个完整的示例代码,展示如何获取响应的详细信息:

import requests# 目标URL
url = 'https://www.example.com'# 发送GET请求
response = requests.get(url)# 获取响应状态码
print('状态码:', response.status_code)# 获取响应内容
print('响应内容:', response.text)# 获取响应头信息
print('响应头信息:', response.headers)# 获取响应中的Cookie信息
print('Cookie信息:', response.cookies)

(四)处理请求参数

在实际应用中,我们常常需要向目标网站发送请求参数,例如查询关键词、分页参数等。Requests库支持通过params参数传递请求参数。以下是一个示例代码:

import requests# 目标URL
url = 'https://www.example.com/search'# 请求参数
params = {'q': 'Python','page': 1
}# 发送GET请求
response = requests.get(url, params=params)# 打印响应内容
print('响应内容:', response.text)

(五)处理请求头

有些网站会对请求头进行检查,以防止爬虫访问。Requests库可以通过headers参数设置请求头,模拟正常浏览器的访问行为。以下是一个示例代码:

import requests# 目标URL
url = 'https://www.example.com'# 请求头
headers = {'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'
}# 发送GET请求
response = requests.get(url, headers=headers)# 打印响应内容
print('响应内容:', response.text)

(六)处理Cookie

有些网站需要登录后才能访问某些页面,Requests库可以通过cookies参数设置Cookie,或者通过Session对象自动管理Cookie。以下是一个示例代码:

import requests# 目标URL
url = 'https://www.example.com/login'# 登录数据
data = {'username': 'your_username','password': 'your_password'
}# 发送POST请求
session = requests.Session()
response = session.post(url, data=data)# 访问登录后的页面
response = session.get('https://www.example.com/dashboard')# 打印响应内容
print('响应内容:', response.text)

四、基于BeautifulSoup库的HTML文档解析

(一)BeautifulSoup库简介

BeautifulSoup是一个Python库,用于解析HTML和XML文档。它提供了简单易用的API,可以方便地提取文档中的数据。以下是BeautifulSoup库的主要功能特点:

  • 支持多种解析器:支持HTML、XML等多种解析器。

  • 灵活的解析方式:可以通过标签名、属性、CSS选择器等方式提取数据。

  • 自动处理HTML文档:自动修复HTML文档中的错误。

(二)解析HTML文档

以下是一个使用BeautifulSoup解析HTML文档的示例代码:

from bs4 import BeautifulSoup# HTML文档
html_doc = """
<html><head><title>示例页面</title></head><body><h1>欢迎来到示例页面</h1><p>这是一个段落。</p><a href="https://www.example.com">示例链接</a></body>
</html>
"""# 创建BeautifulSoup对象
soup = BeautifulSoup(html_doc, 'html.parser')# 打印解析后的HTML文档
print(soup.prettify())

(三)提取数据

BeautifulSoup提供了多种方法来提取HTML文档中的数据,以下是一些常用的方法:

  • find():查找第一个匹配的标签。

  • find_all():查找所有匹配的标签。

  • select():通过CSS选择器查找标签。

以下是一个示例代码,展示如何使用这些方法提取数据:

from bs4 import BeautifulSoup# HTML文档
html_doc = """
<html><head><title>示页面例</title></head><body><h1>欢迎来到示例页面</h1><p>这是一个段落。</p><a href="https://www.example.com">示例链接</a><div class="example">示例内容</div></body>
</html>
"""# 创建BeautifulSoup对象
soup = BeautifulSoup(html_doc, 'html.parser')# 查找第一个<h1>标签
h1_tag = soup.find('h1')
print('第一个<h1>标签:', h1_tag.text)# 查找所有<p>标签
p_tags = soup.find_all('p')
for p in p_tags:print('段落内容:', p.text)# 使用CSS选择器查找<div>标签
div_tag = soup.select_one('.example')
print('示例内容:', div_tag.text)

(四)处理HTML文档中的注释和特殊标签

HTML文档中可能会包含注释、特殊标签等,BeautifulSoup可以正确处理这些内容。以下是一个示例代码:

from bs4 import BeautifulSoup
from bs4.element import Comment# HTML文档
html_doc = """
<html><head><title>示例页面</title></head><body><h1>欢迎来到示例页面</h1><!-- 这是一个注释 --><p>这是一个段落。</p><script>alert('这是一个脚本');</script></body>
</html>
"""# 创建BeautifulSoup对象
soup = BeautifulSoup(html_doc, 'html.parser')# 查找注释
comments = soup.find_all(string=lambda text: isinstance(text, Comment))
for comment in comments:print('注释内容:', comment)# 查找脚本标签
script_tag = soup.find('script')
print('脚本内容:', script_tag.text)

五、基于Scrapy框架的网络爬虫

(一)Scrapy框架简介

Scrapy是一个基于Python的开源爬虫框架,用于构建高效的网络爬虫项目。它提供了丰富的功能,包括请求发送、响应处理、数据提取、数据存储等。以下是Scrapy框架的主要功能特点:

  • 高效:支持异步请求,提高爬虫效率。

  • 可扩展:支持自定义扩展,方便根据需求进行定制。

  • 灵活:支持多种数据提取方式,包括XPath、CSS选择器等。

  • 易于维护:项目结构清晰,方便维护和扩展。

(二)构建Scrapy爬虫项目

1. 安装Scrapy

在构建Scrapy爬虫项目之前,需要先安装Scrapy。可以通过以下命令安装Scrapy:

pip install scrapy
2. 创建Scrapy项目

创建Scrapy项目的基本命令如下:

scrapy startproject myproject

执行上述命令后,会在当前目录下生成一个名为myproject的项目文件夹,其目录结构如下:

myproject/scrapy.cfgmyproject/__init__.pyitems.pymiddlewares.pypipelines.pysettings.pyspiders/__init__.pymyspider.py
  • scrapy.cfg:项目的配置文件。

  • myproject/:项目的Python模块。

    • __init__.py:Python模块初始化文件。

    • items.py:定义爬取的数据结构。

    • middlewares.py:定义中间件。

    • pipelines.py:定义数据存储管道。

    • settings.py:定义项目的设置。

    • spiders/:存放爬虫脚本的目录。

3. 定义爬取的数据结构

items.py文件中定义爬取的数据结构。以下是一个示例代码:

import scrapyclass MyprojectItem(scrapy.Item):title = scrapy.Field()link = scrapy.Field()content = scrapy.Field()
4. 编写爬虫脚本

spiders/目录下创建一个爬虫脚本,例如myspider.py。以下是一个示例代码:

import scrapy
from myproject.items import MyprojectItemclass MySpider(scrapy.Spider):name = 'myspider'allowed_domains = ['example.com']start_urls = ['https://www.example.com']def parse(self, response):item = MyprojectItem()item['title'] = response.xpath('//h1/text()').extract()item['link'] = response.urlitem['content'] = response.xpath('//p/text()').extract()yield item
5. 配置项目设置

settings.py文件中配置项目的设置。以下是一些常用的设置项:

  • ROBOTSTXT_OBEY:是否遵守目标网站的robots.txt文件。

  • DOWNLOAD_DELAY:下载延迟,用于控制请求间隔。

  • ITEM_PIPELINES:定义数据存储管道。

  • DOWNLOADER_MIDDLEWARES:定义下载中间件。

以下是一个示例代码:

# 是否遵守目标网站的robots.txt文件
ROBOTSTXT_OBEY = True# 下载延迟
DOWNLOAD_DELAY = 1# 数据存储管道
ITEM_PIPELINES = {'myproject.pipelines.MyPipeline': 300,
}# 下载中间件
DOWNLOADER_MIDDLEWARES = {'myproject.middlewares.MyMiddleware': 543,
}
6. 运行爬虫

运行爬虫的命令如下:

scrapy crawl myspider

执行上述命令后,Scrapy会根据定义的爬虫脚本开始爬取数据,并将数据存储到指定的位置。

(三)数据提取与存储

1. 数据提取

Scrapy支持多种数据提取方式,包括XPath、CSS选择器等。以下是一些常用的提取方法:

  • XPath:通过XPath表达式提取数据。

  • CSS选择器:通过CSS选择器提取数据。

以下是一个示例代码,展示如何使用XPath和CSS选择器提取数据:

import scrapy
from myproject.items import MyprojectItemclass MySpider(scrapy.Spider):name = 'myspider'allowed_domains = ['example.com']start_urls = ['https://www.example.com']def parse(self, response):item = MyprojectItem()item['title'] = response.xpath('//h1/text()').extract()item['link'] = response.urlitem['content'] = response.css('p::text').extract()yield item
2. 数据存储

Scrapy支持多种数据存储方式,包括文件存储、数据库存储等。以下是一些常用的数据存储方式:

  • 文件存储:将数据存储到本地文件中,例如JSON文件、CSV文件等。

  • 数据库存储:将数据存储到数据库中,例如MySQL、MongoDB等。

以下是一个示例代码,展示如何将数据存储到本地JSON文件中:

import scrapy
from myproject.items import MyprojectItemclass MySpider(scrapy.Spider):name = 'myspider'allowed_domains = ['example.com']start_urls = ['https://www.example.com']def parse(self, response):item = MyprojectItem()item['title'] = response.xpath('//h1/text()').extract()item['link'] = response.urlitem['content'] = response.css('p::text').extract()yield item

settings.py文件中配置数据存储管道:

# 数据存储管道
ITEM_PIPELINES = {'scrapy.pipelines.JsonItemPipeline': 300,
}

运行爬虫后,数据将被存储到本地JSON文件中。


六、案例分析

(一)案例背景

假设我们需要爬取一个新闻网站的新闻标题、链接和内容。该网站的结构如下:

  • 新闻列表页面:包含新闻标题、链接等信息。

  • 新闻详情页面:包含新闻内容等详细信息。

(二)爬虫设计

根据上述需求,我们可以设计一个爬虫项目,其主要步骤如下:

  1. 发送请求:向新闻列表页面发送请求,获取新闻列表页面的HTML文档。

  2. 解析新闻列表页面:解析新闻列表页面的HTML文档,提取新闻标题、链接等信息。

  3. 发送请求:向新闻详情页面发送请求,获取新闻详情页面的HTML文档。

  4. 解析新闻详情页面:解析新闻详情页面的HTML文档,提取新闻内容等详细信息。

  5. 存储数据:将提取的数据存储到本地文件或数据库中。

(三)代码实现

以下是基于Scrapy框架的爬虫代码实现:

1. 定义爬取的数据结构

items.py文件中定义爬取的数据结构:

import scrapyclass NewsItem(scrapy.Item):title = scrapy.Field()link = scrapy.Field()content = scrapy.Field()
2. 编写爬虫脚本

spiders/目录下创建一个爬虫脚本,例如news_spider.py

import scrapy
from myproject.items import NewsItemclass NewsSpider(scrapy.Spider):name = 'news'allowed_domains = ['example.com']start_urls = ['https://www.example.com/news']def parse(self, response):# 解析新闻列表页面for news in response.css('div.news-item'):item = NewsItem()item['title'] = news.css('h2.title::text').extract_first()item['link'] = news.css('a::attr(href)').extract_first()yield scrapy.Request(url=item['link'], callback=self.parse_detail, meta={'item': item})def parse_detail(self, response):# 解析新闻详情页面item = response.meta['item']item['content'] = response.css('div.content::text').extract_first()yield item
3. 配置项目设置

settings.py文件中配置项目的设置:

# 是否遵守目标网站的robots.txt文件
ROBOTSTXT_OBEY = True# 下载延迟
DOWNLOAD_DELAY = 1# 数据存储管道
ITEM_PIPELINES = {'scrapy.pipelines.JsonItemPipeline': 300,
}
4. 运行爬虫

运行爬虫的命令如下:

scrapy crawl news

执行上述命令后,Scrapy会根据定义的爬虫脚本开始爬取数据,并将数据存储到本地JSON文件中。

(四)运行结果

运行爬虫后,数据将被存储到本地JSON文件中,文件内容如下:

[{"title": "新闻标题1","link": "https://www.example.com/news/1","content": "新闻内容1"},{"title": "新闻标题2","link": "https://www.example.com/news/2","content": "新闻内容2"}
]

七、总结

本文详细介绍了Python环境下常用的网络爬虫技术,包括Requests库、BeautifulSoup库和Scrapy框架。通过对这些工具的使用方法、项目结构、数据提取与存储等方面的深入探讨,结合具体实例,展示了如何高效地构建网络爬虫项目。网络爬虫技术在数据分析、机器学习、商业智能等领域具有广泛的应用前景。然而,网络爬虫的使用也需要注意遵守法律法规和目标网站的使用条款,避免对目标网站造成不必要的负担。未来,随着人工智能和机器学习技术的发展,网络爬虫技术将更加智能化和高效化,为数据驱动的决策提供更有力的支持。


参考文献

[1] 姜南. Python网络爬虫开发实战[M]. 北京:电子工业出版社,2018.

[2] 张俊林. Python网络爬虫与数据挖掘[M]. 北京:机械工业出版社,2017.

[3] 王晓华. Python网络爬虫技术与应用[M]. 北京:清华大学出版社,2019.

[4] Scrapy官方文档. Scrapy 2.12 documentation — Scrapy 2.12.0 documentation.


 

相关文章:

Python的那些事第十六篇:Python的网络爬虫技术

基于Python的网络爬虫技术研究与应用 摘要 随着互联网的飞速发展&#xff0c;网络爬虫技术在数据采集、信息挖掘等领域发挥着重要作用。本文详细介绍了Python环境下常用的网络爬虫技术&#xff0c;包括Requests库、BeautifulSoup库以及Scrapy框架。通过对这些工具的使用方法、…...

Linux第106步_Linux内核RTC驱动实验

1、了解rtc_device结构体 1)、打开“include/linux/rtc.h” rtc_class_ops是需要用户根据所使用的RTC设备编写的,其结构体如下: struct rtc_class_ops { int (*ioctl)(struct device *, unsigned int, unsigned long);/*函数指针ioctl*/ int (*read_time)(struct device *,…...

《XSS跨站脚本攻击》

一、XSS简介 XSS全称&#xff08;Cross Site Scripting&#xff09;跨站脚本攻击&#xff0c;为了避免和CSS层叠样式表名称冲突&#xff0c;所以改为了XSS&#xff0c;是最常见的Web应用程序安全漏洞之一&#xff0c;位于OWASP top 10 2013/2017年度分别为第三名和第七名&…...

康谋方案 | BEV感知技术:多相机数据采集与高精度时间同步方案

随着自动驾驶技术的快速发展&#xff0c;车辆准确感知周围环境的能力变得至关重要。BEV&#xff08;Birds-Eye-View&#xff0c;鸟瞰图&#xff09;感知技术&#xff0c;以其独特的视角和强大的数据处理能力&#xff0c;正成为自动驾驶领域的一大研究热点。 一、BEV感知技术概…...

堆详解及C语言实现

堆结构与最大堆详解&#xff1a;从原理到C语言实现 1. 堆结构概述 1.1 定义与性质 堆&#xff08;Heap&#xff09;是一种特殊的完全二叉树数据结构&#xff0c;满足以下性质&#xff1a; 结构性&#xff1a;完全二叉树结构有序性&#xff1a;每个结点的值都≥&#xff08;…...

基于STM32的智能鱼缸水质净化系统设计

&#x1f91e;&#x1f91e;大家好&#xff0c;这里是5132单片机毕设设计项目分享&#xff0c;今天给大家分享的是智能鱼缸水质净化系统。 目录 1、设计要求 2、系统功能 3、演示视频和实物 4、系统设计框图 5、软件设计流程图 6、原理图 7、主程序 8、总结 1、设计要求…...

python:csv文件批量导入mysql

1.导入sql文件到数据库中 mysql -u username -p要先创建一个空的数据库 CREATE DATABASE your_database_name;USE your_database_name;导入sql文件 source /path/to/your/file.sql;查看某个表格的结构&#xff0c;为后续数据插入做准备 DESCRIBE table_name;2.插入假数据到对应…...

第三十二周:Informer学习笔记

目录 摘要Abstract1 Informer1.1 预备知识1.2 模型框架1.3 实验分析 总结 摘要 本周学习的主要内容是Informer模型&#xff0c;Informer是一种专为长序列时间序列预测&#xff08;LSTF&#xff09; 设计的Transformer模型。相较于传统的Transformer&#xff0c;Informer采用Pr…...

计算机视觉核心任务

1. 计算机视频重要分类 计算机视觉的重要任务可以大致分为以下几类&#xff1a; 1. 图像分类&#xff08;Image Classification&#xff09; 识别图像属于哪个类别&#xff0c;例如猫、狗、汽车等。 应用场景&#xff1a;物品识别、人脸识别、医疗影像分类。代表模型&#…...

【python】matplotlib(animation)

文章目录 1、matplotlib.animation1.1、FuncAnimation1.2、修改 matplotlib 背景 2、matplotlib imageio2.1、折线图2.2、条形图2.3、散点图 3、参考 1、matplotlib.animation 1.1、FuncAnimation matplotlib.animation.FuncAnimation 是 Matplotlib 库中用于创建动画的一个…...

【Linux网络编程】之守护进程

【Linux网络编程】之守护进程 进程组进程组的概念组长进程 会话会话的概念会话ID 控制终端控制终端的概念控制终端的作用会话、终端、bash三者的关系 前台进程与后台进程概念特点查看当前终端的后台进程前台进程与后台进程的切换 作业控制相关概念作业状态&#xff08;一般指后…...

Vue.js如何根据访问路径切换页面

Vue Router 在前端工程中&#xff0c;路由指的是&#xff0c;根据不同的访问路径&#xff0c;展示不同组件的内容。 Vue Router是Vue.js的官方路由。 Vue Router介绍。 要使用vue Router&#xff0c;得先安装 npm install vue-router4这里的4&#xff0c;指的是第4个版本 在s…...

Vue与Konva:解锁Canvas绘图的无限可能

前言 在现代Web开发中&#xff0c;动态、交互式的图形界面已成为提升用户体验的关键要素。Vue.js&#xff0c;作为一款轻量级且高效的前端框架&#xff0c;凭借其响应式数据绑定和组件化开发模式&#xff0c;赢得了众多开发者的青睐。而当Vue.js邂逅Konva.js&#xff0c;两者结…...

collabora online+nextcloud+mariadb在线文档协助

1、环境 龙蜥os 8.9 docker 2、安装docker dnf -y install dnf-plugins-core dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sed -i shttps://download.docker.comhttps://mirrors.tuna.tsinghua.edu.cn/docker-ce /etc/yum.repos.…...

linux基础命令1

1、linux目录结构——树型结构 根目录&#xff1a;/ 用户主目录(家目录)&#xff1a;~或者 /home/edu 根目录下常见的文件夹: 2、常见的命令 1、pwd 查看当前目录 cd 切换目录 cd ~ 切换到家目录 2、ls 查看当前目录的文件信息 语法:ls [选项] [参…...

[LVGL] 在VC_MFC中移植LVGL

前言&#xff1a; 0. 在MFC中开发LVGL的优点是可以用多个Window界面做辅助扩展【类似GUIguider】 1.本文基于VC2022-MFC单文档框架移植lvgl8 2. gitee上下载lvgl8.3 源码&#xff0c;并将其文件夹改名为lvgl lvgl: LVGL 是一个开源图形库&#xff0c;提供您创建具有易于使用…...

Spring Boot整合MQTT

MQTT是基于代理的轻量级的消息发布订阅传输协议。 1、下载安装代理 进入mosquitto下载地址&#xff1a;Download | Eclipse Mosquitto&#xff0c;进行下载&#xff0c;以win版本为例 下载完成后&#xff0c;在本地文件夹找到下载的代理安装文件 使用管理员身份打开安装 安装…...

elasticsearch实战三 elasticsearch与mysql数据实时同步

一 介绍 elasticsearch数据不是一直不变的&#xff0c;需要与mysql、oracle等数据库的数据做同步。 本博客里涉及到的项目地址&#xff1a;https://www.aliyundrive.com/s/7bRWpTYsxWV 方案一&#xff1a; 同步调用&#xff0c;即操作mysql数据后&#xff0c;接着操作elastic…...

netcore openTelemetry+prometheus+grafana

一、netcore项目 二、openTelemetry 三、prometheus 四、grafana添加Dashborad aspire/src/Grafana/dashboards at main dotnet/aspire GitHub 导入&#xff1a;aspnetcore.json和aspnetcore-endpoint.json 效果&#xff1a;...

StochSync:可在任意空间中生成360°全景图和3D网格纹理

StochSync方法可以用于在任意空间中生成图像&#xff0c;尤其是360全景图和3D网格纹理。该方法利用了预训练的图像扩散模型&#xff0c;以实现零-shot生成&#xff0c;消除了对新数据收集和单独训练生成模型的需求。StochSync 结合了 Diffusion Synchronization&#xff08;DS&…...

MybatisPlus较全常用复杂查询引例(limit、orderby、groupby、having、like...)

MyBatis-Plus 是一个 MyBatis 的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。以下是 MyBatis-Plus 中常用复杂查询&#xff08;如 LIMIT、ORDER BY、GROUP BY、HAVING、LIKE 等&#xff09;的引例&#xff1a; 1. 环境准备…...

大数据项目2:基于hadoop的电影推荐和分析系统设计和实现

前言 大数据项目源码资料说明&#xff1a; 大数据项目资料来自我多年工作中的开发积累与沉淀。 我分享的每个项目都有完整代码、数据、文档、效果图、部署文档及讲解视频。 可用于毕设、课设、学习、工作或者二次开发等&#xff0c;极大提升效率&#xff01; 1、项目目标 本…...

win10的Unet项目导入阿里云训练

win10配置文件 annotated-types0.7.0 certifi2024.12.14 charset-normalizer3.4.1 click8.1.8 colorama0.4.6 contourpy1.1.1 cycler0.12.1 docker-pycreds0.4.0 eval_type_backport0.2.2 filelock3.16.1 fonttools4.55.3 fsspec2024.12.0 gitdb4.0.12 GitPython3.1.44 idna3.…...

Linux(20)——调度作业

目录 一、调度延迟的用户作业&#xff1a; 1、延迟的用户作业&#xff1a; 2、查看延迟的用户作业&#xff1a; 3、从计划中删除作业&#xff1a; 二、调度周期性用户作业&#xff1a; 1、周期性用户作业&#xff1a; 2、调度周期性用户作业&#xff1a; 3、用户作业格…...

DeepSeek赋能Vue:打造超丝滑进度条开发指南

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…...

在CT107D单片机综合训练平台上,8个数码管分别单独依次显示0~9的值,然后所有数码管一起同时显示0~F的值,如此往复。

题目&#xff1a;在CT107D单片机综合训练平台上&#xff0c;8个数码管分别单独依次显示0~9的值&#xff0c;然后所有数码管一起同时显示0~F的值&#xff0c;如此往复。 延时函数分析LED首先实现8个数码管单独依次显示0~9的数字所有数码管一起同时显示0~F的值&#xff0c;如此往…...

清除el-table选中状态 clearSelection

如何在Vue应用中使用Element UI的el-table组件&#xff0c;通过this.$refs.multipleTable.clearSelection()方法来清除所有选中行的状态。适合前端开发者了解表格组件的交互操作。 // el-table绑定ref<el-table selection-change"selsChange" ref"multipl…...

【算法】动态规划专题⑥ —— 完全背包问题 python

目录 前置知识进入正题模板 前置知识 【算法】动态规划专题⑤ —— 0-1背包问题 滚动数组优化 完全背包问题是动态规划中的一种经典问题&#xff0c;它与0-1背包问题相似&#xff0c;但有一个关键的区别&#xff1a;在完全背包问题中&#xff0c;每种物品都有无限的数量可用。…...

论文笔记-COLING2025-LLMTreeRec

论文笔记-COLING2025-LLMTreeRec: Unleashing the Power of Large Language Models for Cold-Start Recommendations LLMTreeRec: 释放大语言模型在冷启动推荐中的力量摘要1.引言2.框架2.1项目树构建2.2以LLM为中心的基于树的推荐2.2.1推荐链策略2.2.2检索策略 3.实验3.1实验设…...

c++ haru生成pdf输出饼图

#define PI 3.14159265358979323846 // 绘制饼图的函数 void draw_pie_chart(HPDF_Doc pdf, HPDF_Page page, float *data, int data_count, float x, float y, float radius) { float total 0; int i; // 计算数据总和 for (i 0; i < data_count; i) { tot…...

【‌Unity】Unity中物体的static属性作用

‌Unity中物体的static属性主要用于优化游戏性能和简化渲染过程。‌ Unity中物体的static属性的作用 优化渲染性能‌&#xff1a;当物体被标记为static时&#xff0c;Unity会在游戏运行时将其视为静止的物体&#xff0c;这意味着这些物体的渲染信息不会随着每一帧的更新而变化…...

Rust 测试指南:从入门到进阶

1. 测试基础&#xff1a;#[test] 属性 Rust 测试的基本单位是函数。只要在一个函数前面标注 #[test] 属性&#xff0c;那么在运行 cargo test 时&#xff0c;Rust 会自动识别并执行它。例如&#xff0c;新建一个库工程 adder&#xff0c;cargo new adder --lib&#xff0c;在 …...

Elasticsearch 生产集群部署终极方案

Elasticsearch 集群部署 1.集群部署1.1 新增用户1.2 优化操作系统1.3 JDK1.4 elasticsearch1.5 开机自启动 2.安全认证功能2.1 生成CA证书2.2 生成密钥2.3 上传至其他节点2.4 修改属主、属组2.5 配置文件添加参数2.6 各节点添加密钥库密码2.7 设置用户密码 1.集群部署 1.1 新增…...

电路笔记(元器件):AD 5263数字电位计(暂记)

AD5263 是四通道、15 V、256位数字电位计&#xff0c;可通过SPI/I2C配置具体电平值。 配置模式&#xff1a; W引脚作为电位器的抽头&#xff0c;可在A-B之间调整任意位置的电阻值。也可将W与A(或B)引脚短接&#xff0c;A-W间的电阻总是0欧姆&#xff0c;通过数字接口调整电位器…...

如何在电脑后台定时进行自动截图?自动截图后如何快捷保存?如何远程查看?

7-2 有时候需要对电脑的屏幕进行在后台连续性的截图保存&#xff0c;并且要可以远程查看&#xff0c;无界面&#xff0c;以达到对电脑的使用过程进行完全了解的目的&#xff0c;一般用于对小孩使用电脑的掌握&#xff0c;如果父母在外地&#xff0c;不方便就近管理&#xff0c…...

解决react中函数式组件usestate异步更新

问题&#xff1a;在点击modal组件确认后 调用后端接口&#xff0c;使用setstateone&#xff08;false&#xff09;使modal组件关闭&#xff0c;但是设置后关闭不了&#xff0c;在设置setstateone&#xff08;false&#xff09;前后打印出了对应的stateone都为true&#xff0c;但…...

skia-macos源码编译

1、下载git-hub 源码 2、下载依赖库 3、编译&#xff0c;注意选项 bin/gn gen out/release --args"is_official_buildfalse skia_use_system_expatfalse skia_use_system_icufalse skia_use_libjpeg_turbofalse skia_use_system_libpngfalse skia_use_system_libwebpfal…...

本地部署DeepSeek(Mac版本,带图形化操作界面)

一、下载安装&#xff1a;Ollama 官网下载&#xff1a;Download Ollama on macOS 二、安装Ollama 1、直接解压zip压缩包&#xff0c;解压出来就是应用程序 2、直接将Ollama拖到应用程序中即可 3、启动终端命令验证 # 输入 ollama 代表已经安装成功。 4、下载模型 点击模型…...

离线统信系统的python第三方库批量安装流程

一、关于UOS本机 操作系统&#xff1a;UOS&#xff08;基于Debian的Linux发行版&#xff09; CPU&#xff1a;海光x86 二、具体步骤 1、在联网的电脑上用控制台的pip命令批量下载指定版本的第三方库 方法A cd <目标位置的绝对路径> pip download -d . --platform many…...

群晖安装Gitea

安装Docker Docker运行Gitea 上传gitea包&#xff0c;下载地址&#xff1a;https://download.csdn.net/download/hmxm6/90360455 打开docker 点击印象&#xff0c;点击新增&#xff0c;从文件添加 点击启动 可根据情况&#xff0c;进行高级设置&#xff0c;没有就下一步 点击应…...

jmeter逻辑控制器9

1&#xff0c;简单控制器2&#xff0c;录制控制器3&#xff0c;循环控制器4&#xff0c;随机控制器5&#xff0c;随机顺序控制器6&#xff0c;if控制器7&#xff0c;模块控制器8&#xff0c;Include控制器9&#xff0c;事物控制器本文永久更新地址: 1&#xff0c;简单控制器 不…...

Spring统一修改RequestBody

我们编写RestController时&#xff0c;有可能多个接口使用了相同的RequestBody&#xff0c;在一些场景下需求修改传入的RequestBody的值&#xff0c;如果是每个controller中都去修改&#xff0c;代码会比较繁琐&#xff0c;最好的方式是在一个地方统一修改&#xff0c;比如将he…...

自动化xpath定位元素(附几款浏览器xpath插件)

在 Web 自动化测试、数据采集、前端调试中&#xff0c;XPath 仍然是不可或缺的技能。虽然 CSS 选择器越来越强大&#xff0c;但面对复杂 DOM 结构时&#xff0c;XPath 仍然更具灵活性。因此&#xff0c;掌握 XPath&#xff0c;不仅能提高自动化测试的稳定性&#xff0c;还能在爬…...

go-elasticsearch创建ik索引并进行查询操作

es-go client引入gomod go get github.com/elastic/go-elasticsearch/v8latest连接es服务器&#xff08;不经过安全校验) cfg : elasticsearch.Config{Addresses: []string{"http://localhost:9200",}, } es, err : elasticsearch.NewClient(cfg) if err ! nil {pa…...

【东莞常平】戴尔R710服务器不开机维修分享

1&#xff1a;2025-02-06一位老客户的朋友刚开工公司ERP服务器一台戴尔老服务器故障无法开机&#xff0c;于是经老客户介绍找到我们。 2&#xff1a;服务器型号是DELL PowerEdge R710 这个服务器至少也有15年以上的使用年限了。 3&#xff1a;客户反馈的故障问题为&#xff1a;…...

rebase和merge

rebase 和merge区别&#xff1a; rebase变基&#xff0c;改变基底&#xff1a;rebase会抹去提交记录。 git pull 默认merge&#xff0c;git pull --rebase 变基 rebase C、D提交属于feature分支&#xff0c;是基于master分支&#xff0c;在B提交额外拉出来的&#xff0c;当…...

SSA-TCN麻雀算法优化时间卷积神经网络时间序列预测未来Matlab实现

SSA-TCN麻雀算法优化时间卷积神经网络时间序列预测未来Matlab实现 目录 SSA-TCN麻雀算法优化时间卷积神经网络时间序列预测未来Matlab实现预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现SSA-TCN麻雀算法优化时间卷积神经网络时间序列预测未来&#xff08;优…...

2025牛客寒假算法基础集训营5(补题)

C 小L的位运算 显然&#xff0c;如果两次反置的价格小于等于交换的价格&#xff0c;那么直接全部反置就好了。 反之&#xff0c;由于交换一定低于两次反置&#xff0c;我们尽可能用交换来消去不正确的位置。不正确的位置类型只有00&#xff0c;01&#xff0c;10&#xff0c;11&…...

Kotlin Android 环境搭建

Kotlin Android 环境搭建 引言 随着移动应用的日益普及,Android 开发成为了一个热门的技术领域。Kotlin 作为一种现代的编程语言,因其简洁、安全、互操作性强等特点,被越来越多的开发者所喜爱。本文将详细介绍 Kotlin Android 环境搭建的步骤,帮助您快速上手 Kotlin Andr…...

DeepSeek图解10页PDF

以前一直在关注国内外的一些AI工具&#xff0c;包括文本型、图像类的一些AI实践&#xff0c;最近DeepSeek突然爆火&#xff0c;从互联网收集一些资料与大家一起分享学习。 本章节分享的文件为网上流传的DeepSeek图解10页PDF&#xff0c;免费附件链接给出。 1 本地 1 本地部…...