网络触手获取天气数据存入mysql 项目

news2025/2/26 21:22:42

首先这个案例不一定能直接拿来用,虽然我觉得可以但是里面肯定有一些我没考虑到的地方。

有问题评论或者私信我: 这个案例适合我这种学生小白

获取天气数据网址: https://lishi.tianqi.com/xianyang/202201.html

网络触手获取天气数据代码直接就可以使用,我们只需要改动几个地方,我将改动的地方给大家注释出来:

首先在url中:

  https://lishi.tianqi.com/xianyang/202201.html,你可以改成你们城市的名称比如  西安:

https://lishi.tianqi.com/xian/202401.html

 通过观察1月和2月的天气数据存在的网址中发现,https://lishi.tianqi.com/xianyang/202201.html

 202201  表示2022年1月份,所以你可以推出2022年2月的网址在这块的变化应该是:202202,那十月份就应该是202210,这个地方体现在代码的

# ('0' + str(month) if month < 10 else str(month))  这是一个三元表达式

# 首先从  if month < 10 开始,如果month 小于10,则执行 '0' + str(month),这叫做符串拼接,形成的是一个新的字符串,如果不满足也就是 大于10则执行str(month),将month强制转化为字符串。不论满不满足也就是month < 10   符不符合小于10,都会在执行一次字符串拼接,('2022' + '0' + str(month)  或 ('2022' + str(month))

weather_time = '2022' + ('0' + str(month) if month < 10 else str(month))

# 这里是字符串格式化,还用到字符串拼接
url = 'https://lishi.tianqi.com/xianyang/'+f'{weather_time}.html'

网址的其他地方都一样:

 

 其他地方都不用管你可以直接用,我知道代码可能对有的朋友不太友好,看不懂,没关系,你先试试看能不能用。看不懂你给我发私信,我看到第一时间给大家回复。

