python爬虫原理和编程实战:爬取CSDN博主的账号信息

server/2024/9/18 12:44:16/ 标签: 石墨文档, python, 爬虫, ip

🧑 作者简介:阿里巴巴嵌入式技术专家,深耕嵌入式+人工智能领域,具备多年的嵌入式硬件产品研发管理经验。

📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向的学习指导、简历面试辅导、技术架构设计优化、开发外包等服务,有需要可私信联系。

python爬虫原理和编程实战:爬取CSDN博主的账号信息

  • 1. 爬虫基础知识
  • 2. Python爬虫流程
    • 2.1 发送请求
    • 2.1 获取响应
    • 2.3 解析数据
    • 2.4 存储数据
    • 2.5 处理异常和反爬虫机制
  • 3. python爬虫工具
    • 3.1 requests
    • 3.2 BeautifulSoup
    • 3.3 lxml
    • 3.4 PyQuery
    • 3.5 Scrapy
  • 4. Python爬虫的应用场景
    • 4.1 数据采集和分析
    • 4.2 SEO优化
    • 4.3 舆情监控
    • 4.4 价格监测
  • 5. python爬虫:爬取CSDN博主的账号信息
  • 6. 爬虫的常见问题
    • 6.1 IP限制和封禁
    • 6.2 验证码挑战
    • 6.3 数据结构和内容变化
    • 6.4 遵守法律法规和网站政策
    • 6.5 爬虫性能和效率
    • 6.6 日志记录和错误处理
  • 7. 总结

1. 爬虫基础知识

在这里插入图片描述

1.1 什么是爬虫

爬虫,又称网络爬虫或网络蜘蛛,是一种可以自动化地获取互联网信息的程序或脚本。它可以模拟人的行为,自动浏览网页、提取数据、甚至执行一些简单的操作。爬虫的工作原理是通过自动发送HTTP请求,获取网页内容,然后解析网页数据并进行处理。

1.2 为什么需要爬虫

在当今互联网时代,网络上充满了各种各样的信息,包括新闻、商品信息、股票数据、天气预报等。通过使用爬虫技术,我们能够自动化地获取这些信息,而不需要手动浏览每个网页,从而节省时间和成本。爬虫还可以用于数据分析、搜索引擎优化、舆情监控等各种应用场景,对于个人和企业而言,具有非常重要的意义。

2. Python爬虫流程

2.1 发送请求

爬虫首先向目标网站发送请求。这通常是通过HTTP或HTTPS协议完成的。发送请求时,我们可能还需要处理一些参数,如请求头、请求体、cookies等,以便模拟真实用户的浏览行为。

2.1 获取响应

服务器在接收到请求后,会返回响应。响应中包含了服务器返回的所有数据,这些数据通常是以HTML、JSON或其他格式编码的。

2.3 解析数据

获取到响应数据后,我们需要对其进行解析,以提取我们感兴趣的信息。这通常涉及到对HTML或JSON数据的解析。

2.4 存储数据

解析出数据后,我们可能需要将这些数据存储起来,以便后续的分析或处理。

2.5 处理异常和反爬虫机制

爬虫的运行过程中,可能会遇到各种异常,如网络问题、服务器错误等。此外,很多网站为了防止爬虫,会设置一些反爬虫机制,如验证码、请求频率限制等。因此,我们在编写爬虫时,需要妥善处理这些异常和反爬虫机制,以保证爬虫的稳定性和可靠性。

python_25">3. python爬虫工具

3.1 requests

requests是Python中最受欢迎的HTTP库之一,它提供了简洁易用的API,可用于发送HTTP请求和处理响应。

3.2 BeautifulSoup

BeautifulSoup是一个优秀的HTML和XML解析库,它能够提供简单明了的API和丰富的功能,用于网页信息的提取和解析。

3.3 lxml

lxml是一个高性能的XML和HTML解析库,基于libxml2和libxslt库,可以高效地处理大型文档,适用于需求复杂的网页信息提取。

3.4 PyQuery

