爬虫实战(三)

2023-05-16

随着互联网的不断发展,网络数据的规模和价值也不断提升。在这个大数据时代,如何从海量数据中提取有价值的信息并加以利用,成为了数据科学、商业分析、金融预测、社会研究等领域中一个重要的问题。而网络爬虫作为一种数据采集技术,为我们获取和分析网络数据提供了一种高效、灵活和精准的手段。本文将通过实例介绍三种常见的爬虫技术:单页面爬虫、多页面爬虫和分布式爬虫,并使用Python代码进行演示。

一、单页面爬虫

单页面爬虫是指只爬取单个页面的内容。通常,我们可以通过对页面的HTML代码进行解析,提取出我们需要的信息,并保存到本地文件或数据库中。下面我们将分别演示如何爬取百度搜索结果页面和知乎问题页面。

  1. 爬取百度搜索结果页面

百度搜索是一个非常常见的搜索引擎,我们可以使用Python的requests库和BeautifulSoup库来爬取百度搜索结果页面,并提取搜索结果的标题、链接和描述信息。

import requests
from bs4 import BeautifulSoup

def get_baidu_search_result(keyword):
    url = 'https://www.baidu.com/s'
    params = {'wd': keyword}
    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'}
    response = requests.get(url, params=params, headers=headers)
    soup = BeautifulSoup(response.text, 'html.parser')
    results = soup.find_all('div', class_='result')
    for result in results:
        try:
            title = result.h3.a.text
            link = result.h3.a['href']
            desc = result.find('div', class_='c-abstract').text
            print(title)
            print(link)
            print(desc)
        except:
            pass

if __name__ == '__main__':
    keyword = 'Python'
    get_baidu_search_result(keyword)

 在这个示例中,我们定义了一个get_baidu_search_result()函数,它接收一个关键字参数,表示我们要搜索的内容。我们使用requests库发送GET请求,将搜索结果页面的HTML代码下载到本地,并使用BeautifulSoup库进行解析。我们使用find_all()方法获取所有的搜索结果,并遍历每个搜索结果,提取出标题、链接和描述信息,并输出到控制台中。

        2、爬取知乎问题页面

知乎是一个非常流行的知识分享社区,其中包含了大量的高质量问题和答案。如果我们想要获取某个问题的相关信息,就可以使用Python的爬虫技术来实现。

在这里,我们将使用requests库和正则表达式来爬取知乎问题页面,并提取问题标题、回答数和回答内容。具体来说,我们将使用get请求获取页面内容,然后使用正则表达式提取需要的信息。

下面是一个简单的示例代码:

import requests
import re

def get_zhihu_question(question_id):
    url = f'https://www.zhihu.com/question/{question_id}'
    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'}

    r = requests.get(url, headers=headers)
    if r.status_code == 200:
        pattern = re.compile('<h1 class="QuestionHeader-title">(.*?)</h1>.*?<button class="Button QuestionMainAction.*?>(.*?)</button>', re.S)
        result = pattern.search(r.text)
        if result:
            title = result.group(1).strip()
            answer_count = result.group(2).strip()
            print(f"问题标题:{title}")
            print(f"回答数:{answer_count}")
        else:
            print("无法匹配问题标题和回答数")

        pattern = re.compile('<div class="RichContent-inner">(.*?)</div>', re.S)
        result = pattern.search(r.text)
        if result:
            answer = result.group(1).strip()
            print(f"回答内容:{answer}")
        else:
            print("无法匹配回答内容")
    else:
        print(f"请求失败,错误代码:{r.status_code}")

在这个示例中,我们使用了requests库来发送get请求,并指定了一个模拟浏览器的User-Agent头。我们使用正则表达式来匹配问题标题、回答数和回答内容。其中,问题标题和回答数的正则表达式为<h1 class="QuestionHeader-title">(.*?)</h1>.*?<button class="Button QuestionMainAction.*?>(.*?)</button>,回答内容的正则表达式为<div class="RichContent-inner">(.*?)</div>。在使用正则表达式匹配时,我们使用了re.S参数来指定使用点号匹配任意字符,包括换行符。

使用示例代码的方法很简单,只需要传入问题的id即可,例如:

get_zhihu_question(333068447)

         3、多页面爬虫

在实际应用中,我们通常需要爬取多个页面的内容。这时候,我们可以使用循环来遍历多个页面,并依次爬取每个页面的内容。

