【Python】爬虫练习-爬取豆瓣网电影评论用户的观影习惯数据

news2024/11/25 22:33:59

目录

前言

一、配置环境

1.1、 安装Python

1.2、 安装Requests库和BeautifulSoup库

1.3.、安装Matplotlib

二、登录豆瓣网(重点)

2.1、获取代理

2.2、测试代理ip是否可用

2.3、设置大量请求头随机使用

2.4、登录豆瓣网

三、爬取某一部热门电影数据

3.1、爬取全部长、短评论

3.2、获取用户观影数据

3.3、存入数据库

四、实战代码示例

五、总结


前言

豆瓣网是一个具有影响力的电影评论网站,其中包含大量的用户评论和评分数据。这些数据可以用于研究电影市场和用户观影习惯,同时还可以用于电影推荐算法以及在线视频网站的用户行为分析等方面,因此对于想要学习数据分析和机器学习的人来说,爬取豆瓣网电影评论数据是一个很好的练手项目。

本文将详细介绍如何使用Python爬虫抓取豆瓣网电影评论用户的观影习惯数据,并进行简单的数据处理和分析。

一、配置环境

在开始爬取豆瓣网电影评论数据之前,我们需要配置好Python开发环境和相关依赖库。

1.1、 安装Python

首先,我们需要安装Python。建议使用Python 3.x版本。可以在官网下载并安装对应版本的Python:https://www.python.org/downloads/。

1.2、 安装Requests库和BeautifulSoup库

接下来,我们需要安装两个Python库:Requests和BeautifulSoup。Requests库可以用于发送HTTP请求,获取网页内容,而BeautifulSoup库可以用于解析HTML文档,提取所需数据。

可以使用pip命令自动安装这两个库:

pip install requests

pip install beautifulsoup4

1.3.、安装Matplotlib

如果我们需要对抓取的数据进行可视化分析,可以使用Matplotlib库。可以使用pip命令安装:

pip install matplotlib

安装完成后,我们就可以开始爬取豆瓣网电影评论数据了。

二、登录豆瓣网(重点)

豆瓣网对爬虫有一定的反爬虫策略,根据实战经验反爬一般作用于用户ID、用户IP和请求头的过滤为了避免被封禁IP,代码中需要加入一些反爬虫措施:

  • 设置请求间隔
  • 使用代理IP
  • 伪装请求头等

2.1、获取代理

  使用代理可以帮助我们隐藏自己的真实IP地址,避免被封禁IP或者限制访问。在爬取豆瓣网电影评论数据时,如果频繁地访问同一个IP地址,豆瓣网可能会禁止我们的访问,因此使用代理也可以防止被封禁。这里我使用的是站大爷代理ip来进行操作的。

  以下是使用用户名+密码授权获取ip代码示例:

 import requests

#你要访问的网址
url = 'http://www.ip138.com/'
proxies = {
        'http': 'http://账号:密码@ip:port',
        'https': 'http://账号:密码@ip:port'
#“用户名+密码”授权,账号为实例ID,密码为8位数字的密码,不用MD5加密,在后台的实例管理下可以看到
    }
response = requests.get(url, proxies=proxies)

2.2、测试代理ip是否可用

  测试代理IP是否可用是为了确保我们使用的代理IP能够正常工作,防止由于代理IP失效或无效而导致爬虫请求失败。一般来说,我们可以通过发送请求来测试代理IP是否可用,如果请求成功则说明代理IP可用,否则说明代理IP无效或被封禁。

测试代理IP的代码可以通过如下方式实现:

  1.       定义一个函数,接收代理IP和目标网站URL作为参数
  2.       在函数中,使用requests库发送请求,并设置代理IP
  3.       如果请求成功,则说明代理IP可用,返回True
  4.       如果请求失败,则说明代理IP无效或被封禁,返回False

以下是一段测试代理IP的代码示例:

import requests