# 开始请求时间
    start_time = time.time()

         #  global  requests_count, start_time
         #  # 请求完成结束时间
         #  current_time = time.time()
         #  elapsed_time_since_start = current_time - start_time
         #  minute_passed = int(elapsed_time_since_start/60)
         #  while requests_count >= minute_passed *max_reuqests_per:
         #
         #        print("请求过于频繁")
         # #
         # #
         #  requests_count +=1

    def    getWeather(url):

        weather_info = []
        headers = {
             'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
             'Cookie': 'lianjia_uuid=9d3277d3-58e4-440e-bade-5069cb5203a4; UM_distinctid=16ba37f7160390-05f17711c11c3e-454c0b2b-100200-16ba37f716618b; _smt_uid=5d176c66.5119839a; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2216ba37f7a942a6-0671dfdde0398a-454c0b2b-1049088-16ba37f7a95409%22%2C%22%24device_id%22%3A%2216ba37f7a942a6-0671dfdde0398a-454c0b2b-1049088-16ba37f7a95409%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_referrer%22%3A%22%22%2C%22%24latest_referrer_host%22%3A%22%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%7D%7D; _ga=GA1.2.1772719071.1561816174; Hm_lvt_9152f8221cb6243a53c83b956842be8a=1561822858; _jzqa=1.2532744094467475000.1561816167.1561822858.1561870561.3; CNZZDATA1253477573=987273979-1561811144-%7C1561865554; CNZZDATA1254525948=879163647-1561815364-%7C1561869382; CNZZDATA1255633284=1986996647-1561812900-%7C1561866923; CNZZDATA1255604082=891570058-1561813905-%7C1561866148; _qzja=1.1577983579.1561816168942.1561822857520.1561870561449.1561870561449.1561870847908.0.0.0.7.3; select_city=110000; lianjia_ssid=4e1fa281-1ebf-e1c1-ac56-32b3ec83f7ca; srcid=eyJ0Ijoie1wiZGF0YVwiOlwiMzQ2MDU5ZTQ0OWY4N2RiOTE4NjQ5YmQ0ZGRlMDAyZmFhODZmNjI1ZDQyNWU0OGQ3MjE3Yzk5NzFiYTY4ODM4ZThiZDNhZjliNGU4ODM4M2M3ODZhNDNiNjM1NzMzNjQ4ODY3MWVhMWFmNzFjMDVmMDY4NWMyMTM3MjIxYjBmYzhkYWE1MzIyNzFlOGMyOWFiYmQwZjBjYjcyNmIwOWEwYTNlMTY2MDI1NjkyOTBkNjQ1ZDkwNGM5ZDhkYTIyODU0ZmQzZjhjODhlNGQ1NGRkZTA0ZTBlZDFiNmIxOTE2YmU1NTIxNzhhMGQ3Yzk0ZjQ4NDBlZWI0YjlhYzFiYmJlZjJlNDQ5MDdlNzcxMzAwMmM1ODBlZDJkNmIwZmY0NDAwYmQxNjNjZDlhNmJkNDk3NGMzOTQxNTdkYjZlMjJkYjAxYjIzNjdmYzhiNzMxZDA1MGJlNjBmNzQxMTZjNDIzNFwiLFwia2V5X2lkXCI6XCIxXCIsXCJzaWduXCI6XCIzMGJlNDJiN1wifSIsInIiOiJodHRwczovL2JqLmxpYW5qaWEuY29tL3p1ZmFuZy9yY28zMS8iLCJvcyI6IndlYiIsInYiOiIwLjEifQ=='
             }
        reponse = requests.get(url=url, headers=headers)
        if reponse.status_code==200:
            reponse.encoding = reponse.apparent_encoding
            # 正则表达式获取需要标题
            pattern = r'<div class="th200">(.*?)</div>\s*<div class="th140">(.*?)</div>\s*<div class="th140">(.*?)</div>\s*<div class="th140">(.*?)</div>'
            matches = re.findall(pattern, reponse.text)
            # 将匹配的结果转换为字典列表
            for match in matches[1:]:
                # 这里有错误
                date_str = match[0]
                # 使用split分割字符串,取第一部分
                date_str = date_str.split(' ')[0]
                #第一个 %Y-%m-%d 在 strptime 函数中起到解析的作用,将字符串 date_only 按照这种格式解释为一个 datetime 对象
                #第二个 %Y-%m-%d 在 strftime 方法中起到格式化的作用,将前面解析得到的 datetime 对象转换回字符串
                #转换回字符串 不会影响存入mysql吗 因为刚才在写入MySQL的Connect_MySQL.py 文件中Date
                #将日期字符串转换回 YYYY-MM-DD 格式的字符串并不会影响其存入MySQL数据库,只要数据库表结构中的对应列是日期类型(如 DATE 或 DATETIME)
                formatted_date = datetime.strptime(date_str, '%Y-%m-%d').strftime('%Y-%m-%d')
                highest_temp = float(match[1].replace('℃', ''))
                lowest_temp = float(match[2].replace('℃', ''))
                weather_data = {'日期':formatted_date , '最高温': highest_temp,'最低温': lowest_temp,
                                '天气状况': match[3]}
                weather_info.append(weather_data)
        return weather_info
    # 创建一个空的DataFrame 且给上columns 名称
    weather_df = pd.DataFrame(columns=['日期', '最高温', '最低温', '天气状况'])
    for month in range(1,13):
       # 202302
        # 三元表达式  凑请求链接
       weather_time = '2022' + ('0' + str(month) if month < 10 else str(month))
       url = 'https://lishi.tianqi.com/xianyang/'+f'{weather_time}.html'
       # 调用函数并将结果添加到DataFrame中
       monthly_weather = getWeather(url)
       monthly_weather_df = pd.DataFrame(monthly_weather)
       weather_df = pd.concat([weather_df, monthly_weather_df])
       # response_time = time.time() - start_time
       # time.sleep(min(response_time, 5) + random.uniform(0.5, 1))
    print(weather_df)

 存入数据库代码:

需要注意的是(都输入你的):

