python爬虫网页解析模块及测试案例详解

news2024/11/14 2:22:08

xpath模块

xpath模块基本使用方法

测试网页

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8"/>
    <title>Title</title>
</head>
<body>
    <ul>
        <li id="l1" class="c1">北京</li>
        <li id="l2">上海</li>
        <li id="c3">深圳</li>
        <li id="c4">武汉</li>
    </ul>
</body>
</html>
from lxml import etree

# 解析
# (1)本地文件                                                etree.parse
# (2)服务器响应的数据  response.read().decode('utf-8') *****   etree.HTML()

# xpath解析本地文件
tree = etree.parse('070_尚硅谷_爬虫_解析_xpath的基本使用.html')
print(tree.xpath('xpath路径'))

# 查找ul下面的li
print("查找ul下面的li")
li_list = tree.xpath('//body/ul/li')
print(li_list)

# 查找所有有id的属性的li标签
# text()获取标签中的内容
li_list = tree.xpath('//ul/li[@id]/text()')
print("查找所有有id的属性的li标签,text()获取标签中的内容")
print(li_list)

# 找到id为l1的li标签  注意引号的问题
li_list = tree.xpath('//ul/li[@id="l1"]/text()')
print("找到id为l1的li标签  注意引号的问题")

# 查找到id为l1的li标签的class的属性值
li = tree.xpath('//ul/li[@id="l1"]/@class')
print("查找到id为l1的li标签的class的属性值")
print(li)

# 查询id中包含l的li标签
li_list = tree.xpath('//ul/li[contains(@id,"l")]/text()')
print("查找到id为l1的li标签的class的属性值")
print(li_list)

# 查询id的值以l开头的li标签
li_list = tree.xpath('//ul/li[starts-with(@id,"c")]/text()')
print("查询id的值以l开头的li标签")
print(li_list)

#查询id为l1和class为c1的
li_list = tree.xpath('//ul/li[@id="l1" and @class="c1"]/text()')
print("查询id为l1和class为c1的")
print(li_list)

# 判断列表的长度
print(li_list)
print(len(li_list))

在这里插入图片描述

获取网页的源码进行解析

# (1) 获取网页的源码
# (2) 解析   解析的服务器响应的文件  etree.HTML
#  (3)  打印

import urllib.request

url = 'https://www.baidu.com/'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
}

# 请求对象的定制

request = urllib.request.Request(url = url,headers = headers)

# 模拟浏览器访问服务器
response = urllib.request.urlopen(request)

# 获取网页源码
content = response.read().decode('utf-8')
print(content)
# 解析网页源码 来获取我们想要的数据
from lxml import etree

# 解析服务器响应的文件
tree = etree.HTML(content)
# 获取想要的数据  xpath的返回值是一个列表类型的数据
result = tree.xpath('//input[@id="su"]/@value')[0]
print("输出解析结果",result)

在这里插入图片描述
在这里插入图片描述

result = tree.xpath('//meta[@name="description"]/@content')[0]
print("输出解析结果",result)

在这里插入图片描述

在这里插入图片描述

result = tree.xpath('//ul[@class="s-hotsearch-content" and @id="hotsearch-content-wrapper"]/li[@data-index]/a/span[@class="title-content-title"]/text()')
print("输出解析结果",result)

在这里插入图片描述
在这里插入图片描述

解析层次关系

标签跟着一层层的解析
在这里插入图片描述
当然如果标签的特征是独一味二的没有重复的可以直接对目标数据进行获取

result = tree.xpath('//span[@class="title-content-title"]/text()')
print("输出解析结果",result)

在这里插入图片描述

案例:通过解析网站图片下载链接进行下载图片

第一:分析网站网址结构:

第二页
在这里插入图片描述
第三页
在这里插入图片描述
通过分析翻页对应网址的关系我们可以写出解析网址代码