def test_proxy_ip(proxy_ip, target_url):
    proxies = {
       'http': 'http://' + proxy_ip,
        'https': 'http://' + proxy_ip
    }
    try:
        response = requests.get(target_url, proxies=proxies, timeout=5)
        if response.status_code == 200:
            return True
        else:
            return False
    except:
        return False

在上述代码中,我们定义了一个test_proxy_ip函数,该函数接收代理IP和目标网站URL作为参数。在函数中,我们首先根据传入的代理IP构造proxies字典,然后使用requests库发送请求,并设置proxies参数为该字典。如果请求成功,则说明代理IP可用,函数返回True;否则函数返回False。

当我们在爬取豆瓣网电影评论数据时,可以使用上述代码测试代理IP是否可用。如果代理IP可用,则使用该代理IP发送请求;如果代理IP无效或被封禁,则需要更换新的代理IP。

2.3、设置大量请求头随机使用

  爬取豆瓣网电影评论用户的观影习惯数据要设置大量请求头随机使用是为了防止网站监测到我们的请求头是模拟的,并防止被反爬虫机制封禁IP。因此,我们需要尽可能多的提供不同的请求头信息,对请求头进行随机使用,以降低被监测到的概率。

以下是一个随机使用请求头的示例代码:

import random

USER_AGENTS = [

  'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.19582',

  'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0',

  'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299',

  # 更多用户代理信息...

]

def get_random_user_agent():

    return random.choice(USER_AGENTS)

headers = {

   'User-Agent': get_random_user_agent(),

   'Referer': 'https://www.douban.com',

   'Cookie': 'your_cookie'

}

在以上代码中,我们定义了一个USER_AGENTS列表,包含多个常用浏览器的User-Agent信息。然后定义了一个`get_random_user_agent()`函数,用于随机从USER_AGENTS列表中获取一个User-Agent信息。最后,我们设置headers变量,使用`get_random_user_agent()`函数获取随机的User-Agent信息,并将其赋值到headers变量中,作为请求头信息。

需要注意的是,我们在使用随机请求头的同时,仍然需要保持一定的爬取速度和请求间隔,以避免被封禁。同时,如果服务器在返回的内容中发现请求头信息异常,我们也可能被视为爬虫而被封禁。因此,在进行豆瓣网电影评论用户数据爬取时,需要谨慎处理请求头信息。

2.4、登录豆瓣网

以下是一个使用selenium模拟登录豆瓣网并保存cookie的示例代码:

from selenium import webdriver
import time
import pickle

login_url = 'https://accounts.douban.com/passport/login?source=movie'
username = 'your_username'
password = 'your_password'
cookie_file = 'cookies.pkl'
# 启动浏览器
driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(10)
# 访问登录页面
driver.get(login_url)
# 输入用户名和密码
driver.find_element_by_id('username').send_keys(username)
driver.find_element_by_id('password').send_keys(password)
# 等待用户输入验证码
time.sleep(30)
# 点击登录按钮
driver.find_element_by_class_name('account-form-field-submit ').click()
# 等待新页面加载完成
time.sleep(10)
# 保存cookie到文件
cookies = driver.get_cookies()
with open(cookie_file, 'wb') as f:
    pickle.dump(cookies, f)
# 关闭浏览器
driver.quit()

在以上代码中,我们首先初始化了一些变量,包括登录页面的URL、豆瓣账号的用户名和密码、以及保存cookie的文件名。

然后,我们启动了Chrome浏览器,并通过`driver.get()`方法访问了豆瓣登录页面。接着,我们使用`selenium`模拟了用户在页面上输入了用户名和密码,并等待了30秒,以留出时间输入验证码。

最后,我们点击登录按钮,等待新页面加载完成,获取了cookies并将其保存到本地文件中。注意,这里我们使用了pickle模块将cookies对象序列化并保存到文件中,以便后续使用。

同时,我们还使用了`driver.quit()`方法关闭了浏览器。

三、爬取某一部热门电影数据

  前面我们已经把爬取豆瓣网的准备工作全部完成,然后接下来就是爬取豆瓣网中某一部热门电影的各种数据了

3.1、爬取全部长、短评论