# 定义数据库连接参数
5 db_config = {
6    'host': 'your_host',  # 数据库地址
7    'port': your_port,      # 数据库端口
8    'user': 'your_username',  # 数据库用户名
9    'password': 'your_password',  # 数据库密码
10    'database': 'your_database',  # 数据库名称
11 }
12
13# 创建数据库引擎
engine = create_engine(f'mysql+pymysql://{db_config["user"]}:{db_config["password"]}@{db_config["host"]}:{db_config["port"]}/{db_config["database"]}')

还有必须要手动在你的本地数据库中创建一个名为  “weather" 的数据库

 如果忘记了没关系:

我告诉大家一个方法如何找到这些信息,前提是安装了一些操作数据库的可视化软件任何都行,我用的是sqlyong。

第一步:打开可视化工具

第二步:

 

 如果出现连接失败,我只能解决密码忘记问题,其他问题其实应该可以我没遇到过,例如端口被占用,数据库地址不对,这在安装数据库的时候就要注意,怎么弄,也就是大家都怎么写你就怎么写,不要搞一些复杂的到时候就忘记了。

mysql  数据库密码忘记,重置密码网址:

http://t.csdnimg.cn/9m1ax     作者: csdn博主 小达学加瓦  

连接、测试、写入数据库代码:

(不知道没关系,这个代码包含了检测是否存在表,不存在创建表,数据是否写入成功不成功抛出错误),只要你把我刚说前面那些写对,就应该直接能用

from sqlalchemy import create_engine, MetaData, Table, Column, Float, String, Date
from sqlalchemy.exc import OperationalError

from sqlalchemy import inspect

# 定义数据库连接参数
    db_config = {
        'host': '127.0.0.1',  # 数据库地址
        'port': 3307,      # 数据库端口
        'user': 'root',  # 数据库用户名
        'password': '123456',  # 数据库密码
        'database': 'weather',  # 数据库名称
    }

    # 创建数据库引擎
    engine = create_engine(f'mysql+pymysql://{db_config["user"]}:{db_config["password"]}@{db_config["host"]}:{db_config["port"]}/{db_config["database"]}')
    # 测试数据库连接是否成功
    try:
        connection = engine.connect()
        print("数据库连接成功!")
    except Exception as e:
        print(f"数据库连接失败:{str(e)}")

    # 创建表(如果不存在)
    metadata = MetaData()
    table_name = 'weather_data'
    table_columns = [
        Column('日期', Date),
        Column('最高温', Float),
        Column('最低温', Float),
        Column('天气状况', String(255)),
    ]
    weather_table = Table(table_name, metadata, *table_columns,  extend_existing=True)

    # 检查表是否存在,如果不存在则创建表
    inspector = inspect(engine)
    if not inspector.has_table(table_name):
        # 注意这里需要传递 engine 到 create_all 方法中
        metadata.create_all(bind=engine)
    # 检查表是否存在,如果不存在则创建表
    try:
        metadata.create_all(engine)
    except OperationalError as oe:
        if "already exists" in str(oe):  # 如果表已存在则忽略错误
            print("cunza")
        else:
            raise oe
    print("表 'weather_data' 已经检查并创建完毕(如有必要)")
    # 将数据写入数据库
    if weather_df is not None and not weather_df.empty:
        weather_df.to_sql(name=table_name, con=engine, if_exists='append', index=False, dtype={
            '日期': Date,
            '最高温': Float,
            '最低温': Float,
            '天气状况': String(255),
        })
        print("数据已成功写入 'weather_data' 表.")
    else:
        print("未找到待写入数据库的数据.")




主函数:运行这个大程序:

from my_project.tianqi.tianqi import get_weather_data
from my_project.database.Connect_MySQL import save_to_database
def main():
    weather_df = get_weather_data()
    save_to_database(weather_df)

if __name__ == "__main__":
    main()

文件夹以文件架构:这是模块(包或文件夹的创建位置很重要) 

 完整程序代码:

# 天气文件 使用前请先按照文件夹的架构层级创建文件夹和文件 ,以下三个python 都是一样的要求
#file--tianqi.py
import random
import time
import  re
import pandas as  pd
from datetime import datetime