def create_request(page):
    if(page == 1):
        url = 'https://sc.chinaz.com/tupian/qinglvtupian.html'
    else:
        url = 'https://sc.chinaz.com/tupian/qinglvtupian_' + str(page) + '.html'

    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36',
    }

    request = urllib.request.Request(url = url, headers = headers)
    return request

调用结果:
在这里插入图片描述

第二:编写解析网页的代码

找到图片的html位置
在这里插入图片描述
在这里插入图片描述
通过分析网页中的下载地址,我们发现img标签里面的data-original的数据和https://进行拼接正好可以构成图片下载地址

"""
将传入的网页内容进行解析,解析出图片地址和名字返回
"""
def get_xpath(content):

    tree = etree.HTML(content)
    # 解析图片的地址
    url_list = tree.xpath('//div[@class="tupian-list com-img-txt-list"]//div[@class="item"]/img/@data-original')
    # 解析图片的名称
    name_list = tree.xpath('//div[@class="tupian-list com-img-txt-list"]//div[@class="item"]/img/@alt')
    return url_list, name_list

调用测试
在这里插入图片描述

第三:拼接下载地址,下载图片

"""
传入解析好的图片地址传入进行下载
"""
def down_load(url_list, name_list):
    # 循环传入的图片地址数组
    for i in range(len(url_list)):
        # 拿到每个图片地址
        url = url_list[i]
        # 拿到每个图片的名称
        name = name_list[i]
        # 拼接成下载地址
        url = 'https:' + url
        # 调用下载方法,第一个参数为下载地址,第二个参数为下载的图片名称
        urllib.request.urlretrieve(url=url, filename=name + '.jpg')

在这里插入图片描述

整体代码

# 需求 下载的前十页的图片
# https://sc.chinaz.com/tupian/qinglvtupian.html   1
# https://sc.chinaz.com/tupian/qinglvtupian_page.html

import urllib.request
from lxml import etree

"""
通过网址获取网页内容
"""
def create_request(page):
    if(page == 1):
        url = 'https://sc.chinaz.com/tupian/qinglvtupian.html'
    else:
        url = 'https://sc.chinaz.com/tupian/qinglvtupian_' + str(page) + '.html'

    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36',
    }

    request = urllib.request.Request(url = url, headers = headers)
    response = urllib.request.urlopen(request)
    content = response.read().decode('utf-8')
    return content

"""
将传入的网页内容进行解析,解析出图片地址返回
"""

def get_xpath(content):

    tree = etree.HTML(content)
    # 解析图片的地址
    url_list = tree.xpath('//div[@class="tupian-list com-img-txt-list"]//div[@class="item"]/img/@data-original')
    # 解析图片的名称
    name_list = tree.xpath('//div[@class="tupian-list com-img-txt-list"]//div[@class="item"]/img/@alt')
    return url_list, name_list

"""
传入解析好的图片地址传入进行下载
"""
def down_load(url_list, name_list):
    # 循环传入的图片地址数组
    for i in range(len(url_list)):
        # 拿到每个图片地址
        url = url_list[i]
        # 拿到每个图片的名称
        name = name_list[i]
        # 拼接成下载地址
        url = 'https:' + url
        # 调用下载方法,第一个参数为下载地址,第二个参数为下载的图片名称
        urllib.request.urlretrieve(url=url, filename=name + '.jpg')

if __name__ == '__main__':
    start_page = int(input('请输入起始页码'))
    end_page = int(input('请输入结束页码'))

    # 根据传入的链接地址循环调用方法
    for page in range(start_page,end_page+1):
        # (1) 请求对象的定制
        content = create_request(page)
        #print(content)
        # (2)获取网页的源码
        url_list, name_list = get_xpath(content)
        # (3)下载
        down_load(url_list, name_list)

jsonpath模块

专门用来解析json数据的模块

测试数据

