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

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.requesturl = '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.htmlimport 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 jsonpathobj = 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 requestsheaders = {"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.textsoup = 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 listUserif __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.mzph.cn/news/871418.shtml

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

相关文章

​前端Vue自定义签到获取积分弹框组件设计与实现

摘要 随着前端技术的不断演进&#xff0c;开发的复杂性日益凸显。传统的整体式开发方式在面临功能迭代和修改时&#xff0c;常常牵一发而动全身&#xff0c;导致开发效率低下和维护成本高昂。组件化开发作为一种解决方案&#xff0c;通过实现模块的独立开发和维护&#xff0c;…

frp内网穿透ssh,tcp经过服务器慢速和p2p模式实现高速吃满上传带宽

ssh_server aliyun_server ssh_client 办公室 云服务器 家 在家里经过云服务器中转&#xff0c;很慢&#xff0c;但是很稳定 使用p2p穿透&#xff0c;速度可以直接拉满 ssh_server cc.ini # 连接服务器配置 [common] server_addr 1…

InjectFix 热更新解决方案

简介 今天来谈一谈&#xff0c;项目种的客户端热更新解决方案。InjectFix是腾讯xlua团队出品的一种用于Unity中C#代码热更新热修复的解决方案。支持Unity全系列&#xff0c;全平台。与xlua的思路类似&#xff0c;InjectFix解决的痛点主要在于Unity中C#代码写的逻辑在发包之后无…

【数智化CIO展】沃太能源CIO陈丽:AI 浪潮下的中国企业数智化转型机遇与挑战...

陈丽 本文由沃太能源CIO陈丽投递并参与由数据猿联合上海大数据联盟共同推出的《2024中国数智化转型升级优秀CIO》榜单/奖项评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 在当今飞速发展的数字时代&#xff0c;中国企业正面临着前所未有的变革机遇和挑战。“中国企业数…

Flowable-流程图标与流程演示

BPMN 2.0是业务流程建模符号2.0的缩写。它由Business Process Management Initiative这个非营利协会创建并不断发展。作为一种标识&#xff0c;BPMN 2.0是使用一些符号来明确业务流程设计流程图的一整套符号规范&#xff0c;它能增进业务建模时的沟通效率。目前BPMN2.0是最新的…

链路追踪系列-01.mac m1 安装zipkin

下载地址&#xff1a;https://hub.docker.com/r/openzipkin/zipkin jelexjelexxudeMacBook-Pro zipkin-server % pwd /Users/jelex/Documents/work/zipkin-server 先启动Es: 可能需要先删除 /Users/jelex/dockerV/es/plugins 目录下的.DS_Store 当端口占用时再次启动&#x…

Chromium CI/CD 之Jenkins实用指南2024-Windows安装篇(一)

1. 引言 在现代软件开发过程中&#xff0c;持续集成和持续部署&#xff08;CI/CD&#xff09;是确保高效、稳定软件交付的关键实践。Jenkins作为一款广泛使用的自动化服务器&#xff0c;通过其强大的插件体系和灵活的配置&#xff0c;支持各种操作系统和开发环境。为了帮助开发…

excel 百分位函数 学习

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、函数说明PERCENTILE 函数PERCENTILE.inc 函数PERCENTILE.exc 函数QUARTILE.EXC 函数 二、使用步骤总结 前言 excel 百分位函数 Excel提供了几个函数用于…

计算机网络——常见问题汇总

1. introduction 1.1 Explain what a communication protocol is and why its important. A communication protocol is a set of rules and conventions(公约) that govern(统治) how data is transmitted and received between devices(设备), systems, or entities in a ne…

Linux vim的使用(一键安装则好用的插件_forcpp),gcc的常见编译链接操作

vim 在Linux系统上vim是个功能还比较完善的软件。但是没装插件的vim用着还是挺难受的&#xff0c;所以我们直接上一款插件。 我们只需要在Linux上执行这个命令就能安装(bite提供的) curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh …

Qt中https的使用,报错TLS initialization failed和不能打开ssl.lib问题解决