PyQuery是一个类似于jQuery的解析库,使用jQuery风格的语法来解析HTML文档,提取所需的数据。

3.5 Scrapy

Scrapy是一个功能强大、灵活的爬虫框架,适用于快速开发爬虫应用,支持数据的抓取、处理和存储。

4. Python爬虫的应用场景

Python爬虫技术具有广泛的应用场景,以下是一些常见的应用领域:

4.1 数据采集和分析

爬虫在数据采集和分析领域有着广泛的应用。企业可以利用爬虫技术从互联网上收集各种数据,如市场行情、竞争对手的动向、产品信息等,用于商业数据分析、市场调研等。同时,爬虫还可以用于科学研究、舆情分析等领域,为数据分析提供更多的信息来源。

4.2 SEO优化

搜索引擎优化(SEO)是一种重要的网络营销手段,而爬虫可以用于获取各种有关网站的数据,如收录情况、关键词排名等,帮助网站优化其搜索引擎排名。通过爬虫技术,可以及时了解搜索引擎对网页的抓取情况,优化网站结构和内容,提高网站在搜索结果中的排名。

4.3 舆情监控

舆情监控是企业常用的一种市场调研手段,通过对社交媒体、新闻网站等信息源进行监控和分析,了解公众对企业、产品或服务的舆论趋势。爬虫可以帮助企业及时获取各种网络信息,并进行分析和汇总,快速了解公众对企业的看法,及时处理负面舆情,制定合适的品牌营销策略。

4.4 价格监测

在电商行业,价格是消费者购买产品时非常重要的考量因素。企业可以利用爬虫技术监测竞争对手的价格变化,也可以根据市场行情进行实时调整,以更好地制定价格和促销策略。而消费者也可以利用爬虫技术来监测商品价格的变动,以获取最优惠的购买时机。

pythonCSDN_59">5. python爬虫:爬取CSDN博主的账号信息

如下所示,我们使用requestsBeautifulSoup两个库开发了一个获取CSDN博主的账号信息的爬虫程序。