import requests
from lxml import etree
def get_weather_data():
    # 设置每分钟允许的最大请求数量
    max_reuqests_per = 20
    requests_count = 0
    # 开始请求时间
    start_time = time.time()

         #  global  requests_count, start_time
         #  # 请求完成结束时间
         #  current_time = time.time()
         #  elapsed_time_since_start = current_time - start_time
         #  minute_passed = int(elapsed_time_since_start/60)
         #  while requests_count >= minute_passed *max_reuqests_per:
         #
         #        print("请求过于频繁")
         # #
         # #
         #  requests_count +=1

    def    getWeather(url):

        weather_info = []
        headers = {
             'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
             'Cookie': 'lianjia_uuid=9d3277d3-58e4-440e-bade-5069cb5203a4; UM_distinctid=16ba37f7160390-05f17711c11c3e-454c0b2b-100200-16ba37f716618b; _smt_uid=5d176c66.5119839a; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2216ba37f7a942a6-0671dfdde0398a-454c0b2b-1049088-16ba37f7a95409%22%2C%22%24device_id%22%3A%2216ba37f7a942a6-0671dfdde0398a-454c0b2b-1049088-16ba37f7a95409%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_referrer%22%3A%22%22%2C%22%24latest_referrer_host%22%3A%22%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%7D%7D; _ga=GA1.2.1772719071.1561816174; Hm_lvt_9152f8221cb6243a53c83b956842be8a=1561822858; _jzqa=1.2532744094467475000.1561816167.1561822858.1561870561.3; CNZZDATA1253477573=987273979-1561811144-%7C1561865554; CNZZDATA1254525948=879163647-1561815364-%7C1561869382; CNZZDATA1255633284=1986996647-1561812900-%7C1561866923; CNZZDATA1255604082=891570058-1561813905-%7C1561866148; _qzja=1.1577983579.1561816168942.1561822857520.1561870561449.1561870561449.1561870847908.0.0.0.7.3; select_city=110000; lianjia_ssid=4e1fa281-1ebf-e1c1-ac56-32b3ec83f7ca; srcid=eyJ0Ijoie1wiZGF0YVwiOlwiMzQ2MDU5ZTQ0OWY4N2RiOTE4NjQ5YmQ0ZGRlMDAyZmFhODZmNjI1ZDQyNWU0OGQ3MjE3Yzk5NzFiYTY4ODM4ZThiZDNhZjliNGU4ODM4M2M3ODZhNDNiNjM1NzMzNjQ4ODY3MWVhMWFmNzFjMDVmMDY4NWMyMTM3MjIxYjBmYzhkYWE1MzIyNzFlOGMyOWFiYmQwZjBjYjcyNmIwOWEwYTNlMTY2MDI1NjkyOTBkNjQ1ZDkwNGM5ZDhkYTIyODU0ZmQzZjhjODhlNGQ1NGRkZTA0ZTBlZDFiNmIxOTE2YmU1NTIxNzhhMGQ3Yzk0ZjQ4NDBlZWI0YjlhYzFiYmJlZjJlNDQ5MDdlNzcxMzAwMmM1ODBlZDJkNmIwZmY0NDAwYmQxNjNjZDlhNmJkNDk3NGMzOTQxNTdkYjZlMjJkYjAxYjIzNjdmYzhiNzMxZDA1MGJlNjBmNzQxMTZjNDIzNFwiLFwia2V5X2lkXCI6XCIxXCIsXCJzaWduXCI6XCIzMGJlNDJiN1wifSIsInIiOiJodHRwczovL2JqLmxpYW5qaWEuY29tL3p1ZmFuZy9yY28zMS8iLCJvcyI6IndlYiIsInYiOiIwLjEifQ=='
             }
        reponse = requests.get(url=url, headers=headers)
        if reponse.status_code==200:
            reponse.encoding = reponse.apparent_encoding
            # 正则表达式获取需要标题
            pattern = r'<div class="th200">(.*?)</div>\s*<div class="th140">(.*?)</div>\s*<div class="th140">(.*?)</div>\s*<div class="th140">(.*?)</div>'
            matches = re.findall(pattern, reponse.text)
            # 将匹配的结果转换为字典列表
            for match in matches[1:]:
                # 这里有错误
                date_str = match[0]
                # 使用split分割字符串,取第一部分
                date_str = date_str.split(' ')[0]
                #第一个 %Y-%m-%d 在 strptime 函数中起到解析的作用,将字符串 date_only 按照这种格式解释为一个 datetime 对象
                #第二个 %Y-%m-%d 在 strftime 方法中起到格式化的作用,将前面解析得到的 datetime 对象转换回字符串
                #转换回字符串 不会影响存入mysql吗 因为刚才在写入MySQL的Connect_MySQL.py 文件中Date
                #将日期字符串转换回 YYYY-MM-DD 格式的字符串并不会影响其存入MySQL数据库,只要数据库表结构中的对应列是日期类型(如 DATE 或 DATETIME)
                formatted_date = datetime.strptime(date_str, '%Y-%m-%d').strftime('%Y-%m-%d')
                highest_temp = float(match[1].replace('℃', ''))
                lowest_temp = float(match[2].replace('℃', ''))
                weather_data = {'日期':formatted_date , '最高温': highest_temp,'最低温': lowest_temp,
                                '天气状况': match[3]}
                weather_info.append(weather_data)
        return weather_info
    # 创建一个空的DataFrame 且给上columns 名称
    weather_df = pd.DataFrame(columns=['日期', '最高温', '最低温', '天气状况'])
    for month in range(1,13):
       # 202302
        # 三元表达式  凑请求链接
       weather_time = '2022' + ('0' + str(month) if month < 10 else str(month))
       url = 'https://lishi.tianqi.com/xianyang/'+f'{weather_time}.html'
       # 调用函数并将结果添加到DataFrame中
       monthly_weather = getWeather(url)
       monthly_weather_df = pd.DataFrame(monthly_weather)
       weather_df = pd.concat([weather_df, monthly_weather_df])
       # response_time = time.time() - start_time
       # time.sleep(min(response_time, 5) + random.uniform(0.5, 1))
    print(weather_df)
    return weather_df