爬取热门电影的全部长短评论可以获得以下信息:

  •       用户评价:通过阅读用户的评论,可以了解用户对电影的评价、看法和推荐指数等信息,有助于我们更好地了解电影的口碑和观众反应。
  •       关键词提取:通过分析评论文本提取关键词,可以了解电影的主题、情感、人物关系等信息,有助于我们深入了解电影的故事情节和风格。
  •       数据分析:通过统计评论数量、评分分布、用户画像等数据,可以帮助我们更好地了解电影的市场表现和受众群体,为影视公司、制片人和电影院等决策者提供有价值的数据支持。

因此,爬取热门电影的全部长短评论是一项非常有价值的工作,可以为我们提供大量有用的信息和数据分析基础。

以下是一个使用BeautifulSoup和requests库爬取豆瓣网某部电影全部长、短评论说明的示例代码

import requests
from bs4 import BeautifulSoup

# 设置请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'
}
# 豆瓣电影页面URL
url = 'https://movie.douban.com/subject/1292052/'
# 发送请求获取页面HTML
response = requests.get(url, headers=headers)
html = response.text
# 使用BeautifulSoup解析HTML
soup = BeautifulSoup(html, 'html.parser')
# 查找长评和短评标签
long_comments = soup.select_one('#hot-comments > div > div.article > span')
short_comments = soup.select_one('#comments > div > h2 > span')
# 提取评论数量并输出
long_comments_count = long_comments.text.replace('全部', '').replace('条', '').strip()
short_comments_count = short_comments.text.replace('全部', '').replace('条', '').strip()
print(f"长评:{long_comments_count}")
print(f"短评:{short_comments_count}")
# 查找所有长评和短评内容
long_comments_list = soup.select('#hot-comments > div > div.article > div > div.comment > p')
short_comments_list = soup.select('#comments > div > div.comment > p')
# 输出每个评论的内容
for comment in long_comments_list:
    print(comment.text.strip())   
for comment in short_comments_list:
    print(comment.text.strip())

在以上代码中,我们首先设置了请求头,指定了请求的User-Agent信息。然后,我们定义了电影页面的URL,并发送了GET请求获取了页面的HTML。

接着,我们使用BeautifulSoup解析了页面的HTML,并查找了长评和短评标签。通过提取标签文本中的评论数量信息,我们可以输出电影的长、短评数量。

最后,我们再次使用CSS选择器查找所有长、短评内容,并通过遍历列表输出了每个评论的文本内容。

3.2、获取用户观影数据

  获取用户观影数据可以帮助我们了解用户的观影喜好和习惯,可以通过分析用户的观影历史和评分记录等内容,得到以下信息:

  •       用户偏好:根据用户观影历史和评分记录,可以了解用户的观影偏好和喜好,有助于我们推荐更符合用户口味的电影和影视作品
  •       影视推荐:通过分析用户的观影历史和评分记录,可以为用户推荐更符合其口味的电影和影视作品,提高用户体验和满意度
  •       数据分析:通过统计用户评分和观影记录,可以了解影片的市场表现和受众群体,为制片人、电影院和影视公司等提供有价值的数据分析支持

因此,获取用户观影数据是一项非常有价值的工作。以下是获取用户观影数据的Python代码示例:

import requests
import json

# 登录豆瓣网
session = requests.session()
url = 'https://accounts.douban.com/j/mobile/login/basic'
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',
    'Referer': 'https://accounts.douban.com/passport/login',
}
data = {
    'name': 'your_username', # 替换为自己的用户名
    'password': 'your_password', # 替换为自己的密码
    'remember': 'false',
}
session.post(url, headers=headers, data=data)
# 获取用户观影数据
uid = 'your_user_id' # 替换为自己的用户ID
url = 'https://movie.douban.com/subject_suggest?q=%E7%94%B5%E5%BD%B1' # 电影页面URL
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',
    'Referer': 'https://www.douban.com/',
}
response = session.get(url, headers=headers)
data = json.loads(response.text)
movie_id = data[0]['id'] # 获取电影ID
url = f'https://movie.douban.com/subject/{movie_id}/' # 获取电影详情页面URL
response = session.get(url, headers=headers)
url = response.url + 'comments?start=0&limit=20&status=P&sort=new_score' # 获取电影短评页面URL
response = session.get(url, headers=headers)
data = response.text
print(data) # 输出评论内容

