数据新探:用Python挖掘互联网的隐藏宝藏

news2024/11/18 21:25:43

Hello,我是你们的阿佑,今天给大家上的菜是——数据存储!听起来枯燥无味?错了!阿佑将带你重新认识数据存储的艺术。就像为珍贵的艺术品寻找完美的展览馆,为你的数据选择合适的存储方式同样重要!

文章目录

    • 1. 引言
      • 1.1 数据抓取在信息时代的意义
      • 1.2 有效存储抓取数据的重要性
    • 2. 数据抓取
      • 2.1 发送请求获取网页内容
        • 2.1.1 利用`requests`定制请求 headers
        • 2.1.2 处理请求异常与重试机制
      • 2.2 解析网页提取信息
        • 2.2.1 `BeautifulSoup`高级用法:复杂选择器与数据提取技巧
        • 2.2.2 动态页面数据抓取:Selenium初步介绍
    • 2. 数据抓取
      • 2.3 实战案例:简单网页内容抓取
        • 2.3.1 目标选取与策略规划
        • 2.3.2 编写代码实现数据提取
  • 数据抓取与存储
    • 3. 数据存储
      • 3.1 数据清洗
        • 3.1.1 去除无效标签与空白字符
        • 3.1.2 数据标准化处理
      • 3.2 存储方式概览
        • 3.2.1 文本文件存储(CSV, JSON)
        • 3.2.2 关系型数据库(SQLite, MySQL)基础
        • 3.2.3 非关系型数据库(MongoDB)简介
      • 3.3 实现数据存储示例
        • 3.3.1 CSV存储:使用pandas库导出数据
        • 3.3.2 数据库操作入门:连接、插入数据至SQLite
  • 数据抓取与存储
    • 4. 结论
      • 4.1 本章核心知识回顾
      • 4.2 数据抓取与存储在项目中的综合运用思考

在这里插入图片描述

1. 引言

在这个信息爆炸的时代,我们每天都在产生海量的数据。从社交媒体的动态,到新闻网站的头条,再到电商网站上的商品信息,数据无处不在。想象一下,如果你是一名侦探,那么数据就是你的线索,而数据抓取就是你的放大镜和显微镜,帮助你从海量的线索中找到真相。

1.1 数据抓取在信息时代的意义

数据抓取,就像是在互联网的海洋中捕鱼,你需要一张网,这张网就是你的抓取工具。无论是用Python的requests库,还是用爬虫框架Scrapy,你都能从网页上抓取到你想要的信息。这不仅仅是为了获取数据,更是为了获取那些能够为你所用,能够转化为价值的信息。

想象一下,你是一名市场分析师,你需要了解竞争对手的动态,那么通过数据抓取,你可以实时监控对手的网站,获取他们的产品信息、价格变动、促销活动等,这些信息对于制定市场策略至关重要。

1.2 有效存储抓取数据的重要性

抓取到的数据就像是刚捕捞上来的鱼,如果不好好处理,很快就会变质。因此,数据的存储和清洗就显得尤为重要。你需要将数据进行清洗,去除无效的标签和空白字符,进行数据标准化处理,这样数据才能被有效地利用。

再以侦探为例,你抓取到的线索需要被整理和归档,这样在需要的时候才能迅速找到。同样,数据也需要被有效地存储,无论是用文本文件(如CSV、JSON),还是用数据库(如SQLite、MySQL),都是为了能够方便地检索和分析。

接下来阿佑将带着大家们继续深入探索数据抓取的具体技术细节,以及如何有效地存储和管理这些数据。

请记住,数据是新时代的石油,而掌握数据抓取与存储的技能,就是掌握了挖掘和提炼这种宝贵资源的能力!


2. 数据抓取

何为数据抓取?简而言之数据抓取就像是咱们在参与一场精心策划的荒野求生(没错,就是那个生吃xx的贝爷),在这之前咱们需要准备合适的工具、规划清晰的路线,还要学会应对各种未知的挑战~

2.1 发送请求获取网页内容

在互联网这个大舞台上,每个网站都是一个独立的表演者,而我们要做的,就是成为那个能够欣赏到精彩表演的观众。但是,如果我们直接闯进去,可能会被“保安”(网站的反爬虫机制)给拦下来。所以,我们需要乔装打扮,低调入场。