以下是一个使用Python的requests库和正则表达式爬取豆瓣电影页面的示例代码:

import requests
import re

def get_movie_info(start):
    url = f'https://movie.douban.com/top250?start={start}&filter='
    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'}
    response = requests.get(url, headers=headers)
    html = response.text
    pattern = re.compile('<div class="hd">.*?<span class="title">(.*?)</span>.*?<span class="rating_num" property="v:average">(.*?)</span>.*?<span>(.*?)</span>', re.S)
    items = re.findall(pattern, html)
    for item in items:
        title, rating, quote = item
        print(title, rating, quote)

if __name__ == '__main__':
    for i in range(0, 250, 25):
        get_movie_info(i)

在这个示例中,我们爬取了豆瓣电影TOP250页面的多个页面,并提取了每个电影的标题、评分和简介。

需要注意的是,爬取多个页面时,我们需要使用循环来遍历每个页面,并将每个页面的内容合并到同一个列表中。同时,我们需要使用正则表达式来提取每个页面的内容。在使用正则表达式时,我们需要注意页面结构的变化,以免正则表达式失效。

        4、 爬取豆瓣电影页面

豆瓣是一个广受欢迎的电影、图书、音乐等领域的评分、评论、推荐社区。在这里,我们将使用Python的requests库和BeautifulSoup库来爬取豆瓣电影页面,并提取电影名称、评分和评价人数等信息。