以上代码示例中,我们首先需要登录豆瓣网,然后通过获取电影ID和电影详情页面URL来获取其热门评论页面的URL,最后通过发送HTTP请求获取评论数据。注意,需要设置请求头信息,以避免请求被网站屏蔽。

3.3、存入数据库

将获取的数据存入数据库的好处:

  •       数据持久化:将数据存入数据库中可以保证数据长期保存,避免数据丢失的情况
  •       数据分析:将数据存入数据库后,可以使用SQL等工具进行数据分析和数据挖掘,得到更深入的信息和结论
  •       数据管理:将数据存入数据库后,可以方便对数据进行管理、查询和更新

以下是将获取的去重后的数据存入数据库的Python代码示例:

import requests
import json
import pymysql

# 登录豆瓣网
session = requests.session()
url = 'https://accounts.douban.com/j/mobile/login/basic'
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',
    'Referer': 'https://accounts.douban.com/passport/login',
}
data = {
    'name': 'your_username', # 替换为自己的用户名
    'password': 'your_password', # 替换为自己的密码
    'remember': 'false',
}
session.post(url, headers=headers, data=data)
# 获取用户观影数据
uid = 'your_user_id' # 替换为自己的用户ID
url = 'https://movie.douban.com/subject_suggest?q=%E7%94%B5%E5%BD%B1' # 电影页面URL
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',
    'Referer': 'https://www.douban.com/',
}
response = session.get(url, headers=headers)
data = json.loads(response.text)
movie_id = data[0]['id'] # 获取电影ID
url = f'https://movie.douban.com/subject/{movie_id}/' # 获取电影详情页面URL
response = session.get(url, headers=headers)
url = response.url + 'comments?start=0&limit=20&status=P&sort=new_score' # 获取电影短评页面URL
response = session.get(url, headers=headers)
data = response.json()
result = []
for comment in data['comments']:
    item = {
        'id': comment['id'],
        'user_name': comment['author']['name'],
        'rating': comment['rating']['value'],
        'create_time': comment['created_at'],
        'content': comment['content'],
    }
    result.append(item)
# 去重
result2 = []
for i in result:
    if i not in result2:
        result2.append(i)
# 存入数据库
db = pymysql.connect(host='localhost', user='root', password='123456', database='test')
cursor = db.cursor()
for item in result2:
    sql = f"insert into movie_comment (id, user_name, rating, create_time, content) values ({item['id']}, '{item['user_name']}', {item['rating']}, '{item['create_time']}', '{item['content']}')"
    cursor.execute(sql)
db.commit()
db.close()

以上代码示例中,我们使用Python连接到本地MySQL数据库,并将去重后的数据存入到数据库中的movie_comment表中。注意,需要根据自己的数据库用户名、密码、数据库名以及数据表名进行替换。

四、实战代码示例

由于豆瓣网对爬虫有一定的反爬虫策略,为了避免被封禁IP,代码中需要加入一些反爬虫措施,如设置请求间隔、使用代理IP、伪装请求头等。

以下是一个基于Python的爬虫示例,可以爬取指定电影的所有评论用户的观影习惯数据,并保存至CSV文件中:

import requestsfrom bs4 import BeautifulSoupimport csvimport timefrom random import randint