2.1.1 利用requests定制请求 headers

首先,我们需要一件“外套”——也就是我们的请求头(headers)。请求头里包含了很多信息,比如我们是谁(User-Agent),我们从哪里来(Referer),我们想要什么(Accept)等等。

想象一下,你是一位侦探,需要潜入一个高端的社交场合。你不能穿着牛仔裤和T恤就去了,你需要西装革履,带上礼帽,这样才不会引起怀疑。同样,在发送HTTP请求时,我们也需要伪装成浏览器,而不是赤裸裸的爬虫。

下面是一个使用requests库发送HTTP请求,并设置自定义headers的示例:

import requests

# 目标网页
url = 'http://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',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
    'Accept-Language': 'en-US,en;q=0.5',
    'Accept-Encoding': 'gzip, deflate, br',
    'Connection': 'keep-alive',
    'DNT': '1'
}

# 发送请求
response = requests.get(url, headers=headers)

# 检查请求是否成功
if response.status_code == 200:
    print('请求成功!')
else:
    print('请求失败,错误代码:', response.status_code)

上面的代码模拟了一个浏览器的请求,使用了常见的User-Agent字符串,以及其他一些headers,来提高请求的成功率。

2.1.2 处理请求异常与重试机制

但是,即使我们伪装得再好,也有可能遇到意外情况,比如网络断了,或者网站暂时不可用。这时候,我们就需要有一个“备用计划”。

在编程中,这个备用计划就是异常处理和重试机制。我们可以使用Python的try...except语句来捕获异常,并使用循环来实现重试。

下面是一个带有异常处理和重试机制的请求示例:

import time

# 尝试次数
max_attempts = 5

for attempt in range(max_attempts):
    try:
        response = requests.get(url, headers=headers)
        if response.status_code == 200:
            print('请求成功!')
            break
        else:
            print('请求失败,错误代码:', response.status_code)
    except requests.exceptions.RequestException as e:
        print('请求异常:', e)
    
    # 等待一段时间后重试
    time.sleep(2 ** attempt)

if attempt == max_attempts - 1:
    print('尝试了', max_attempts, '次,仍然无法成功请求。')

上面的代码尝试了5次,如果每次都失败了,就会打印出错误信息。每次重试之间,代码会等待的时间是指数增长的(2的幂),这样可以避免在网站暂时不可用时,过于频繁地发送请求。


通过上述的实战小项目,咱们一块学会了如何用requests库发送HTTP请求,并如何设置了自定义的headers来伪装成浏览器。咱们还学会了如何处理请求过程中可能出现的异常,并实现了一个简单的重试机制。这些技能将为我们的数据抓取之旅打下坚实的基础。接下来,我们将探索如何解析网页并提取出我们需要的信息,加油 (ง •_•)ง !

在这里插入图片描述

2.2 解析网页提取信息

在数据抓取的世界里,一旦我们成功地用requests库获取了网页内容,接下来就是展现真正技术的时刻了——解析这些内容,提取出我们感兴趣的数据。

2.2.1 BeautifulSoup高级用法:复杂选择器与数据提取技巧

BeautifulSoup是我们的“瑞士军刀”,它可以帮助我们从HTML的丛林中找到那些隐藏的宝石。但是,如果你面对的是一个结构复杂的网页,你可能需要一些更高级的技巧。

想象一下,你是一位寻宝者,而网页就像是一张错综复杂的藏宝图。你需要学会阅读这张地图上的每一个标记和符号,才能找到宝藏。在BeautifulSoup中,这些“标记和符号”就是选择器。

下面是一个使用BeautifulSoup提取网页中所有链接的示例:

from bs4 import BeautifulSoup
import requests

# 发送HTTP请求获取网页内容
response = requests.get('http://example.com')
response.raise_for_status()  # 如果请求失败,将抛出异常

# 使用BeautifulSoup解析网页内容
soup = BeautifulSoup(response.text, 'html.parser')

# 提取所有的链接
links = soup.find_all('a')

# 打印每个链接的href属性(即URL)
for link in links:
    print(link.get('href'))