get_weather_data()







 数据库文件:

# file--Coonect_MySQl
import pymysql
from sqlalchemy import create_engine, MetaData, Table, Column, Float, String, Date
from sqlalchemy.exc import OperationalError

from sqlalchemy import inspect
def save_to_database(weather_df):

    # 定义数据库连接参数
    db_config = {
        'host': '127.0.0.1',  # 数据库地址
        'port': 3307,      # 数据库端口
        'user': 'root',  # 数据库用户名
        'password': '123456',  # 数据库密码
        'database': 'weather',  # 数据库名称
    }

    # 创建数据库引擎
    engine = create_engine(f'mysql+pymysql://{db_config["user"]}:{db_config["password"]}@{db_config["host"]}:{db_config["port"]}/{db_config["database"]}')
    # 测试数据库连接是否成功
    try:
        connection = engine.connect()
        print("数据库连接成功!")
    except Exception as e:
        print(f"数据库连接失败:{str(e)}")

    # 创建表(如果不存在)
    metadata = MetaData()
    table_name = 'weather_data'
    table_columns = [
        Column('日期', Date),
        Column('最高温', Float),
        Column('最低温', Float),
        Column('天气状况', String(255)),
    ]
    weather_table = Table(table_name, metadata, *table_columns,  extend_existing=True)

    # 检查表是否存在,如果不存在则创建表
    inspector = inspect(engine)
    if not inspector.has_table(table_name):
        # 注意这里需要传递 engine 到 create_all 方法中
        metadata.create_all(bind=engine)
    # 检查表是否存在,如果不存在则创建表
    try:
        metadata.create_all(engine)
    except OperationalError as oe:
        if "already exists" in str(oe):  # 如果表已存在则忽略错误
            print("cunza")
        else:
            raise oe
    print("表 'weather_data' 已经检查并创建完毕(如有必要)")
    # 将数据写入数据库
    if weather_df is not None and not weather_df.empty:
        weather_df.to_sql(name=table_name, con=engine, if_exists='append', index=False, dtype={
            '日期': Date,
            '最高温': Float,
            '最低温': Float,
            '天气状况': String(255),
        })
        print("数据已成功写入 'weather_data' 表.")
    else:
        print("未找到待写入数据库的数据.")

























 主文件充当运行程序运行文件