MOVIE_URL = 'https://movie.douban.com/subject/xxxxxx/' # 请替换成具体电影的URL
CSV_FILE = 'douban.csv' # CSV文件名
# 设置请求头部信息,包括User-Agent和Referer
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',
    'Referer': MOVIE_URL,
}
# 设置代理IP列表,用于反爬虫策略
proxies = ['http://xxx.xxx.xx.xx:xxxx', 'http://yyy.yyy.yy.yy:yyyy', ...] # 请替换成实际的代理IP
# 设置请求间隔,用于反爬虫策略
WAIT_TIME = 1 # 单位为秒,可适当调整
# 定义函数获取指定URL的HTML内容def get_html(url):
    try:
        proxy = {'http': proxies[randint(0, len(proxies)-1)]} # 从代理IP列表中随机选择一个代理
        response = requests.get(url, headers=headers, proxies=proxy)
        if response.status_code == 200:
            return response.text
    except requests.exceptions.RequestException as e:
        print(e)
        return None
# 获取评论用户主页链接def get_user_link(comment_soup):
    try:
        user_tag = comment_soup.find('span', class_='comment-info').find('a')
        user_link = user_tag.get('href')
        return user_link
    except:
        return None
# 解析评论用户主页,获取观影习惯数据def get_user_data(user_link):
    user_data = {}
    html = get_html(user_link)
    time.sleep(WAIT_TIME)
    if html:
        soup = BeautifulSoup(html, 'html.parser')
        # 获取用户常看类型
        try:
            type_tags = soup.find_all('span', class_='tags-body')
            type_list = [t.text.strip() for t in type_tags]
            user_data['type'] = ','.join(type_list)
        except:
            user_data['type'] = ''
        # 获取用户评分前几名的电影(除当前电影外)
        user_data['top_movies'] = ''
        try:
            movie_tags = soup.find_all('div', class_='info')
            movie_list = []
            for tag in movie_tags:
                movie_name_tag = tag.find('a', class_='title')
                if movie_name_tag and movie_name_tag['href'] != MOVIE_URL: # 排除当前电影
                    movie_list.append(movie_name_tag.text)
                if len(movie_list) >= 5: # 最多获取前5名
                   break
            user_data['top_movies'] = ','.join(movie_list)
        except:
            pass
    return user_data
# 主函数def main():
    print('开始爬取...')
    # 获取评论列表
    comments = []
    page = 0
    while True:
        page += 1
        url = MOVIE_URL + 'comments?start=' + str((page-1) * 20)
        html = get_html(url)
        time.sleep(WAIT_TIME)
        if html:
            soup = BeautifulSoup(html, 'html.parser')
            comment_tags = soup.find_all('div', class_='comment-item')
            if comment_tags:
               comments.extend(comment_tags)
            else:
                break # 没有更多评论
        else:
            break # 请求失败
    # 获取每个评论用户的观影习惯数据
    user_data_list = []
    for comment in comments:
        user_link = get_user_link(comment)
        if user_link:
            user_data = get_user_data(user_link)
            user_data_list.append(user_data)
            print('已爬取 {} 个用户观影数据'.format(len(user_data_list)))
            time.sleep(WAIT_TIME)
    # 将数据保存至CSV文件
    with open(CSV_FILE, mode='w', encoding='utf-8', newline='') as f:
        fieldnames = ['type', 'top_movies']
        writer = csv.DictWriter(f, fieldnames=fieldnames)
        writer.writeheader()
        for data in user_data_list:
            writer.writerow(data)

    print('爬取完成,数据已保存至 {} 文件中。'.format(CSV_FILE))
if __name__ == '__main__':
    main()

需要注意的是,以上代码仅供参考,实际使用时需要根据具体情况进行调整。另外,爬虫涉及到的法律问题和道德问题需要认真考虑,不要用于非法用途或侵犯他人隐私等行为。

需要注意的几点:

  1. 为了避免被豆瓣网封禁IP,建议设置访问间隔时间至少为1秒
  2. 豆瓣网的HTML代码变化频繁,需要不断调整解析代码以适应新的HTML格式
  3. 爬取用户信息可能涉及到用户隐私,应严格按照相关法律法规来进行。

五、总结

爬取豆瓣网电影评论用户的观影习惯数据能够得出用户的观影时间偏好、观影类型偏好、观影评分偏好、观影影院偏好和地理位置偏好等信息。通过这些数据分析,豆瓣网能够更好地为用户推荐电影和为广告主提供更精准的广告投放服务。

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

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

相关文章