上面的代码首先发送一个GET请求到指定的URL,并使用BeautifulSoup解析返回的HTML内容。然后,它使用find_all方法找到所有的<a>标签(即链接),并打印出每个链接的href属性。

但是,如果你想要提取的数据不是那么简单,比如某个特定的类别的商品信息,你可能需要使用更复杂的选择器。这时,你可以利用CSS选择器的强大功能:

# 假设我们想要提取特定类别的商品信息
products = soup.select('.product-category .product-name')

for product in products:
    print(product.text)

上面的代码使用了select方法和CSS选择器来找到所有属于某个类别的商品名称。

2.2.2 动态页面数据抓取:Selenium初步介绍

有时候,宝藏并不是那么容易找到的。有些网站的数据是通过JavaScript动态加载的,这意味着使用requestsBeautifulSoup可能无法获取到这些数据。这时,我们需要一个更强大的工具——Selenium。

Selenium是一个用于模拟浏览器操作的工具,它可以让我们控制一个真实的浏览器,就像真人使用浏览器一样。

想象一下,你是一位特工,需要潜入一个高度安全的网站。你不能简单地走进去,你需要伪装、策略,甚至可能需要一些小道具。Selenium就是我们的伪装和小道具。

下面是一个使用Selenium获取动态加载数据的示例:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

# 设置Selenium WebDriver
driver = webdriver.Chrome()

# 打开网页
driver.get('http://example.com')

# 等待页面加载完成
driver.implicitly_wait(10)  # 等待最多10秒

# 定位元素并进行操作,例如填写搜索框并提交
search_box = driver.find_element(By.NAME, 'q')
search_box.send_keys('数据抓取')
search_box.send_keys(Keys.RETURN)

# 等待搜索结果加载
driver.implicitly_wait(10)

# 使用BeautifulSoup解析当前页面的HTML内容
from bs4 import BeautifulSoup
soup = BeautifulSoup(driver.page_source, 'html.parser')

# 提取搜索结果中的数据
# 假设搜索结果的标题都包含在<h2>标签中
titles = soup.find_all('h2')

for title in titles:
    print(title.text)

# 关闭浏览器
driver.quit()

上面的代码首先启动了一个Chrome浏览器实例,然后访问了一个网页,进行了搜索操作,等待搜索结果加载完成后,使用BeautifulSoup解析当前页面的HTML内容,并提取了搜索结果的标题。


通过上述内容,我们学会了如何使用BeautifulSoup来解析HTML内容,并使用CSS选择器来提取复杂的数据。我们还了解了如何使用Selenium来处理那些通过JavaScript动态生成的内容。掌握了这些技能,你将能够在数据抓取的海洋中乘风破浪,找到那些隐藏的宝藏!

好的,让我们以一种接地气且有趣的方式深入探讨第2.3点——实战案例:简单网页内容抓取。


2. 数据抓取

2.3 实战案例:简单网页内容抓取

在数据抓取的世界里,理论是灰色的,而生命之树常青。掌握了requestsBeautifulSoup的使用,了解了Selenium的魔力,现在是时候将这些工具应用到实战中,抓取我们想要的数据了。

2.3.1 目标选取与策略规划

首先,我们需要确定目标。想象一下,你是一位猎人,你需要知道你要打的是什么猎物。在数据抓取中,这就意味着你需要知道你想从哪个网站抓取什么数据。

举个例子,假设我们想从一个新闻网站抓取最新的新闻标题和链接。在开始之前,我们需要规划一下策略:

  1. 分析网站的结构,找到新闻标题和链接所在的HTML标签和属性。
  2. 设定请求头,模拟浏览器访问。
  3. 发送请求,获取网页内容。
  4. 使用BeautifulSoup解析内容,提取新闻标题和链接。
  5. 存储提取的数据。
2.3.2 编写代码实现数据提取

接下来,让我们编写一个完整的代码示例,来实现上述策略:

import requests
from bs4 import BeautifulSoup

# 目标新闻网站
url = 'http://news.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'
}

# 发送HTTP请求
response = requests.get(url, headers=headers)