{ "store": {
    "book": [
      { "category": "修真",
        "author": "六道",
        "title": "坏蛋是怎样练成的",
        "price": 8.95
      },
      { "category": "修真",
        "author": "天蚕土豆",
        "title": "斗破苍穹",
        "price": 12.99
      },
      { "category": "修真",
        "author": "唐家三少",
        "title": "斗罗大陆",
        "isbn": "0-553-21311-3",
        "price": 8.99
      },
      { "category": "修真",
        "author": "南派三叔",
        "title": "星辰变",
        "isbn": "0-395-19395-8",
        "price": 22.99
      }
    ],
    "bicycle": {
      "author": "老马",
      "color": "黑色",
      "price": 19.95
    }
  }
}

jsonpath基本使用方法

import json
import jsonpath
# 加载json数据并设置编码格式
obj = json.load(open('073_尚硅谷_爬虫_解析_jsonpath.json','r',encoding='utf-8'))

# 书店所有书的作者
print("书店所有书的作者")
author_list = jsonpath.jsonpath(obj,'$.store.book[*].author')
print(author_list)

# 所有的作者
print("所有的作者")
author_list = jsonpath.jsonpath(obj,'$..author')
print(author_list)

# store下面的所有的元素
print("store下面的所有的元素")
tag_list = jsonpath.jsonpath(obj,'$.store.*')
print(tag_list)

# store里面所有东西的price
print("store里面所有东西的price")
price_list = jsonpath.jsonpath(obj,'$.store..price')
print(price_list)

# 第三个书
print("第三个书")
book = jsonpath.jsonpath(obj,'$..book[2]')
print(book)

# 最后一本书
print("最后一本书")
book = jsonpath.jsonpath(obj,'$..book[(@.length-1)]')
print(book)

# 前面的两本书
print("前面的两本书")
book_list = jsonpath.jsonpath(obj,'$..book[0,1]')
book_list = jsonpath.jsonpath(obj,'$..book[:2]')
print(book_list)

# 条件过滤需要在()的前面添加一个?
# 过滤出所有的包含isbn的书。
print("过滤出所有的包含isbn的书")
book_list = jsonpath.jsonpath(obj,'$..book[?(@.isbn)]')
print(book_list)


# 哪本书超过了10块钱
print("哪本书超过了10块钱")
book_list = jsonpath.jsonpath(obj,'$..book[?(@.price>10)]')
print(book_list)

在这里插入图片描述

通过jsonpath模块解析淘票票网站

import urllib.request