Redis 7 第四讲 数据持久化

总体 RDB 介绍 RDB 持久化以指定的时间间隔执行数据集的时间点快照 。 把某一时刻的数据和状态以文件的形式写到磁盘上,即使出现故障宕机,快照文件也不会丢失,数据的可靠性得到保证。快照文件就是RDB(Redis DataBase)文件(dump.rdb) 作用 在指定的时间间隔内将内存中的数…

Redis的缓存穿透,缓存击穿,缓存雪崩

1. 缓存穿透 什么是缓存穿透? 缓存穿透说简单点就是大量请求的 key 是不合理的,根本不存在于缓存中,也不存在于数据库中 。这就导致这些请求直接到了数据库上,根本没有经过缓存这一层,对数据库造成了巨大的压力&…

VB:数值交换

VB:数值交换 Private Sub Command1_Click()Dim a%, b%a 5b 7Call mySwap(a, b)Print "a"; aPrint "b"; b End Sub ByRef 关键字允许子程序直接修改传递的参数的值,而不仅仅是拷贝一份副本,这样可以实现更灵活的数据处…

ArcGIS Maps SDK for JS(二):MapView简介----创建2D地图

文章目录 1 AMD 引用 ArcGIS Maps SDK for JavaScript2 加载相应模块3 创建地图4 创建 2D 视图 view5 确定页面内容6 CSS 样式7 完整代码 本教程使用 AMD 模块&#xff0c;指导您如何在二维地图视图中创建一个简单的地图。 1 AMD 引用 ArcGIS Maps SDK for JavaScript 在 <…

9.物联网LWIP,ip数据报,udp数据报,tcp数据报

一。ip协议原理&#xff08;网络层&#xff09; 1.网络地址转换NAT 我们上网是通过运营商向我们提供的IP地址来上网的&#xff0c;并不是自身的IP地址&#xff0c;所以这就需要网络地址转换NAT的帮助。即内网访问外网所需要的ip转换装置。 2.ip数据报 &#xff08;1&#xff…

延长Flash存储器使用寿命的研究

发布时间&#xff1a;2009年12月15日   引 言 随着嵌入式系统在数码相机、数字摄像机、移动电话、MP3音乐播放器等移动设备中越来越广泛的应用&#xff0c;Flash存储器已经逐步取代其他半导体存储元件&#xff0c;成为嵌入式系统中主要数据和程序载体。Flash存储器又称闪存&…

黑马最新MybatisPlus教程!帮你实现快速开发

天下武功&#xff0c;唯快不破。在互联网世界中&#xff0c;更甚。产品更新要快、迭代要快、开发速度那必须得快。 在追求“快”的这条路上&#xff0c;大佬们都会使用上好的开发工具&#xff0c;来帮助自己实现高效开发&#xff0c;其中MybatisPlus便是提速的重要角色。 我们…

selenium+find_elements用法

1、假如我们遇到多个标签的class一样&#xff0c;比如像下面这样的 我们可以采用js语法去定位&#xff0c;比如&#xff1a; document.getElementsByClassName("ant-calendar-picker-input ant-input")[0]

【Vue3 知识第二讲】Vue3新特性、vue-devtools 调试工具、脚手架搭建

文章目录 一、Vue3 新特性1.1 重写双向数据绑定1.1.1 Vue2 基于Object.defineProperty() 实现1.1.2 Vue3 基于Proxy 实现 1.2 优化 虚拟DOM1.3 Fragments1.4 Tree shaking1.5 Composition API 二、 vue-devtools 调试工具三、环境配置四、脚手架目录介绍五、SFC 语法规范解析附…

打包——使用pyinstaller打包解决dll丢失问题

我们通常使用pyinstaller或者其对应的图形化的auto-py-to-exe来生成exe可执行文件时,换了一个电脑经常会出现报错,特别是我们当前开发大多数使用温室操作系统,而很多用户使用的是win7操作系统,这就造成了会提示缺少dll文件。如下图: 笔者总结了解决此问题的经验总结如下。…