# 确保请求成功
if response.status_code == 200:
    # 使用BeautifulSoup解析网页内容
    soup = BeautifulSoup(response.text, 'html.parser')
    
    # 假设新闻标题和链接都在<div class="news-item">中
    news_items = soup.find_all('div', class_='news-item')
    
    for item in news_items:
        # 提取新闻标题,假设标题在<h2>标签中
        title = item.find('h2').text.strip()
        
        # 提取新闻链接,假设链接在<a>标签的href属性中
        link = item.find('a')['href'].strip()
        
        # 打印新闻标题和链接
        print(f'标题: {title}')
        print(f'链接: {link}')
        print('---')
else:
    print('请求网页失败,错误代码:', response.status_code)

在这个例子中,我们首先定义了目标URL和自定义的请求头。然后,我们发送了一个GET请求到新闻网站,并检查了响应状态码以确保请求成功。接下来,我们使用BeautifulSoup解析HTML内容,并查找所有包含新闻的<div>元素。对于每个新闻项,我们提取了标题和链接,并打印出来。

请注意,这个代码示例是一个简化的版本,实际的网页结构可能会更复杂,需要根据实际情况调整选择器。


通过上述的代码,阿佑带着完成了一个简单的数据抓取实战案例。我们从确定目标开始,规划了抓取策略,然后编写并运行了代码来提取新闻标题和链接。这个过程中,我们不仅实践了之前学到的理论知识,还获得了宝贵的实战经验。掌握了这些技能,你将能够在数据的海洋中航行得更远,探索得更深。

接下来,我们将学习如何将这些抓取到的数据进行清洗和存储,以便更好地利用它们。

在这里插入图片描述
好的,让我们以一种接地气且有趣的方式继续探讨第3点——数据存储。


数据抓取与存储

3. 数据存储

数据存储,就像是给你辛苦抓取的数据找个家。不过,不是随便找个地方就行,你需要一个既安全又方便的地方,这样你的数据才能住得舒服,你也才能随时找到它们。

3.1 数据清洗

3.1.1 去除无效标签与空白字符

在数据抓取回来之后,你会发现数据里有很多“垃圾”,比如无关的HTML标签、多余的空格、换行符等。这就像是你刚搬进新家,却发现房间里满是前任房客留下的杂物一样。

这时候,你需要进行数据清洗。Python中的re库和字符串方法可以帮你大忙,帮你去除这些无效的标签和空白字符。比如,你可以用re.sub(r'\s+', ' ', data)来移除多余的空格,让数据更加整洁。

3.1.2 数据标准化处理

数据清洗之后,还需要进行数据标准化处理。这就像是给你的家具统一风格,让它们看起来更加和谐。在数据中,这通常意味着将不同的数据格式统一,比如将日期格式统一为YYYY-MM-DD,将数字格式统一为没有千位分隔符的格式等。

3.2 存储方式概览

3.2.1 文本文件存储(CSV, JSON)

文本文件是存储数据的一种简单方式,尤其是对于小型项目或者一次性的数据存储需求。CSV和JSON格式都是不错的选择。

CSV(逗号分隔值)文件看起来就像是一张表格,非常适合存储结构化数据。而JSON(JavaScript对象表示法)文件则更加灵活,可以存储更复杂的数据结构。

想象一下,CSV文件就像是你的书架,每一本书都有自己的位置;而JSON文件就像是你的储物箱,里面可以放各种形状的物品。

3.2.2 关系型数据库(SQLite, MySQL)基础

对于更复杂的数据存储需求,你可能需要用到关系型数据库。关系型数据库就像是一个大的图书馆,每本书都有自己的编号,你可以快速地找到任何一本书。

SQLite是一个轻量级的数据库,非常适合小型项目。而MySQL则更加强大,适合大型项目。它们都使用SQL语言来操作数据,包括创建表、插入数据、查询数据等。

3.2.3 非关系型数据库(MongoDB)简介

非关系型数据库,又称为NoSQL数据库,是另一种存储数据的方式。它们适合存储非结构化或者半结构化的数据。

MongoDB是一个非常流行的NoSQL数据库,它使用文档来存储数据,这些文档可以有非常灵活的结构。MongoDB就像是你的衣柜,你可以随意地放置各种衣物,而不需要担心它们的形状和大小。