首先,我们需要分析豆瓣电影页面的结构。在浏览器中打开豆瓣电影页面(https://movie.douban.com/top250),可以看到如下的页面:

在这个页面中,每部电影都有一个包含电影名称、评分、评价人数等信息的元素。我们可以使用BeautifulSoup库来解析这些元素,并提取所需的信息。

下面是一个使用Python代码爬取豆瓣电影页面的示例:

import requests
from bs4 import BeautifulSoup

url = 'https://movie.douban.com/top250'
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'}

# 发送请求并获取页面内容
response = requests.get(url, headers=headers)
html = response.text

# 使用BeautifulSoup解析页面内容
soup = BeautifulSoup(html, 'html.parser')
movies = soup.select('.item')

# 遍历电影元素并输出电影名称、评分和评价人数等信息
for movie in movies:
    title = movie.select_one('.title').text.strip()
    rating = movie.select_one('.rating_num').text.strip()
    votes = movie.select_one('.star span:nth-of-type(4)').text.strip()
    print(f'{title} {rating} {votes}人评价')

在这个示例中,我们使用requests库发送请求,并将响应内容保存到一个变量中。然后,我们使用BeautifulSoup库解析页面内容,并使用CSS选择器选择电影元素。最后,我们遍历电影元素,并使用CSS选择器选择电影名称、评分和评价人数等信息,并输出这些信息。

需要注意的是,豆瓣电影页面的结构可能会随时更改,因此我们需要随时更新CSS选择器。另外,爬取豆瓣页面时需要注意反爬虫机制,避免频繁请求。

5、 爬取淘宝商品页面

Python爬取淘宝商品页面需要通过以下步骤实现:

  1. 构造请求URL并发送请求,可以通过浏览器的开发者工具查看请求的URL及参数。
  2. 解析HTML页面,获取商品列表信息。
  3. 遍历商品列表,提取每个商品的信息,例如商品名称、价格、销量等。

需要注意的是,爬取淘宝页面同样需要注意反爬虫机制,可以通过设置headers、使用代理IP等方式来减少被封禁的风险。

以下是一个爬取淘宝商品页面的示例代码:

import requests
import re

def get_taobao_products(keyword, pages):
    url_template = 'https://s.taobao.com/search?q={}&s={}'
    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'}
    products = []

    for page in range(pages):
        s = page * 44
        url = url_template.format(keyword, s)
        response = requests.get(url, headers=headers)

        if response.status_code == 200:
            html = response.text
            pattern = r'g_page_config = ({.*?});'
            match = re.search(pattern, html, re.S)
            if match:
                data = match.group(1)
                products_data = re.findall(r'"raw_title":"(.*?)".*?"view_price":"(.*?)".*?"view_sales":"(.*?)".*?"nick":"(.*?)"', data, re.S)
                products += [{'title': d[0], 'price': d[1], 'sales': d[2], 'seller': d[3]} for d in products_data]

    return products

在这个示例中,我们定义了一个名为get_taobao_products的函数,用于爬取淘宝商品页面并提取商品信息。该函数接受两个参数,分别为关键词和要爬取的页面数。

在函数内部,我们首先根据关键词和页面数构造了请求URL,并发送了请求。我们设置了一个headers参数,模拟了一个浏览器访问,以避免被淘宝反爬虫机制封禁。

然后,我们解析了HTML页面,使用正则表达式提取了商品列表信息。我们使用re.findall函数提取了商品名称、价格、销量和卖家等信息,并将这些信息存储在一个字典列表中。

最后,我们返回了所有商品的信息。

可以使用以下代码来测试get_taobao_products函数:

products = get_taobao_products('iphone', 5)
for product in products:
    print(product)

这个示例将爬取淘宝上关于iphone的前5页商品信息,并输出商品名称、价格、销量和卖家等信息。

需要注意的是,淘宝的页面结构可能会随时更改,需要随时更新正则表达式。同时,淘宝的反爬虫机制也比较严格,需要注意使用。

        6、分布式爬虫

随着互联网的发展,数据量的爆炸式增长,单机爬虫已经无法满足大规模数据爬取的需求,分布式爬虫成为了一种常见的解决方案。分布式爬虫将任务分散到多个节点上执行,可以大幅提高爬取效率和稳定性。

Scrapy是一个强大的Python爬虫框架,可以很容易地实现分布式爬虫。Scrapy-Redis是Scrapy的一个扩展,提供了对Redis数据库的支持,可以实现Scrapy的分布式爬虫功能。

在使用Scrapy-Redis进行分布式爬虫前,我们需要安装Redis和Scrapy-Redis库。Redis是一种开源的内存数据结构存储系统,可以用来实现分布式爬虫的任务队列。Scrapy-Redis库提供了与Redis数据库交互的API。

                6.1 Scrapy-Redis使用示例

以下是一个使用Scrapy-Redis进行分布式爬虫的示例代码:

import scrapy
from scrapy_redis.spiders import RedisSpider

class MySpider(RedisSpider):
    name = 'myspider'
    redis_key = 'myspider:start_urls'
    
    def parse(self, response):
        # 解析爬取的数据
        pass

在这个示例中,我们定义了一个名为MySpider的Spider,并继承了Scrapy-Redis库提供的RedisSpider类。我们还定义了redis_key属性,用于指定Redis数据库中存储起始URL的键名。在parse()方法中,我们可以编写解析爬取的数据的逻辑。

        6.2 分布式爬虫的架构

Scrapy-Redis的分布式爬虫架构主要由以下四个部分组成:

  1. Redis数据库:存储爬虫任务队列和已爬取的URL集合。
  2. Master节点:负责向Redis数据库中写入起始URL,然后将任务分配给Slave节点执行,并接收Slave节点的爬取结果。
  3. Slave节点:从Redis数据库中读取任务,执行爬取任务并将结果返回给Master节点。
  4. Scrapy-Redis:提供与Redis数据库交互的API。

以下是一个简单的分布式爬虫架构示意图:

+---------------------+
|     Redis数据库      |
|                     |
| 任务队列,已爬取URL集合 |
+---------------------+
            |
            v
+---------------------+
|      Master节点      |
|                     |
| 写入起始URL,分配任务给Slave节点 |
+---------------------+
            |
            v
+---------------------+
|      Slave节点       |
|                     |
| 从Redis数据库中读取任务,执行爬取任务并返回结果 |
+---------------------+
            |
            v
+---------------------+
|      Scrapy-Redis     |
|                     |
| 提供与Redis数据库交互的API |

接下来我们将使用scrapy-redis来实现分布式爬虫。scrapy-redis是scrapy框架的一个扩展,可以将多个爬虫进程之间的URL去重和任务分配等工作交给Redis,从而实现分布式爬虫。

首先,我们需要在本地安装Redis并启动服务。然后,在终端中使用pip安装scrapy-redis库。

pip install scrapy-redis

 接下来,我们需要在爬虫项目的settings.py文件中添加以下配置:

# 设置使用scrapy-redis的去重组件,替代Scrapy默认的去重组件
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"

# 设置使用scrapy-redis的调度器组件,替代Scrapy默认的调度器组件
SCHEDULER = "scrapy_redis.scheduler.Scheduler"

# 设置爬虫的起始URL队列类型
SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderPriorityQueue"

# 设置爬虫的去重规则,必须使用Redis的hashes(默认)
REDIS_ITEMS_KEY = '%(spider)s:items'

# 设置Redis服务器的地址和端口号
REDIS_HOST = 'localhost'
REDIS_PORT = 6379

# 设置Redis连接密码,如果Redis服务器没有设置密码可以不填写
# REDIS_PARAMS = {'password': 'yourpassword'}

接下来,在我们的爬虫代码中,我们需要继承scrapy_redis库中的RedisSpider类,来实现分布式爬虫。

import scrapy
from scrapy_redis.spiders import RedisSpider

class MySpider(RedisSpider):
    name = 'myspider'
    redis_key = 'myspider:start_urls'

    def parse(self, response):
        # 爬虫逻辑
        pass

在这个示例中,我们使用RedisSpider类来定义我们的爬虫。我们指定了爬虫名称为'myspider',起始URL的Redis键为'myspider:start_urls'。在parse方法中编写爬虫的逻辑代码。

现在,我们需要将起始URL放入Redis队列中,以便爬虫可以从中获取URL并开始抓取页面。可以使用Redis的命令行工具或者Python的Redis库来完成这个任务。

import redis
r = redis.Redis(host='localhost', port=6379)
r.lpush('myspider:start_urls', 'http://www.example.com')

在这个示例中,我们使用Redis的lpush命令将起始URL'http://www.example.com'放入'myspider:start_urls'队列中。

现在,我们可以在终端中运行爬虫了。首先,我们需要启动Redis服务。然后,在终端中使用以下命令启动爬虫:

scrapy runspider myspider.py

 

现在,我们已经成功地实现了一个分布式爬虫。

接下来,我们将介绍如何爬取某社交网站的用户信息并进行分析。

7、爬取某社交网站用户信息并进行分析

在这个示例中,我们将以Twitter为例,介绍如何爬取用户信息并进行分析。

Twitter是一个非常流行的社交媒体平台,用户可以在上面发布消息(称为推文),也可以关注其他用户的推文。每个用户都有自己的资料页面,其中包含了一些基本信息,例如姓名、头像、简介、关注数和粉丝数等。我们可以通过爬取用户的资料页面来获取这些信息,并进行分析。

爬取Twitter用户信息

首先,我们需要获取Twitter用户资料页面的URL。在Twitter上,每个用户都有一个唯一的用户名(例如@realDonaldTrump),我们可以将其拼接在https://twitter.com/的后面,就可以得到用户资料页面的URL。

接下来,我们可以使用Python的requests库和正则表达式来爬取用户资料页面,并提取用户的姓名、头像、简介、关注数和粉丝数等信息。

以下是一个爬取Twitter用户信息的示例代码:

import tweepy
import pandas as pd

# 设置API访问凭据
consumer_key = 'your_consumer_key'
consumer_secret = 'your_consumer_secret'
access_token = 'your_access_token'
access_token_secret = 'your_access_token_secret'

# 认证API访问凭据
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)