#请求地址
url = 'https://dianying.taobao.com/cityAction.json?activityId&_ksTS=1629789477003_137&jsoncallback=jsonp138&action=cityAction&n_s=new&event_submit_doGetAllRegion=true'
#模拟浏览器的请求头
headers = {
    'accept': 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01',
    'accept-language': 'zh-CN,zh;q=0.9',
    'cookie': 'cna=UkO6F8VULRwCAXTqq7dbS5A8; miid=949542021157939863; sgcookie=E100F01JK9XMmyoZRigjfmZKExNdRHQqPf4v9NIWIC1nnpnxyNgROLshAf0gz7lGnkKvwCnu1umyfirMSAWtubqc4g%3D%3D; tracknick=action_li; _cc_=UIHiLt3xSw%3D%3D; enc=dA18hg7jG1xapfVGPHoQCAkPQ4as1%2FEUqsG4M6AcAjHFFUM54HWpBv4AAm0MbQgqO%2BiZ5qkUeLIxljrHkOW%2BtQ%3D%3D; hng=CN%7Czh-CN%7CCNY%7C156; thw=cn; _m_h5_tk=3ca69de1b9ad7dce614840fcd015dcdb_1629776735568; _m_h5_tk_enc=ab56df54999d1d2cac2f82753ae29f82; t=874e6ce33295bf6b95cfcfaff0af0db6; xlly_s=1; cookie2=13acd8f4dafac4f7bd2177d6710d60fe; v=0; _tb_token_=e65ebbe536158; tfstk=cGhRB7mNpnxkDmUx7YpDAMNM2gTGZbWLxUZN9U4ulewe025didli6j5AFPI8MEC..; l=eBrgmF1cOsMXqSxaBO5aFurza77tzIRb8sPzaNbMiInca6OdtFt_rNCK2Ns9SdtjgtfFBetPVKlOcRCEF3apbgiMW_N-1NKDSxJ6-; isg=BBoas2yXLzHdGp3pCh7XVmpja8A8S54lyLj1RySTHq14l7vRDNufNAjpZ2MLRxa9',
    'referer': 'https://dianying.taobao.com/',
    'sec-ch-ua': '"Chromium";v="92", " Not A;Brand";v="99", "Google Chrome";v="92"',
    'sec-ch-ua-mobile': '?0',
    'sec-fetch-dest': 'empty',
    'sec-fetch-mode': 'cors',
    'sec-fetch-site': 'same-origin',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36',
    'x-requested-with': 'XMLHttpRequest',
}
#拼接请求头和请求地址
request = urllib.request.Request(url = url, headers = headers)
#进行请求
response = urllib.request.urlopen(request)
# 对返回的数据进行转码
content = response.read().decode('utf-8')
print("获取的网站数据")
print(content)
# split 切割
content = content.split('(')[1].split(')')[0]
print("切割后的数据")
print(content)
# 将获取的内容写入文件
with open('074_尚硅谷_爬虫_解析_jsonpath解析淘票票.json','w',encoding='utf-8')as fp:
    fp.write(content)

import json
import jsonpath

obj = json.load(open('074_尚硅谷_爬虫_解析_jsonpath解析淘票票.json','r',encoding='utf-8'))

city_list = jsonpath.jsonpath(obj,'$..regionName')
print("jsonpath模块解析后的数据")
print(city_list)

在这里插入图片描述

bs4模块

测试数据

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div>
        <ul>
            <li id="l1">张三</li>
            <li id="l2">李四</li>
            <li>王五</li>
            <a href="" id="" class="a1">尚硅谷</a>
            <span>嘿嘿嘿</span>
        </ul>
    </div>
    <a href="" title="a2">百度</a>
    <div id="d1">
        <span>
            哈哈哈
        </span>
    </div>
    <p id="p1" class="p1">呵呵呵</p>
</body>
</html>

from bs4 import BeautifulSoup

通过解析本地文件 来将bs4的基础语法进行讲解

# 默认打开的文件的编码格式是gbk 所以在打开文件的时候需要指定编码
soup = BeautifulSoup(open('075_尚硅谷_爬虫_解析_bs4的基本使用.html',encoding='utf-8'),'lxml')

# 根据标签名查找节点
# 找到的是第一个符合条件的数据
print("找到的是第一个符合条件的数据")
print(soup.a)
# 获取标签的属性和属性值
print("获取标签的属性和属性值")
print(soup.a.attrs)

# bs4的一些函数
# (1)find
# 返回的是第一个符合条件的数据
print("获取标签的属性和属性值")
print(soup.find('a'))

# 根据title的值来找到对应的标签对象
print("根据title的值来找到对应的标签对象")
print(soup.find('a',title="a2"))

# 根据class的值来找到对应的标签对象  注意的是class需要添加下划线
print("根据class的值来找到对应的标签对象  注意的是class需要添加下划线")
print(soup.find('a',class_="a1"))


# (2)find_all  返回的是一个列表 并且返回了所有的a标签
print("返回的是一个列表 并且返回了所有的a标签")
print(soup.find_all('a'))

# 如果想获取的是多个标签的数据 那么需要在find_all的参数中添加的是列表的数据
print("如果想获取的是多个标签的数据 那么需要在find_all的参数中添加的是列表的数据")
print(soup.find_all(['a','span']))