3.3 实现数据存储示例

3.3.1 CSV存储:使用pandas库导出数据

Python中的pandas库是一个非常强大的数据处理工具,它不仅可以帮你清洗和处理数据,还可以帮你将数据导出为CSV文件。

import pandas as pd

# 假设df是你的DataFrame
df.to_csv('data.csv', index=False)

上面的代码会将DataFrame df 导出为一个名为data.csv的CSV文件。

3.3.2 数据库操作入门:连接、插入数据至SQLite

如果你选择使用SQLite数据库,你可以通过Python的sqlite3库来操作数据库。

import sqlite3

# 连接到SQLite数据库
# 如果文件不存在,会自动在当前目录创建一个
conn = sqlite3.connect('data.db')

# 创建一个表
conn.execute('CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)')

# 插入一条数据
conn.execute('INSERT INTO users (name, age) VALUES (?, ?)', ('Alice', 30))

# 提交事务
conn.commit()

# 关闭连接
conn.close()

上面的代码展示了如何使用sqlite3库来连接到一个SQLite数据库,创建一个表,并插入一条数据。


数据存储部分的内容到此为止。记得,数据存储不仅仅是为了保存数据,更是为了让你能够方便地管理和使用数据。选择合适的存储方式,就像是给你的数据找一个合适的家,这样它们才能更好地为你服务。

在这里插入图片描述

好的,让我们以一种轻松有趣的方式来书写第4点——结论。


数据抓取与存储

4. 结论

到了这里,我们的数据抓取与存储之旅就快要画上句号了。不过,别急着走,咱们来聊聊这次探险的收获,以及如何将这些宝贵的经验应用到实际的战斗中去。

4.1 本章核心知识回顾

首先,让我们来回顾一下这次探险的要点:

  • 数据抓取:我们学会了如何使用requests库和BeautifulSoup来获取和解析网页数据,还了解了如何用Selenium来处理那些棘手的动态网页。
  • 数据清洗:我们掌握了去除无效标签和空白字符的技巧,以及如何进行数据标准化处理。
  • 数据存储:我们探索了多种存储方式,包括文本文件(CSV, JSON)、关系型数据库(SQLite, MySQL)和非关系型数据库(MongoDB),并学习了如何使用pandas库将数据导出为CSV文件,以及如何使用sqlite3库进行数据库的基本操作。

4.2 数据抓取与存储在项目中的综合运用思考

现在,你已经拥有了在互联网上抓取和存储数据的武器。但是,如何将这些技能应用到实际的项目中呢?让我们来举几个例子:

例子1:市场分析

假设你是一名市场分析师,需要监控竞争对手的价格变动。你可以编写一个爬虫,定期抓取对手网站上的商品价格,然后将这些数据存储到数据库中。之后,你可以编写一个简单的数据分析脚本,来找出价格变动的趋势和模式。

例子2:社交媒体监控

如果你是一名社交媒体经理,需要监控品牌在社交媒体上的提及情况。你可以使用Selenium来抓取社交媒体网站上的帖子,然后将这些数据存储到MongoDB中。MongoDB的灵活性可以让你轻松地存储帖子的各种信息,如文本、图片、标签等。

例子3:个人数据管理

对于个人用户,你可以使用数据抓取和存储技术来管理你的个人数据。比如,你可以抓取你的电子邮件,然后将邮件内容存储到SQLite数据库中。这样,你就可以使用SQL查询来快速找到你需要的邮件。

import sqlite3

# 连接到SQLite数据库
conn = sqlite3.connect('emails.db')

# 创建一个表
conn.execute('CREATE TABLE IF NOT EXISTS emails (id INTEGER PRIMARY KEY, subject TEXT, body TEXT, sender TEXT, receiver TEXT)')

# 插入一条数据
conn.execute('INSERT INTO emails (subject, body, sender, receiver) VALUES (?, ?, ?, ?)', ('Meeting', 'Let\'s meet at 10am tomorrow.', 'alice@example.com', 'bob@example.com'))

# 提交事务
conn.commit()

# 关闭连接
conn.close()

上面的代码展示了如何将一条电子邮件数据存储到SQLite数据库中。