from my_project.tianqi.tianqi import get_weather_data
from my_project.database.Connect_MySQL import save_to_database
def main():
    weather_df = get_weather_data()
    save_to_database(weather_df)

if __name__ == "__main__":
    main()

这是效果:


这里的很多技术难点我都是问的大模型,他们很聪明,完全能应付一些简单日常的问题。

希望帮到大家,祝大家安康 

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

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

相关文章

这是一段神奇的提示词,能直接调取Claude 3的系统提示词!附详细解读

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

第一代高通S7和S7 Pro音频平台:超旗舰性能,全面革新音频体验

以下文章来源于高通中国 如今&#xff0c;音频内容与形式日渐丰富&#xff0c;可满足人们放松心情、提升自我、获取资讯等需求。得益于手机、手表、耳机、车载音箱等智能设备的广泛应用&#xff0c;音频内容可以更快速触达用户。从《音频产品使用现状调研报告2023》中发现&…

蓝桥杯大赛软件python赛道真题:蛇形填数

真题链接&#xff1a;https://www.lanqiao.cn/problems/594/learning/ 题目描述&#xff1a; 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 如下图所示&#xff0c;小明用从1开始的正整数“蛇形”填充无限大的矩阵。 1 2 6 …

15:00面试,15:07就出来了,问的问题有点变态。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到3月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%…

leetcode 热题 100_相交链表

题解一&#xff1a; 哈希表&#xff1a;两链表出现的第一个相同的值就是相交节点&#xff0c;因此我们先用哈希记录链表A所有出现过的值&#xff0c;再遍历链表B查找哈希表&#xff0c;找出第一个相同的值即为结果。 import java.util.HashSet;public class Solution {public …

实验二 Hello, miniEuler操作演示(保姆级教程)

PS&#xff1a;所有的批注都写在了块引用中&#xff0c;其他文字均为题干 print函数是学习几乎任何一种软件开发语言时最先学习使用的函数&#xff0c;同时该函数也是最基本和原始的程序调试手段&#xff0c;但该函数的实现却并不简单。本实验的目的在于理解操作系统与硬件的接…

DeepLearning in Pytorch|共享单车预测NN详解(思路+代码剖析)

目录 概要 一、代码概览 二、详解 基本逻辑 1.数据准备 2.设计神经网络 初版 改进版 测试 总结 概要 原文链接&#xff1a;DeepLearning in Pytorch|我的第一个NN-共享单车预测 我的第一个深度学习神经网络模型---利用Pytorch设计人工神经网络对某地区租赁单车的使用…

Diddler抓包工具——学习笔记

F12抓包 302【重定向】&#xff1a;当你发送了一个请求之后&#xff0c;那么这个请求重定向到了另外的资源 跳转和重定向的区别&#xff1a; 跳转是会把数据传到新的地址 重定向不会把新的数据传到新的地址 使用F12抓包时一定要打开Preserve Log开关&#xff0c;作用是保留…

【libwebrtc】基于m114