# limit的作用是查找前几个数据
print("imit的作用是查找前几个数据")
print(soup.find_all('li',limit=2))


# (3)select(推荐)
# select方法返回的是一个列表  并且会返回多个数据
print("select方法返回的是一个列表  并且会返回多个数据")
print(soup.select('a'))

# 可以通过.代表class  我们把这种操作叫做类选择器
print("可以通过.代表class  我们把这种操作叫做类选择器")
print(soup.select('.a1'))

print(soup.select('#l1'))


# 属性选择器---通过属性来寻找对应的标签
# 查找到li标签中有id的标签
print("查找到li标签中有id的标签")
print(soup.select('li[id]'))

# 查找到li标签中id为l2的标签
print("查找到li标签中id为l2的标签")
print(soup.select('li[id="l2"]'))


# 层级选择器
#  后代选择器
# 找到的是div下面的li
print("找到的是div下面的li")
print(soup.select('div li'))

# 子代选择器
#  某标签的第一级子标签
# 注意:很多的计算机编程语言中 如果不加空格不会输出内容  但是在bs4中 不会报错 会显示内容
print("子代选择器")
print(soup.select('div > ul > li'))


# 找到a标签和li标签的所有的对象
print("找到a标签和li标签的所有的对象")
print(soup.select('a,li'))

# 节点信息
#    获取节点内容
obj = soup.select('#d1')[0]
# 如果标签对象中 只有内容 那么string和get_text()都可以使用
# 如果标签对象中 除了内容还有标签 那么string就获取不到数据 而get_text()是可以获取数据
# 我们一般情况下  推荐使用get_text()
print("获取节点内容")
print(obj.string)
print(obj.get_text())

# 节点的属性
obj = soup.select('#p1')[0]
# name是标签的名字
print("节点属性name是标签的名字")
print(obj.name)
# 将属性值左右一个字典返回
print("将属性值左右一个字典返回")
print(obj.attrs)

# 获取节点的属性
obj = soup.select('#p1')[0]

print(obj.attrs.get('class'))
print(obj.get('class'))
print(obj['class'])

在这里插入图片描述

抓取百度百科《青春有你第三季》数据

import json
from bs4 import BeautifulSoup
import requests

headers = {
    "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
    "cache-control": "max-age=0"
}


def getAllUsers():
    url = "https://baike.baidu.com/item/%E9%9D%92%E6%98%A5%E6%9C%89%E4%BD%A0%E7%AC%AC%E4%B8%89%E5%AD%A3?fromModule=lemma_search-box#4-3"
    response = requests.get(url, headers=headers)
    response.raise_for_status()  # 如果请求失败,这会抛出一个异常
    html_content = response.text
    soup = BeautifulSoup(html_content, 'lxml')

    trs = soup.find('div', attrs={'data-uuid': "go12lpqgpn"}).find_all(name='tr')
    listUser = []
    for tr in trs[1:]:
        tds = tr.find_all('td')
        name = tds[0].find('a').get_text()
        head_href = tds[0].find('a').attrs['href']
        head_id = head_href.split('/')[3].split('?')[0]
        provice = tds[1].find('span').get_text()
        height = tds[2].find('span').get_text()
        weight = tds[3].find('span').get_text()
        company = tds[4].find('span').get_text()
        user = {'name': name, 'head_id': head_id, 'provice': provice, 'height': height, 'weight': weight,
                'company': company}
        listUser.append(user)

    print(listUser)
    return listUser


if __name__ == '__main__':
    listUser = getAllUsers()
    with open('user.json', 'w', encoding='utf-8') as f:
        json.dump(listUser, f, ensure_ascii=False, indent=4)

在这里插入图片描述

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

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

相关文章

R语言安装devtools包失败过程总结