通过这些例子,我们可以看到,数据抓取与存储在各种项目中都有广泛的应用。掌握了这些技能,就像是拥有了一张通往宝藏的地图,剩下的,就是如何去发现和挖掘这些宝藏了。

请记住,数据是新时代的石油,而你,已经拥有了开采和提炼它的工具。现在,是时候和阿佑一块开启专属我们自己的探险之旅了!

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

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

相关文章

2022-1990年 各省碳排放Co2数据集(含数据及参考文献)

碳排放是指人类活动产生的二氧化碳&#xff08;CO2&#xff09;等温室气体释放到大气中的过程。通过划分排放源的范围以避免重复计算的思想&#xff0c;由世界资源研究所在关于企业温室气体排放清单编制的指南中首次提出。城市碳排放核算边界界定借鉴该思想&#xff0c;可分为3…

Web开发三层架构

##Controller Service Dao(mapper) 软件设计&#xff1a;高内聚 低耦合 Controller 调用Service&#xff0c; Service调用 DAO 模块之间耦合 如果要从EmpServiceA切换到EmpServiceB&#xff0c;Controller代码也要修改 new EmpServiceB 分层接耦 容器中放EmpServiceA&am…

(深度估计学习)Win11复现DepthFM

目录 1. 系统配置2. 拉取代码&#xff0c;配置环境3.开始深度预测4.运行结果 论文链接&#xff1a;https://depthfm.github.io/ 讲解链接&#xff1a;https://www.php.cn/faq/734404.html 1. 系统配置 本人系统&#xff1a;Win11 CUDA12.2 python3.11.5 这里附上几个CUDA安装链…

Linux第四节--常见的指令介绍集合(持续更新中)

点赞关注不迷路&#xff01;本节涉及初识Linux第四节&#xff0c;主要为常见的几条指令介绍。 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1f44d;&#x1f3fb; 收藏 ✨ 加关注&#x1f440; 期待与你共同进步! 1. more指令 语法&#xff1a;more [选项][文件]…

【数据可视化01】matplotlib实例介绍4之六边形分箱图

目录 一、引言二、实例介绍 一、引言 hexbin是一个二维直方图&#xff0c;其中箱子是六边形&#xff0c;颜色表示每个箱子内的数据点数。 二、实例介绍 import matplotlib.pyplot as plt import numpy as np# Fixing random state for reproducibility np.random.seed(19680…

umi搭建react项目

UMI 是一个基于 React 的可扩展企业级前端应用框架&#xff0c;提供路由、状态管理、构建和部署等功能&#xff0c;可以帮助开发者快速构建复杂的单页面应用&#xff08;SPA&#xff09;和多页面应用&#xff08;MPA&#xff09;。它与 React 的关系是&#xff0c;UMI 构建在 R…

draw.io 网页版二次开发(1):源码下载和环境搭建

目录 一 说明 二 源码地址以及下载 三 开发环境搭建 1. 前端工程地址 2. 配置开发环境 &#xff08;1&#xff09;安装 node.js &#xff08;2&#xff09;安装 serve 服务器 3. 运行 四 最后 一 说明 应公司项目要求&#xff0c;需要对draw.io进行二次开发&…

算法提高之加成序列

算法提高之加成序列 核心思想&#xff1a;迭代加深 dfs 从上往下逐渐增大depth 这样下面没有用的方案就不用遍历了 #include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N 110;int n;int path[N];//当前求哪个位置…

2.1.2 事件驱动reactor的原理与实现

LINUX 精通 2 day14 20240513 day15 20240514 算法刷题&#xff1a;2维前缀和&#xff0c;一二维差分 耗时 135min 习题课 4h 课程补20240425 耗时&#xff1a;4h 课程链接地址 回顾 怎么学0voice课网络io——一请求一线程&#xff0c;一个client一个连接再accpet分配io f…

考研数学|李林《880》做不动,怎么办!?看这一篇!

在考研数学的备考过程中&#xff0c;遇到难题是很常见的情况&#xff0c;尤其是当你尝试解决李林880习题集中的问题时。他以其难度和深度著称&#xff0c;旨在帮助考生深入理解数学分析的复杂概念。 如果你在解题过程中感到困难&#xff0c;这并不是你个人的问题&#xff0c;而…