# 创建API对象
api = tweepy.API(auth)

# 获取用户信息
user = api.get_user('twitter_username')

# 输出用户信息
print(f'用户ID:{user.id_str}')
print(f'用户名:{user.screen_name}')
print(f'个人简介:{user.description}')
print(f'位置:{user.location}')
print(f'被关注数:{user.followers_count}')
print(f'关注数:{user.friends_count}')
print(f'推文数:{user.statuses_count}')

# 获取用户的推文
tweets = api.user_timeline(screen_name='twitter_username', count=100, tweet_mode='extended')

# 输出每条推文的内容
for tweet in tweets:
    print(tweet.full_text)

需要注意的是,Twitter API的使用需要遵守Twitter的API政策和限制。具体来说,需要注意以下几点:

  1. 请求速率限制:Twitter API对请求速率有限制,需要控制请求频率,避免频繁请求导致API被封禁。

  2. 返回数据的格式:Twitter API返回的数据格式是JSON格式,需要使用Python的json模块进行解析。

  3. API政策和限制:Twitter API有一些政策和限制,如限制查询时间范围、限制查询结果数量等,需要遵守。

总之,使用Twitter API获取用户信息需要遵守相关政策和限制,同时需要掌握Python的json模块的使用,才能进行数据分析和可视化等后续处理。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