R语言安装devtools包时&#xff0c;遇到usethis包总是安装失败&#xff0c;现总结如下方法&#xff0c;亲测可有效 一、usethis包及cli包安装问题 首先&#xff0c;Install.packages("usethis")出现如下错误&#xff0c;定位到是这个cli包出现问题 载入需要的程辑包…

GESP CCF C++ 四级认证真题 2024年6月

第 1 题 下列代码中&#xff0c;输出结果是&#xff08; &#xff09; A. 12 24 24 12 B. 24 12 12 24 C. 12 12 24 24 D. 24 24 12 12 第 2 题 下面函数不能正常执行的是&#xff08;&#xff09; A. B. C. D. 第 3 题 下面程序…

博客前端项目学习day01

这里写自定义目录标题 登录创建项目配置环境变量&#xff0c;方便使用登录页面验证码登陆表单 在VScode上写前端&#xff0c;采用vue3。 登录 创建项目 检查node版本 node -v 创建一个新的项目 npm init vitelatest blog-front-admin 中间会弹出询问是否要安装包&#xff0c…

OZON夏季热卖产品有哪些,OZON夏季热卖新品

OZON平台在夏季的热卖产品种类繁多&#xff0c;涵盖了多个领域&#xff0c;主要包括但不限于以下几个方面&#xff0c;接下来看看OZON夏季热卖产品有哪些&#xff0c;OZON夏季热卖新品&#xff01;Top1 运动套装 Костюм спортивный Victorias Secret 商品id…

AI绘画Stable Diffusion 自制素材工具: layerdiffusion插件—透明背景生成工具

大家好&#xff0c;我是设计师阿威 今天给大家分享一款AI绘画的神级插件—LayerDiffusion。 Layerdiffusion是一个用于stable-diffusion-webui 的透明背景生成&#xff08;不是生成图再工具扣图&#xff0c;是直接生成透明背景透明图像&#xff09;插件扩展&#xff0c;它可以…

SpringBoot整合Java Mail实现发送邮件

SpringBoot整合Java Mail实现发送邮件 实现 引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency>发送邮件配置 这里使用qq邮箱发送邮件&#xff0c;需要…

TensorBoard ,PIL 和 OpenCV 在深度学习中的应用

重要工具介绍 TensorBoard&#xff1a; 是一个TensorFlow提供的强大工具&#xff0c;用于可视化和理解深度学习模型的训练过程和结果。下面我将介绍TensorBoard的相关知识和使用方法。 TensorBoard 简介 TensorBoard是TensorFlow提供的一个可视化工具&#xff0c;用于&#x…

visual studio开发C++项目遇到的坑

文章目录 1.安装的时候&#xff0c;顺手安装了C模板&#xff0c;导致新建项目执行出问题2.生成的exe&#xff0c;打开闪退问题3.项目里宏的路径不对&#xff0c;导致后面编译没有输出4. vs编译ui&#xff0c;warning跳过&#xff0c;未成功5.vs编译.h&#xff0c;warning跳过&a…

python自动化之用flask校验接口token(把token作为参数)

用到的库&#xff1a;flask 实现效果: 写一个接口&#xff0c;需要token正确才能登录 代码&#xff1a; # 导包 from flask import Flask,request,jsonify,json # 创建一个服务 appFlask(__name__) # post请求&#xff0c;路径&#xff1a;/query app.route(/query, met…

spring boot(学习笔记第十三课)

spring boot(学习笔记第十三课) Spring Security的logout&#xff0c;传统后端开发模式和前后端分离模式的不同&#xff0c;invalidateHttpSession不好用&#xff0c;bug&#xff1f; 学习内容&#xff1a; 传统后端开发模式 vs 前后端分离模式Spring Security的logout功能 1.…

WPF学习(4) -- 数据模板

一、DataTemplate 在WPF&#xff08;Windows Presentation Foundation&#xff09;中&#xff0c;DataTemplate 用于定义数据的可视化呈现方式。它允许你自定义如何展示数据对象&#xff0c;从而实现更灵活和丰富的用户界面。DataTemplate 通常用于控件&#xff08;如ListBox、…