做外贸的时候意见不被上级采纳真的错了吗

某日晚上&#xff0c;听了一场直播&#xff0c;然后有一个小伙伴在直播间里说自己很苦恼&#xff0c;为什么自己所有的意见老板都不采纳&#xff0c;都要给否决掉&#xff0c;感觉老板是故意针对她自己的。 事情的起因是因为这个业务员自己通过社媒开发出了一个客户&#xff0…

为什么选择搭建虚拟展会?如何搭建虚拟展会能给企业带来帮助

引言&#xff1a; 在当今数字化时代&#xff0c;宣传策略正在不断演变&#xff0c;企业需要跟上时代的脚步&#xff0c;这为企业带来了更多的机会和挑战。虚拟展会作为一种创新性的宣传手段&#xff0c;正逐渐受到企业的重视和青睐。 一&#xff0e;为什么选择搭建虚拟展会&am…

循环购模式:白酒企业的电商新机遇

白酒是中国传统的酒类&#xff0c;也是社交场合的必备佳品。白酒的品牌众多&#xff0c;竞争激烈&#xff0c;如何在电商市场中脱颖而出&#xff0c;提升销量和品牌影响力呢&#xff1f;循环购模式或许是一个新的答案。 循环购模式是一种新型的电商营销方式&#xff0c;它让消费…

day 44 | ● 309.最佳买卖股票时机含冷冻期 ● 714.买卖股票的最佳时机含手续费

309.最佳买卖股票时机含冷冻期 此外&#xff0c;在返回的时候&#xff0c;由于状态234都是卖出的状态&#xff0c;所以要比较其最大值进行返回。 func maxProfit(prices []int) int {dp : make([][]int, len(prices))dp[0] make([]int, 4)dp[0][0] -prices[0]for i : 1; i &…

经纬恒润预期功能安全(SOTIF)解决方案为自动驾驶安全保驾护航

近年来&#xff0c;“安全”被普遍认为是智能驾驶汽车被用户接受或者得到商业应用最大的问题&#xff0c;ISO26262功能安全旨在避免由E/E系统功能失效导致的不可接受的风险&#xff0c;主要是针对系统性失效/随机硬件失效导致的风险进行分析和控制&#xff0c;然而传感器和感知…

安防监控/视频存储/视频汇聚平台EasyCVR接入海康Ehome车载设备出现收流超时的原因排查

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。视频汇聚平台既具…

2024河南太阳能光伏展览会|郑州光伏展会|郑州太阳能展会

2024第四届中国&#xff08;郑州&#xff09;太阳能光伏及储能产业展览会 时间&#xff1a;2024年2月26-28日 地点&#xff1a;郑州.中原国际博览中心 太阳能光伏及储能产业是未来能源发展的趋势&#xff0c;随着全球气候变化和能源危机的加剧&#xff0c;越来越多的国家开始…

ExpressLRS开源代码之工程结构

ExpressLRS开源代码之工程结构 1. 源由2. 工程3. 开发环境安装4. pio命令5. ExpressLRS配置6. 硬件认证过程7. 参考资料 1. 源由 ExpressLRS开源代码基于Arduino框架设计&#xff0c;在所支持的硬件环境下&#xff0c;提供900/2400发射机和接收机硬件方案。 该设计提供了一个…

25.选择排序,归并排序,基数排序

目录 一. 选择排序 &#xff08;1&#xff09;简单选择排序 &#xff08;2&#xff09;堆排序 二. 归并排序 三. 基数排序 四. 各种排序方法的比较 &#xff08;1&#xff09;时间性能 &#xff08;2&#xff09;空间性能 &#xff08;3&#xff09;排序方法的稳定性能…

港联证券|股票过户费是什么意思?

股票过户费是指在股票商场中&#xff0c;由于股份所有权的转让&#xff0c;双方需求付出的一种买卖费用。这种费用首要是为了付出证券公司和证券中介机构转让股票所发生的各项费用&#xff0c;如代理费、登记费、买卖税等。股票过户费的数额一般是按照股票的数量和买卖金额来核…