爬虫实战(三) 的相关文章

  • YOLO系列算法详解(一)

    一 深度学习经典检测方法 1 检测任务中阶段的意义 对于单阶段 one stage 检测来说 xff0c 输入一张图像 xff0c 经过一个卷积神经网络 xff0c 输出一个边界框 xff0c 只需要得到框的 xff08 x1 y1 xff
  • 简单的Facenet_Pytorch人脸识别教程(windows+cpu)

    本文使用的编译器是Pycharm xff0c 具体的安装教程可参考 xff1a Pycharm安装参考链接 一 新建项目 首先打开Pycharm xff0c 点击 new project 进行新建 xff0c 选择项目的保存位置 xff0c
  • 调频连续波(FMCW)原理

    FMCW xff08 Frequency Modulated Continuous Wave xff09 即调频的连续信号 在许多方面得到应用 xff0c 比如生物雷达 xff0c 车载雷达 xff0c 无人机雷达等等方面都有FMCW波的应
  • TI AWR1843+DAC1000EVM+mmWave Studio实现数据采集

    参考文章 xff1a DCA1000EVM使用指南 嵌入式处理 技术文章 E2E 设计支持 整个实验主要是按照上面文章中的步骤进行操作 xff0c 虽然文章中是以IWR1642BOOST为例 xff0c 但是所有的操作步骤基本完全适用于AW
  • 安装Pytorch时出现ERROR: Could not find a version that satisfies the requirement...的解决方法

    一 问题描述 当我们创建了一个虚拟环境 xff0c 在环境中使用pip命令安装Pytorch时经常会出现以下错误 xff1a 二 解决方法 下面罗列几种有用的解决方法 xff1a 1 切换网络 出现这种问题很可能是因为网络太卡导致无法从该路
  • 使用Rviz完成摄像头(camera)的视频采集

    文章目录 一 准备摄像头二 使用Rviz三 Rviz显示摄像头 一 准备摄像头 1 找到虚拟机设置 xff0c 将USB设置为3 1 2 连接摄像头 3 连接成功如下 4 检查能否使用 使用cheese命令 二 使用Rviz 1 启动Rvi
  • SAM-Segment Anything Model进行单张图片的检测记录

    一 代码和模型下载 下载链接 GitHub facebookresearch segment anything 将代码下载并解压到一个没有中文的路径下 页面往下滑找到需要下载的模型 nbsp 这里提供了三个模型 vit b的大小是358m
  • Segment Anything(SAM)全图分割做mask

    项目的源码和模型下载以及环境配置等可参考我的上一篇文章 xff0c 这里不再赘述 文章链接 xff1a https blog csdn net m0 63604019 article details 130221434 在项目中创建一个名为
  • labelme的使用学习

    windows下图像标注软件labelme安装及使用教程 xff1a https www rstk cn news 12836 html action 61 onClick 问题 xff1a 如何将labelme标注产生的json文件中的某
  • Unet做分割的详细步骤

    参考文章 xff1a https blog csdn net ECHOSON article details 122914826 我是参考上面这个文章来做的 xff0c 但是在做实验的过程中还是出现了很多问题 xff0c 所以这里还是自己写
  • Java语法之多态

    上次给大家分享了Java的继承 xff0c 今天小编给大家分享面向对象三大特性的第三大特性 xff0c 也就是多态 xff0c fighting 目录 x1f388 一 多态 x1f388 1 1多态的概念 x1f388 1 2多态的实现条
  • 实现调度器

    实现调度器 调度器是操作系统的核心 xff0c 其主要功能就是实现任务的切换 xff0c 即从就绪列表里面找到优先级最高的任务 xff0c 然后去执行该任务 1 启动调度器 xff08 1 xff09 void vTaskStartSche
  • 任务相关知识

    任务管理 从系统的角度来看 xff0c 任务是竞争系统资源的最小运行单元 在任何时刻 xff0c 只有一个任务得到运行 xff0c 每个任务都在自己的环境中运行 xff0c 而这个运行的任务由FreeRTOS的调度器决定 FreeRTOS
  • 串口打印中文乱码及注释乱码问题

    1 使用keil5代码注释出现中文乱码问题 在使用keil5中出现如下问题 xff1a 这时候的解决方法是在keil5顶头工具栏上进入 xff1a Edit Configuration xff0c 如下然后进行选择GB2312编码方式 xf
  • keil5中安装Arm Compiler 5.06问题

    keil5 5 7版本中安装Arm Compiler 5 06问题 在最新的keil5 7版本中不再默认安装Arm Compiler 5 06编译器 xff0c 所以此版本需要自己独立下载并进行安装 具体步骤如下 xff1a 1 官网下载A
  • 五、FreeRTOS中任务控制块(TCB)、任务句柄和内核对象句柄

    文章目录 1 什么是任务控制块 xff1f 2 任务控制块的内容3 什么是任务句柄 xff1f 4 什么是内核对象句柄 xff1f 1 什么是任务控制块 xff1f 任务控制块实际上就是一个结构体 在FreeRTOS中 xff0c 系统为了
  • 凸优化基础知识

    文章目录 一 学习任务二 学习内容1 计算几何1 1 计算几何 的定义1 2 直线表达 2 凸集2 1 定义2 2 平面表达2 3 超平面表达 3 凸函数3 1 定义3 2 Hessian Matrix 矩阵3 3 判别 4 凸规划4 1
  • 八、任务的创建与删除

    文章目录 1 任务的三要素 xff1a 主体函数 任务栈 任务控制块 2 与任务相关的部分API函数 xff08 1 xff09 xTaskCreate xff08 2 xff09 void vTaskDelete TaskHandle t
  • 三、STM32中systick中断的优先级

    1 systick中断的优先级 systick为内核外设中断 xff0c 与普通外设中断的优先级有些区别 xff0c 并没有抢占优先级和子优先级的说法 对于M3来说内核外设的中断优先级由内核SCB这个外设的寄存器 xff1a SHPRx x
  • 二十、事件组

    文章目录 1 基本概念2 使用场景 xff1a 用于任务间 任务和中断间的同步 xff08 非数据传输 xff09 3 事件组结构体 xff08 事件控制块 xff09 内容解析4 为什么采用的是关闭调度器而不是关闭中断 xff1f 5 创