pytorch中一些最基本函数和类

1.Tensor操作 Tensor是PyTorch中最基本的数据结构&#xff0c;类似于NumPy的数组&#xff0c;但可以在GPU上运行加速计算。 示例&#xff1a;创建和操作Tensor import torch# 创建一个零填充的Tensor x torch.zeros(3, 3) print(x)# 加法操作 y torch.ones(3, 3) z x y pr…

C++进阶(while循环——函数应用)

知识点代码框架总结 输入n组数据 &#xff0c;对n组数据里面的每一组进行处理&#xff08;输出、求和 、运算、其他&#xff09; int n;//几组数据cin >> n;//2while(n--){//对每组数据进行处理}看到下面的样例&#xff0c;肌肉型反映出上面的框架//2// 1 2 3// 4 5 6若…

Golang | Leetcode Golang题解之第233题数字1的个数

题目&#xff1a; 题解&#xff1a; func countDigitOne(n int) (ans int) {// mulk 表示 10^k// 在下面的代码中&#xff0c;可以发现 k 并没有被直接使用到&#xff08;都是使用 10^k&#xff09;// 但为了让代码看起来更加直观&#xff0c;这里保留了 kfor k, mulk : 0, 1;…

二叉搜索树大冒险:寻找-插入-删除

OK&#xff0c;看我们题目就可知道啦&#xff0c;今天要分享学习的一种数据结构就是二叉搜索树。 内容题目也说了三个大概的&#xff0c;分别是寻找、插入、删除。 讲这个之前呢&#xff0c;那么就先讲讲这个二叉搜索树是何方神圣呢&#xff1f; 二叉搜索树&#xff1a; 又…

移动端 火星坐标体系、百度坐标体系和全球坐标体系,该如何选择?

项目场景&#xff1a; 在梳理项目代码时&#xff0c;看到代码中的WGS-84&#xff0c;忽然想起有次面试问我这个问题&#xff0c;今天就好好的梳理下这个问题。 问题描述 移动端获取定位一般用什么编码&#xff1f;为什么要用这个&#xff1f; 原因分析&#xff1a; 解决方案&…

J025_斗地主游戏案例开发(简版)

一、需求描述 完成斗地主游戏的案例开发。 业务&#xff1a;总共有54张牌&#xff1b; 点数&#xff1a;3、4、5、6、7、8、9、10、J、Q、K、A、2 花色&#xff1a;黑桃、红桃、方片、梅花 大小王&#xff1a;大王、小王 点数分别要组合4种花色&#xff0c;大小王各一张。…

LeetCode --- 134双周赛

题目 3206. 交替组 I 3207. 与敌人战斗后的最大分数 3208. 交替组 II 3209. 子数组按位与值为 K 的数目 一、交替组 I & II 题目中问环形数组中交替组的长度为3的子数组个数&#xff0c;主要的问题在于它是环形的&#xff0c;我们要考虑首尾相接的情况&#xff0c;如何…

【流媒体】 通过ffmpeg硬解码拉流RTSP并播放

简介 目前RTSP拉流是网络摄像头获取图片数据常用的方法&#xff0c;但通过CPU软解码的方式不仅延时高且十分占用资源&#xff0c;本文提供了一种从网络摄像头RTSP硬解码的拉流的方法&#xff0c;并且提供python代码以便从网络摄像头获取图片进行后续算法处理。 下载ffmpeg F…

回归求助 教程分享

大侠幸会&#xff0c;在下全网同名「算法金」 0 基础转 AI 上岸&#xff0c;多个算法赛 Top 「日更万日&#xff0c;让更多人享受智能乐趣」 今日 217/10000 抱个拳&#xff0c;送个礼 更多内容&#xff0c;见微*公号往期文章&#xff1a;通透&#xff01;&#xff01;十大回…