数据库系统概论(超详解!!!)第八节 数据库设计

1.数据库设计概述 数据库设计是指对于一个给定的应用环境&#xff0c;构造&#xff08;设计&#xff09;优化的数据库逻辑模式和物理结构&#xff0c;并据此建立数据库及其应用系统&#xff0c;使之能够有效地存储和管理数据&#xff0c;满足各种用户的应用需求&#xff0c;包…

【LLM第五篇】名词解释:prompt

1.是什么 提示工程&#xff08;Prompt Engineering&#xff09;是一门较新的学科&#xff0c;关注提示词开发和优化&#xff0c;帮助用户将大语言模型&#xff08;Large Language Model, LLM&#xff09;用于各场景和研究领域。 掌握了提示工程相关技能将有助于用户更好地了解…

Prosys OPC UA Simulation Server工程文件备份方法

Prosys OPC UA Simulation Server是一款免费的OPC UA服务器仿真软件&#xff0c;具体的使用和下载参考官网&#xff1a; Prosys OPC - OPC UA Simulation Server Downloads 他的免费版本不提供工程文件的备份、导入导出功能&#xff0c;每次退出时保存。如果需要工程备份&a…

宇宙(科普)

宇宙&#xff08;Universe&#xff09;在物理意义上被定义为所有的空间和时间&#xff08;统称为时空&#xff09;及其内涵&#xff0c;包括各种形式的所有能量&#xff0c;比如电磁辐射、普通物质、暗物质、暗能量等&#xff0c;其中普通物质包括行星、卫星、恒星、星系、星系…

基于安装包安装数据库时出现的问题分析及总结

数据库在数据初始化后并不会出现错误&#xff0c;这个时候在启动数据库时会出现启动不成功&#xff0c;不知道问题是什么要学会通过查看日志发现问题&#xff0c;日志就在Data文件夹下。 错误类型1 数据库在初始化后数据库启动不起来 原因&#xff1a;可能是配置文件my.ini一些…

【SQL每日一练】获取PADS公司用户名称和各职业总数并根据格式输出

文章目录 题目一、解析二、题解1.MySQL 题目 生成以下两个结果集&#xff1a; 1、查询 OCCUPATIONS 表中所有名字&#xff0c;紧跟每个职业的第一个字母作为括号&#xff08;即&#xff1a;括在括号中&#xff09;&#xff0c;并按名字顺序排序。例如&#xff1a;AnActorName…

2024成都现代职业教育及装备展6月1日举办 免费参观

2024成都现代职业教育及装备展6月1日举办 免费参观 同期举办&#xff1a;中国西部职业教育产教融合高峰论坛 主办单位&#xff1a; 中国西部教体融合博览会组委会 承办单位&#xff1a;重庆港华展览有限公司 博览会主题&#xff1a;责任教育 职教兴邦 组委会&#xff1a;…

【AI学习】聊两句昨夜OpenAI的GPT-4o

蹭个热点&#xff0c;聊两句昨夜的大事件——OpenAI发布GPT-4o&#xff0c;我看到和想到的一点东西。 首先是端到端方法&#xff0c;前面关于深度学习的文章&#xff0c;对端到端的重要性做了一些学习&#xff0c;对端到端这个概念有了一些理解。正如Richard Sutton在《苦涩的…

QT学习(1)——创建第一个QT程序,信号和槽,打开关闭窗口的案例

目录 引出规范和帮助文档创建第一个Qt程序对象树概念信号signal槽slot自定义信号和槽1.自定义信号2.自定义槽3.建立连接4.进行触发 自定义信号重载带参数的按钮触发信号触发信号拓展 lambda表达式返回值mutable修饰案例 打开关闭窗口案例 总结 引出 QT学习&#xff08;1&#…

DGC-GNN 配置运行

算法 DGC-GNN&#xff0c;这是一种全局到局部的图神经网络&#xff0c;用于提高图像中2D关键点与场景的稀疏3D点云的匹配精度。与依赖视觉描述符的方法相比&#xff0c;这种方法具有较低的内存需求&#xff0c;更好的隐私保护&#xff0c;并减少了对昂贵3D模型维护的需求。DGC-…