libwebrtc A C++ wrapper for binary release, mainly used for flutter-webrtc desktop (windows, linux, embedded).是 基于m114版本的webrtc 最新(20240309 ) 的是m122了。官方给出的构建过程 .gclient 文件 solutions = [{"name" : src,"url

表单进阶(3)-上传文件和隐藏字段

上传文件&#xff1a;<input type"file"> 隐藏字段&#xff1a;<input type"hidden" name"" id"" value"带给后端的信息"> 禁用disabled&#xff1a;<button disabled"disabled">注册</bu…

C++——string模拟实现

前言&#xff1a;上篇文章我们对string类及其常用的接口方法的使用进行了分享&#xff0c;这篇文章将着重进行对这些常用的接口方法的内部细节进行分享和模拟实现。 目录 一.基础框架 二.遍历字符串 1.[]运算符重载 2.迭代器 3.范围for 三.常用方法 1.增加 2.删除 3.调…

Linux系统——JVM调优

目录 一、GC如何调优 1.JVM调优的时机 2.JVM调优目标 3.JVM调优步骤 4.选择合适的垃圾回收器 5.调整内存大小 6.设置符合预期的停顿时间 7.调整内存区域大小比率 8.调整对象升老年代的年龄 9.调整大对象的标准 10.调整GC的触发时机 11.调整 JVM本地内存大小 二、JV…

推荐算法中经典排序算法GBDT+LR

文章目录 逻辑回归模型逻辑回归对于特征处理的优势逻辑回归处理特征的步骤 GBDT算法GBDTLR算法GBDT LR简单代码实现 逻辑回归模型 逻辑回归&#xff08;LR,Logistic Regression&#xff09;是一种传统机器学习分类模型&#xff0c;也是一种比较重要的非线性回归模型&#xff0…

指针篇章-(冒泡排序详解)

冒泡排序 图解 tmp图解 内容图解 每次循环的次数减少 for循环详解 冒泡排序是一种简单的排序算法&#xff0c;它重复地遍历要排序的数列&#xff0c; 一次比较两个元素&#xff0c;如果它们的顺序错误就把它们交换过来。 遍历数列的工作是重复地进行直到没有再需要交换&…

读算法的陷阱:超级平台、算法垄断与场景欺骗笔记05_共谋(中)

1. 默许共谋 1.1. 又称寡头价格协调&#xff08;Oligopolistic Price Coordination&#xff09;或有意识的平行行为&#xff08;Conscious Parallelism&#xff09; 1.1.1. 在条件允许的情况下&#xff0c;它会发生在市场集中度较高的行业当中 1.1.…

运维随录实战(13)之docker搭建mysql集群(pxc)

了解 MySQL 集群之前,先看看单节点数据库的弊病 大型互联网程序用户群体庞大,所以架构需要特殊设计。单节点数据库无法满足大并发时性能上的要求。单节点的数据库没有冗余设计,无法满足高可用。单节点 MySQL无法承载巨大的业务量,数据库负载巨大常见 MySQL 集群方案 Re…

STM32_3-1点亮LED灯与蜂鸣器发声

STM32之GPIO GPIO在输出模式时可以控制端口输出高低电平&#xff0c;用以驱动Led蜂鸣器等外设&#xff0c;以及模拟通信协议输出时序等。 输入模式时可以读取端口的高低电平或电压&#xff0c;用于读取按键输入&#xff0c;外接模块电平信号输入&#xff0c;ADC电压采集灯 GP…

【C语言】linux内核ip_generic_getfrag函数

一、讲解 这个函数ip_generic_getfrag是传输层用于处理分段和校验和的一个辅助函数&#xff0c;它通常用在IP层当需要从用户空间拷贝数据构建成网络数据包时。这个函数的实现提供了拷贝数据和进行校验和计算&#xff08;如果需要的话&#xff09;的功能。函数的参数解释如下&a…

JVM知识整体学习

前言&#xff1a;本篇没有任何建设性的想法&#xff0c;只是我很早之前在学JVM时记录的笔记&#xff0c;只是想从个人网站迁移过来。文章其实就是对《深入理解JVM虚拟机》的提炼&#xff0c;纯基础知识&#xff0c;网上一搜一大堆。 一、知识点脑图 本文只谈论HotSpots虚拟机。…

利用华为CodeArts持续交付项目演示流程

软件开发生产线&#xff08;CodeArts&#xff09;是面向开发者提供的一站式云端平台&#xff0c;即开即用&#xff0c;随时随地在云端交付软件全生命周期&#xff0c;覆盖需求下发、代码提交、代码检查、代码编译、验证、部署、发布&#xff0c;打通软件交付的完整路径&#xf…