前言 在现代应用程序中&#xff0c;安全地传输数据变得越来越重要。Qt提供了一套完整的网络API来支持HTTP和HTTPS通信。然而&#xff0c;在实际开发过程中&#xff0c;开发者可能会遇到SSL相关的错误&#xff0c;例如“TLS initialization failed”&#xff0c;cantt open ssl…

pytorch-LSTM

目录 1. RNN存在的问题2. LSTM的由来3. LSTM门3.1 遗忘门3.2 输入门3.3 输出门 4. LSTM是如何减轻梯度弥散问题 1. RNN存在的问题 如下图&#xff1a;RNN能满足预测下一个单词&#xff0c;但是对于获取更多的上下文信息就做不到了。 2. LSTM的由来 RNN能做到短时记忆即shor…

适合创业公司使用的wordpress主题

对于创业公司来说&#xff0c;‌选择一个适合的WordPress主题至关重要&#xff0c;‌它不仅能够提升公司网站的外观和用户体验&#xff0c;‌还能帮助优化搜索引擎排名&#xff0c;‌从而吸引更多的潜在客户。‌以下是一些推荐的WordPress主题&#xff0c;‌特别适合创业公司使…

抖音运营_商品标题优化关键词优化

一 为什么要优化标题&#xff1f; 标题是爆单的核心因素 有搜索的地方就有关键词检索 抖音现在重点扶持搜索板块 关键词检索不仅为了 消费者、也为了 达人。 二 关键词的组成和原则 1 核心词 n. &#xff08;你卖的东西&#xff09; 示例&#xff1a;连衣裙 2 属性词 …

Linux -- 认识 gdb

目录 前言&#xff1a; Debug 模式和 Release 模式 怎么安装 gdb&#xff1f;&#xff08;CentOS7&#xff09; 怎么使用 gdb&#xff1f; 进入 gdb 模式&#xff1a; 查看代码&#xff1a; 执行代码&#xff1a; 断点&#xff1a; 打断点&#xff1a; 查看断点&#x…

前端埋点数据收集和数据上报

原文地址 什么是埋点 学名叫时间追踪(Event Tracking), 主要针对用户行为或者业务过程进行捕获&#xff0c;处理和发送相关技术及实施过程. 埋点是数据领域的一个专业术语&#xff0c;也是互联网领域的俗称&#xff0c;是互联网领域的俗称 埋点是产品数据分析的基础&#xf…

深度解读李彦宏的“不要卷模型,要卷应用”

深度解读李彦宏的“不要卷模型&#xff0c;要卷应用” —— AI技术的应用之道 引言 在2024世界人工智能大会的舞台上&#xff0c;李彦宏的“不要卷模型&#xff0c;要卷应用”言论犹如一石激起千层浪&#xff0c;引发了业界对AI技术发展路径的深思。本文将深入探讨这一观点&a…

Eagle 4.0 更新了哪些功能,值得购买吗?

这个全新的版本带来了一系列重磅级别的更新&#xff0c;包括全新的「插件系统」、「全新的 UI 风格」以及「AI 工具」等。所有这些&#xff0c;都是为了提供给用户更加优质的使用体验&#xff0c;让工作的流程更加流畅&#xff0c;更加高效。 我们的团队始终倾听用户的声音&am…

C语言:指针详解(5)

目录 一、sizeof()函数和strlen()函数的对比 二、数组和指针笔试题解析 三、指针运算笔试题解析 正文开始 一、sizeof()函数和strlen()函数的对比 1.sizeof()函数 在学习操作符的时候&#xff0c;我们了解了sizeof()函数。sizeof()函数是用来计算变量所占内存空间大小的&a…

算法笔记——LCR

一.LCR 152. 验证二叉搜索树的后序遍历序列 题目描述&#xff1a; 给你一个二叉搜索树的后续遍历序列&#xff0c;让你判断该序列是否合法。 解题思路&#xff1a; 根据二叉搜索树的特性&#xff0c;二叉树搜索的每一个结点&#xff0c;大于左子树&#xff0c;小于右子树。…