python">import requests
from bs4 import BeautifulSoup
import sys
from datetime import datetime
from urllib.parse import urlparsedef make_request(url):iple-quoted-string string">"""发送HTTP请求到指定的URL,并返回响应内容。"""try:headers = {'User-Agent': ('Mozilla/5.0 (Windows NT 10.0; Win64; x64) ''AppleWebKit/537.36 (KHTML, like Gecko) ''Chrome/88.0.4324.150 Safari/537.36')}response = requests.get(url, headers=headers)response.raise_for_status()return responseexcept requests.exceptions.HTTPError as errh:print ("Http Error:", errh)except requests.exceptions.ConnectionError as errc:print ("Error Connecting:", errc)except requests.exceptions.Timeout as errt:print ("Timeout Error:", errt)except requests.exceptions.RequestException as err:print ("Oops: Something Else", err)return Nonedef parse_html(html_content):iple-quoted-string string">"""解析HTML内容并返回BeautifulSoup对象。"""return BeautifulSoup(html_content, 'html.parser')def get_user_id_from_url(url):iple-quoted-string string">"""从URL中提取用户ID"""parse_result = urlparse(url)# 假设用户ID是URL路径的最后一部分user_id = parse_result.path.rstrip('/').split('/')[-1]return user_iddef get_user_nickname(soup):iple-quoted-string string">"""根据提供的BeautifulSoup对象,提取并返回用户昵称。"""nickname_selector = "#userSkin > div.user-profile-head > div.user-profile-head-info > div.user-profile-head-info-t > div > div.user-profile-head-info-rr > div.user-profile-head-info-r-t > div.user-profile-head-name > div:nth-child(1)"nickname_element = soup.select_one(nickname_selector)return nickname_element.get_text(strip=True) if nickname_element else "未知"def get_fans_count(soup):iple-quoted-string string">"""根据提供的BeautifulSoup对象,提取并返回粉丝数量。"""fans_selector = "#userSkin > div.user-profile-head > div.user-profile-head-info > div.user-profile-head-info-t > div > div.user-profile-head-info-rr > div.user-profile-head-info-r-c > ul > li:nth-child(4) > a > div.user-profile-statistics-num"fans_element = soup.select_one(fans_selector)fans_text = fans_element.get_text(strip=True) if fans_element else "0"# 移除数字中的逗号return fans_text.replace(",", "")def get_user_rank(soup):iple-quoted-string string">"""根据提供的BeautifulSoup对象,提取并返回用户排名。"""rank_selector = "#userSkin > div.user-profile-head > div.user-profile-head-info > div.user-profile-head-info-t > div > div.user-profile-head-info-rr > div.user-profile-head-info-r-c > ul > li:nth-child(3) > a > div.user-profile-statistics-num"rank_element = soup.select_one(rank_selector)rank_text = rank_element.get_text(strip=True) if rank_element else "0"# 移除数字中的逗号return rank_text.replace(",", "")def get_personal_introduction(soup):iple-quoted-string string">"""根据提供的BeautifulSoup对象,提取并返回个人简介内容。"""intro_selector = "p.introduction-fold.default"intro_element = soup.select_one(intro_selector)if intro_element:# 获取 <p> 标签下的所有文本intro_text = intro_element.get_text(strip=True)# 将 <span> 标签里的文本 "个人简介:" 移除intro_text = intro_text.replace('个人简介:', '', 1).strip()return intro_textreturn "未知"def get_user_coding_age(soup):iple-quoted-string string">"""根据提供的BeautifulSoup对象,提取并返回用户的码龄(编程年限),不包含 '码龄' 二字。"""coding_age_selector = "#userSkin > div.user-profile-head > div.user-profile-head-info > div.user-profile-head-info-t > div > div.user-profile-head-info-rr > div.user-profile-head-info-r-t > div.user-profile-head-name > div.person-code-age > span"coding_age_element = soup.select_one(coding_age_selector)if coding_age_element:coding_age_text = coding_age_element.get_text(strip=True)# 移除 "码龄" 二字coding_age_text = coding_age_text.replace("码龄", "").strip()return coding_age_textreturn "未知"def get_blog_level(soup):iple-quoted-string string">"""根据提供的BeautifulSoup对象,提取并返回用户的博客等级。"""blog_level_selector = ".user-profile-icon img[src*='blog']"blog_level_element = soup.select_one(blog_level_selector)if blog_level_element and 'src' in blog_level_element.attrs:src = blog_level_element['src']# 提取 src 中 "blog" 后的直到 ".png" 前的数字,作为等级level = src.split('blog')[-1].split('.png')[0]return levelreturn "未知"def get_yuanli_level(soup):iple-quoted-string string">"""根据提供的BeautifulSoup对象,提取并返回用户的原力等级。"""yuanli_level_selector = "#userSkin > div.user-profile-body > div > div.user-profile-body-left > div > div.user-influence-list.user-profile-aside-common-box > ul > li > div.influence-bottom-box > div > div > dl:nth-child(1) > dt"yuanli_level_element = soup.select_one(yuanli_level_selector)return yuanli_level_element.get_text(strip=True) if yuanli_level_element else "未知"def get_registration_date(soup):iple-quoted-string string">"""根据提供的BeautifulSoup对象,提取并返回用户的注册时间。"""registration_date_selector = "#userSkin > div.user-profile-head > div.user-profile-head-info > div.user-profile-head-info-b > div.user-profile-head-info-b-r > div > ul > li.user-general-info-join-csdn > span.user-general-info-key-word"registration_date_element = soup.select_one(registration_date_selector)return registration_date_element.get_text(strip=True) if registration_date_element else "未知"def get_graduate_school(soup):iple-quoted-string string">"""根据提供的BeautifulSoup对象,提取并返回用户的毕业院校信息。"""graduate_school_selector = "#userSkin > div.user-profile-head > div.user-profile-head-info > div.user-profile-head-info-b > div.user-profile-head-info-b-r > div > ul > li.user-general-info-edu > div > span.user-general-info-key-word"graduate_school_element = soup.select_one(graduate_school_selector)return graduate_school_element.get_text(strip=True) if graduate_school_element else "未知"def get_registration_days(soup):iple-quoted-string string">"""计算从注册日期到今天共多少天。"""registration_date_selector = "#userSkin > div.user-profile-head > div.user-profile-head-info > div.user-profile-head-info-b > div.user-profile-head-info-b-r > div > ul > li.user-general-info-join-csdn > span.user-general-info-key-word"registration_date_element = soup.select_one(registration_date_selector)if registration_date_element:date_text = registration_date_element.get_text(strip=True)registration_date = datetime.strptime(date_text, '%Y-%m-%d')today = datetime.now()days_registered = (today - registration_date).daysreturn days_registeredreturn "未知"def convert_days_to_ymd(days):iple-quoted-string string">"""将天数转换成年月日的字符串形式"""years = days // 365days -= years * 365months = days // 30days -= months * 30result = []if years > 0:result.append(f"{years}年")if months > 0:result.append(f"{months}月")if days > 0:result.append(f"{days}天")return "".join(result) if result else "0天"def get_blog_description(soup):iple-quoted-string string">"""根据提供的BeautifulSoup对象,提取并返回博客的描述信息。"""blog_description_selector = "#userSkin > div.user-profile-head > div.user-profile-head-info > div.user-profile-head-info-b > div.user-profile-head-info-b-r > div > div > div:nth-child(2) > div"blog_description_element = soup.select_one(blog_description_selector)return blog_description_element.get_text(strip=True) if blog_description_element else "未知"def get_published_articles_count(soup):iple-quoted-string string">"""根据提供的BeautifulSoup对象,提取并返回已发表文章的数量。"""articles_count_selector = "#userSkin > div.user-profile-head > div.user-profile-head-info > div.user-profile-head-info-t > div > div.user-profile-head-info-rr > div.user-profile-head-info-r-c > ul > li:nth-child(2) > a > div.user-profile-statistics-num"articles_count_element = soup.select_one(articles_count_selector)return articles_count_element.get_text(strip=True) if articles_count_element else "未知"# 主函数,执行脚本逻辑
def main(url):response = make_request(url)if response and response.text:# 请求网页soup = parse_html(response.text)# 获取用户IDuser_id = get_user_id_from_url(url)print(f"用户ID:{user_id}")# 获取用户昵称user_nickname = get_user_nickname(soup)print(f"用户昵称:{user_nickname}")# 获取个人简介personal_introduction = get_personal_introduction(soup)print(f"个人简介:{personal_introduction}")# 获取博客描述信息blog_description = get_blog_description(soup)print(f"博客描述:{blog_description}")# 获取毕业院校信息graduate_school = get_graduate_school(soup)print(f"毕业院校:{graduate_school}")# 获取码龄和注册时间# 获取码龄coding_age = get_user_coding_age(soup)# 获取注册时间registration_date = get_registration_date(soup)# 获取注册天数days_registered = get_registration_days(soup)# 注册时间转换为易读格式ymd_registered = convert_days_to_ymd(days_registered)print(f"注册时间:{registration_date}, 已注册{days_registered}天({ymd_registered}), 码龄:{coding_age}")# 获取博客等级, 原力等级blog_level = get_blog_level(soup)yuanli_level = get_yuanli_level(soup)print(f"博客等级:{blog_level}级,原力等级:{yuanli_level}级")# 获取已发表文章数articles_count = get_published_articles_count(soup)print(f"已发表文章数:{articles_count}")# 获取粉丝数量fans_count = get_fans_count(soup)print(f"粉丝数量:{fans_count}")# 获取用户排名user_rank = get_user_rank(soup)print(f"用户排名:{user_rank}")else:print("请求失败,请检查网页URL地址。")if __name__ == "__main__":# 获取命令行参数if len(sys.argv) < 2:print("Usage: python script.py <URL>")sys.exit(1)input_url = sys.argv[1]main(input_url)

演示:

$ python3 spider_csdn_userinfo.py https://blog.csdn.net/g310773517
用户ID:g310773517
用户昵称:I'mAlex
个人简介:深耕嵌入式+人工智能领域,阿里巴巴嵌入式技术专家。分享嵌入式开发领域的知识、工作过程中的思考、人生的感悟。提供嵌入式方向的学习指导和简历面试辅导,有需要可私信联系。
博客描述:科技改变人类,技术成就未来
毕业院校:未知
注册时间:2010-03-17, 已注册5145天(14年1月5天), 码龄:14年
博客等级:6级,原力等级:5级
已发表文章数:51
粉丝数量:6948
用户排名:3061

6. 爬虫的常见问题

Python爬虫在运行时确实需要注意一系列问题,在爬虫开发过程中着重注意。

6.1 IP限制和封禁

问题描述:许多网站都会采取反爬虫措施,其中最常见的就是检测并限制来自特定IP地址的请求频率。如果爬虫发送的请求过于频繁,服务器可能会暂时或永久封禁该IP地址。

解决方案

  • 使用代理IP:通过轮换使用多个代理IP地址,可以有效避免单一IP被封禁的问题。在爬虫商用过程中,使用IP池代理商是个不错的选择。
    在这里插入图片描述

  • 控制请求频率:合理设置请求之间的间隔时间,避免对服务器造成过大的压力。

  • 遵守robots.txt:确保爬虫遵守目标网站的robots.txt文件规定,这有助于减少被封禁的风险。

6.2 验证码挑战

问题描述:有些网站在检测到异常请求时,会要求用户输入验证码以验证身份。这对于自动化爬虫来说是一个挑战。

解决方案

  • 使用第三方服务:有些服务提供自动识别和输入验证码的功能,但这并不是100%可靠的。
  • 人工介入:当爬虫遇到验证码时,可以设计一种机制,让用户手动输入验证码。

6.3 数据结构和内容变化

问题描述:网站的数据结构和内容可能会随着时间的推移而发生变化,这可能导致爬虫失效。

解决方案

  • 定期更新爬虫:定期检查目标网站的结构和内容,并更新爬虫代码以适应这些变化。
  • 使用动态解析方法:尽量避免硬编码特定的元素ID或类名,而是使用相对位置或基于内容的解析方法。

6.4 遵守法律法规和网站政策

问题描述:在爬取数据时,必须遵守相关的法律法规和网站的隐私政策、服务条款等。

解决方案

  • 了解并遵守法律:确保你的爬虫行为符合当地的法律法规,特别是关于数据保护和隐私的法律。
  • 尊重网站政策:仔细阅读并遵守目标网站的隐私政策和服务条款,确保你的爬虫行为符合网站的规定。

6.5 爬虫性能和效率

问题描述爬虫的性能和效率直接影响到数据的获取速度和资源的消耗。

解决方案

  • 优化代码:使用高效的编程技术和算法来优化爬虫代码。
  • 并发和异步处理:利用Python的并发和异步特性,同时处理多个请求,提高爬取效率。
  • 数据库存储:使用数据库来存储爬取的数据,以便后续的分析和处理。

6.6 日志记录和错误处理

问题描述:在爬虫运行过程中,可能会遇到各种错误和异常情况,需要记录并处理这些错误。

解决方案

  • 记录日志:使用Python的日志模块记录爬虫的运行状态和错误信息。
  • 异常处理:在代码中添加异常处理机制,确保爬虫在遇到错误时能够优雅地退出或重试。

7. 总结

Python爬虫技术是一种强大而灵活的工具,能够帮助我们高效地获取互联网上的数据,用于各种实际应用场景。在使用爬虫时,需要注重合法合规,遵守网站的使用政策,避免对网站造成不必要的压力或侵犯隐私等问题。


http://www.ppmy.cn/server/5536.html

相关文章

Spring Boot集成atomikos快速入门Demo

1.什么是atomikos Atomikos是一个轻量级的分布式事务管理器&#xff0c;实现了Java Transaction API (JTA)规范&#xff0c;可以很方便的和Spring Boot集成&#xff0c;支持微服务场景下跨节点的全局事务。Atomikos公司官方网址为&#xff1a;https://www.atomikos.com/。其旗下…

微服务架构中的数据一致性设计及技术实现

目录 1.概要设计 1.1数据一致性模型 1.1.1 强一致性 1.1.2 最终一致性 1.2 技术实现策略 1.2.1 使用分布式事务 1.2.2 基于事件的最终一致性&#xff08;Event-Driven Architecture, EDA&#xff09; 1.2.3 使用数据库的特性 1.2.4 业务层面的策略 1.2.5 分布式锁和版…

蓝桥杯第十五界软件测试线下省赛题目分析及解决

PS 需要第十五界蓝桥杯被测系统或者功能测试模板、单元测试被测代码、自动化测试被测代码请加&#x1f427;:1940787338 备注&#xff1a;15界蓝桥杯省赛软件测试 题目1&#xff1a;功能测试 题目描述 ​ 某物流公司的货运收费标准根据重量、距离和节假日三个因素来确定。如…

华为海思校园招聘-芯片-数字 IC 方向 题目分享——第四套

华为海思校园招聘-芯片-数字 IC 方向 题目分享——第四套 (共9套&#xff0c;有答案和解析&#xff0c;答案非官方&#xff0c;仅供参考&#xff09;&#xff08;共九套&#xff0c;每套四十个选择题&#xff09; 部分题目分享&#xff0c;完整版获取&#xff08;WX:didadida…

通用大模型研究重点之五:llama family

LLAMA Family decoder-only类型 LLaMA&#xff08;Large Language Model AI&#xff09;在4月18日公布旗下最大模型LLAMA3&#xff0c;参数高达4000亿。目前meta已经开源了80亿和700亿版本模型&#xff0c;主要升级是多模态、长文本方面工作。 模型特点&#xff1a;采用标准的…

ChatGPT智能写作助手指导下的论文创作

ChatGPT无限次数:点击直达 ChatGPT智能写作助手指导下的论文创作 在当今信息爆炸的时代&#xff0c;人们需要处理大量文本和信息。为了提高工作效率&#xff0c;许多学者和专业人士转向人工智能工具&#xff0c;如ChatGPT&#xff0c;来协助他们进行文本生成和创作。本文将介绍…

1.为什么选择Vue框架

参考&#xff1a;百战程序员 为什么选择Vue框架 Vue是什么&#xff1f; 渐进式 JavaScript 框架&#xff0c;易学易用&#xff0c;性能出色&#xff0c;适用场景丰富的 Web 前端框架 为什么要学习Vue Vue是目前前端最火的框架之一Vue是目前企业技术栈中要求的知识点Vue可以…

第63天:服务攻防-框架安全CVE 复现DjangoFlaskNode.JSJQuery

目录 思维导图 案例一&#xff1a;JavaScript-开发框架安全-Jquery&Node node.js目录穿越 CVE-2021-21315命令执行 Jquery CVE-2018-9207 案例二&#xff1a;Python-开发框架安全-Django&Flask django cve_2019_14234 CVE-2021-35042 flask ssti 思维导图 案…

STM32G431RBT6之时钟树配置与生成工程

默认大家都下载了蓝桥杯嵌入式资源包了哈. 首先,打开cubumx,修改RCC与SYS. 打开并观察原理图,发现晶振是24Mhz. 第一步,打开Clock Configuration. 第二步,修改晶振为原理图相对应的24Mhz. 第三步,切换到HSE. 第四步,切换到PLLCLK. 第五步,设置HCLK为80Mhz(15届真题要求为8…

CentOS常见的命令

CentOS&#xff08;Community ENTerprise Operating System&#xff09;是一个基于Red Hat Enterprise Linux源代码构建的开源企业级Linux发行版。在日常的系统管理和维护中&#xff0c;掌握一些常见的CentOS命令是非常必要的。本文将介绍一些CentOS系统中常用的命令&#xff0…

python——函数

概念 函数就是将一段具有独立功能的代码块整合到一个整体并命名&#xff0c;在需要的位置调用这个名称去完成对应的需求 定义函数 def 函数名&#xff08;参数&#xff09;&#xff1a;代码1......return 值函数名 函数名由编程人员自定义的&#xff0c;满足标识符命名规则…

Windows COM技术:COM介绍、代码演示。

目录 步骤一&#xff1a;理解COM技术 介绍COM的基础知识 1. COM的目的和特点 2. COM的关键概念 3. COM的实现 4. COM与DCOM、ActiveX 讨论COM的用途 1. 软件自动化 2. 插件和扩展 3. 跨语言开发 4. 分布式计算 5. 系统级组件 6. 网络浏览器插件 步骤二&#xff1a…

4PCS、super4PCS粗配准算法

4PCS、super4PCS粗配准算法 1. 简介2. 原理3. 参考 1. 简介 4PCS系列的点云配准方法有点类似RANSAC&#xff0c;链接见&#xff1a;RANSAC 配准算法。 通过找出目标点云和原始点云中对应的两组点进行旋转平移求解出T&#xff0c;然后在众多的候选T中旋转一组最大重合的T&…

【做一名健康的CSDNer】

程序员由于工作性质&#xff0c;常常需要长时间面对电脑&#xff0c;这可能对身心健康带来挑战。以下是一些实用的建议&#xff0c;帮助程序员保持身心健康&#xff1a; 规律生活&#xff1a;建立健康的生活习惯&#xff0c;包括规律的作息时间和固定的饮食时间&#xff0c;保证…

【文章复现】基于主从博弈的社区综合能源系统分布式协同 优化运行策略

随着能源市场由传统的垂直一体式结构向交互竞争型 结构转变&#xff0c;社区综合能源系统的分布式特征愈发明显&#xff0c;传统 的集中优化方法难以揭示多主体间的交互行为。该文提出一 种基于主从博弈的社区综合能源系统分布式协同优化运行 策略&#xff0c;将综合能源销售商…

Linux CPU 占用率 100% 排查

其他层面要考虑到的地方 mysql&#xff0c;有执行时间特别长的sql、死锁redis雪崩等相关问题并发导出数据量大Java定时器服务业务复杂&#xff0c;比如像每天要更新电商的统计表&#xff0c;每天发送优惠券等业务需要提前计算才能保证业务使用时的流畅性&#xff0c;我这个原因…

【项目实战】记录一次PG数据库迁移至GaussDB测试(下)

上一篇分享了安装、迁移&#xff0c;本篇将继续分享迁移前操作、 DRS迁移数据、迁移后一致性检查、问题总结及解决方法。 目录 四、迁移前操作 4.1 源端(PG) 4.2 目标端(GaussDB库) 五、DRS迁移数据 5.1 创建复制用户 5.2创建迁移任务。 六、迁移后一致性检查 6.1使用…

10 SQL进阶 -- 综合练习题 -- 10道经典SQL题目,配套数据与解答

1. 创建表结构和导入数据 1.1 新建数据库 1.2 执行建表语句 点击下方链接直接下载创建数据表脚本:http://tianchi-media.oss-cn-beijing.aliyuncs.com/dragonball/SQL/create_table.sql 执行建表语句执行成功查看创建的表1.3 导入数据 点击下方链接直接下载插入数据脚本:htt…

20240417,友元 FRIEND

本来要学习的吃瓜吃了一下午 目录 3.1 全局函数做友元 3.2 友元类 3.3 成员函数做友元 三&#xff0c;友元 3.1 全局函数做友元 #include<iostream> using namespace std; class Building {friend void goodGay(Building* building);//好朋友&#xff0c;可以访问…

4.2OpenCV-运动分析类、OpenCV-对象分割类、 OpenCV-颜色过滤器类、OpenCV-简单图像处理类

4.2.6 OpenCV-运动分析类 本节内容介绍OpenCV中的运动分析类demo 4.2.6.1 goodfeature_track 角点检测 机器人端启动摄像头roslaunch robot_vision robot_camera.launch 机器人端启动角点检测roslaunch robot_vision goodfeature_track.launch PC端启动rqt_image_view工具/…