随机推荐

  • 3、如何使用GDB来进行命令行debug

    文章目录 一 与前面的联系二 GDB的一些认识1 什么是gdb2 gdb作用3 gdb可实现的功能 三 GDB常用的调试命令 一 与前面的联系 对于前面说到的launch json文件就是用于debug的配置文件 xff0c 在前面的vsc
  • 1、vscode搭建C++开发环境及一些配置文件的含义

    文章目录 一 vscode搭建开发环境1 下载和配置MinGW w64 编译器套件2 安装到电脑中3 配置环境变量4 测试是否安装成功5 vscode上安装C C 43 43 插件 二 配置编译环境时各个文件的含义1 task json x
  • 5、cmake的简单认识及CMakeLists.txt的编写语法

    文章目录 1 cmake是什么 xff08 1 xff09 cmake的两大功能 2 CMakeLists txt常用命令 xff08 即如何编写CMakeLists txt文件 xff09 xff08 1 xff09 cmake常见预定义
  • 6、在vscode上利用cmake创建第一个简单C++程序

    文章目录 xff08 1 xff09 前期准备工作 xff1a 即安装对应的环境1 xff09 在vscode上安装插件 xff1a C C 43 43 Cmake CMake tools2 xff09 安装Cmake环境 xff08 这是
  • 7、在vscode上利用cmake构建多文件C++工程

    文章目录 xff08 1 xff09 创建如下工程文件夹 xff1a 其中头文件放在include文件夹中 xff0c 源文件放在src文件夹中 xff08 2 xff09 在vscode上打开工程文件夹 xff0c 在对应的文件夹内建立相
  • js实现猜数字游戏

    随机输入两个数min 和max 在两个数中间生成一个随机数 进行猜数字游戏 且有猜的次数限制 1 不限制次数版本 function getRandom min max return Math floor Math random max mi
  • ubuntu更换阿里云镜像源操作步骤

    过程较为复杂 xff0c 能清楚自己改了镜像源 xff0c 避免了忘记或备份等 修改下载 xff08 镜像源 xff09 源 输入 xff1a sudo nano etc apt sources list 2 将所有deb 后的网址http
  • CSRF攻击原理与防御方法

    文章目录 CSRF概念CSRF攻击攻击原理及过程CSRF漏洞检测防御CSRF攻击1 验证 HTTP Referer 字段2 在请求地址中添加 token 并验证3 在 HTTP 头中自定义属性并验证 CSRF概念 CSRF跨站点请求伪造 C
  • Windows11安装Linux子系统(Ubuntu22.04LTS)+安装ROS

    目录 一 准备工作 二 安装Ubuntu 22 04 1 LTS 三 启动Ubuntu遇到的报错及解决方案 四 换源 五 安装ROS 设置编码 添加源 安装ROS 设置环境变量 测试 一 准备工作 控制面板 程序 程序和功能 启动或关闭 W
  • 如何在Github上建立自己的个人博客网站详细教程

    概述 之前闲着没事 就利用Github建了一个个人博客网站 效果还不错 今天就来分享一下 建立自己个人博客网站的好处 1 面试装逼 这个不必多说 2 把平时积累的知识和项目记录下来 方便日后查看使用 3 不受其他博客平台的限制 准备工作 开
  • 看野火的视频,用正点原子的板子(STM32F4探索者)做系统定时器实验

    1 实验目的 编写一个毫秒级的延时函数 xff0c 控制LED的亮灭 这里的灯是LED1 xff0c 端口是GPIOF xff0c 引脚是PIN10 2 实验流程 2 1 准备知识 SysTick 系统定时器 xff0c 24位 xff0c
  • 用正点原子的板子(STM32F4探索者)做PWM 输出实验

    1 实验目的 使用 TIM14 的通道 1 来产生 PWM 控制 LED0 DS0 的亮度 2 实验准备和流程 由上图可以看出 xff0c GPIOF9引脚对应的是定时器TIM14的通道1 由上图可以看出 xff0c GPIOF9引脚对应的
  • MATLAB快速入门(二):矩阵

    矩阵 目录 矩阵 1 冒号表达式 2 矩阵元素的引用 3 矩阵的运算 3 1算术运算 3 2逻辑运算 4 特殊矩阵 5 矩阵变换 5 1对角阵 5 2三角阵 5 3矩阵旋转 5 4稀疏矩阵 6 矩阵求值 1 冒号表达式 e1 e2 e3 省
  • toString方法使用

    一 Object类中toString的作用 1 在主方法中我们可以直接用toString 输出对象其中的内容 2 我们需要直接输出对象中所属内容时 xff0c 直接使用toString 方法输出语句 xff0c 输出内容不友好 xff0c
  • px4+mavros+offboard控制+gazebo仿真以及与pixhawk4飞控连接(一)

    记录一下自己从px4到板载控制的一系列流程以及踩坑过程 xff0c 希望也可以帮助大家避雷 话不多说直接上干货 一 软 硬件平台 px4版本 xff1a 1 10 1 飞控板 xff1a pixhawk4 ros版本 xff1a melod
  • 浅谈穿越机飞控如何烧写固件及其相关设置问题

    背景 xff1a 自己本人是无人机爱好者对穿越机也较为痴迷 xff0c 在使用DJI FPV天空端时发现无法显示OSD信息 xff0c 同时在眼镜端的OSD开关已经打开 xff0c 查阅相关资料发现自己的飞控版本过低需要烧写到4 1 0以上
  • XSS攻击原理及防范

    文章目录 一 XSS攻击简介二 XSS攻击分类1 反射型2 存储型3 DOM based型 三 XSS防范1 cookie安全策略2 X XSS Protection设置3 XSS防御HTML编码4 XSS 防御HTML Attribute
  • Jetson Xavier NX安装librealsense

    在nx上安装librealsense可以使用由jetsonhacks开源的安装脚本installRealSenseSDK 克隆仓库 xff0c 进入目录 git clone https github com jetsonhacks inst
  • Kubernetes(K8s)的简介及基础知识

    1 关于Kubernetes xff08 K8s xff09 的简介 Kubernetes xff0c 简称又叫K8s xff0c 为什么简称要叫K8s xff0c 据说是因为Kubernetes单词中K字母和S字母之间相隔8个字母 xff
  • 爬虫实战(三)

    随着互联网的不断发展 xff0c 网络数据的规模和价值也不断提升 在这个大数据时代 xff0c 如何从海量数据中提取有价值的信息并加以利用 xff0c 成为了数据科学 商业分析 金融预测 社会研究等领域中一个重要的问题 而网络爬虫作为一种数