最新要闻
- 1个月发了4版驱动 Intel Arc显卡自信起来了:RTX 3060性价比已不能看
- 当前最新:索尼A7R5更新Ver.2.00固件:四大升级
- 速读:人工智能大潮下:Meta高管仍坚称元宇宙才是未来
- 每日快报!库克到访米哈游与大伟哥合影 大赞《原神》及创作团队
- 全球热讯:马斯克请愿叫停GPT-5!360周鸿祎:不发展才是最大的不安全
- 前沿资讯!打通为民服务“最后一米”,浦东这个街道积极推进社会治理与公共服务全覆盖
- 【环球热闻】全球男性精子量告急:50年来减少62%!2045年人类绝育?
- 支付宝招财宝如何样?招财宝收益高吗?
- 观热点:《最后生还者》 印象派杰作
- 焦点快报!vivo X Fold2真机亮相:经典华夏红配色、“天圆地方”设计
- 全球今头条!女生爬完泰山发现裤子变成偏大码引热议:网友质疑几乎不可能
- 焦点热议:专家:中国汽车产业进入淘汰赛 将从百家变成十几家
- 资讯推荐:北京出台新政引导光伏发电高质量发展
- 继《孤勇者》之后 小学生开始流行盘手串 网友:这届小朋友不好带了
- 苹果CEO库克造访米哈游:与《原神》创作团队交谈
- 【天天热闻】胜为八类网线7.5米到手23.9元:25Gbps高速传输
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
快资讯丨【0基础学爬虫】爬虫基础之网页解析库的使用
大数据时代,各行各业对数据采集的需求日益增多,网络爬虫的运用也更为广泛,越来越多的人开始学习网络爬虫这项技术,K哥爬虫此前已经推出不少爬虫进阶、逆向相关文章,为实现从易到难全方位覆盖,特设【0基础学爬虫】专栏,帮助小白快速入门爬虫,本期为网页解析库的使用。
(相关资料图)
概述
前几期的文章中讲到了网络请求库的使用,我们已经能够使用各种库对目标网址发起请求,并获取响应信息。本期我们会介绍各网页解析库的使用,讲解如何解析响应信息,提取所需数据。
XPath的使用
XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。同样,XPath 也支持HTML文档的解析。
介绍
XPath 使用路径表达式来匹配HTML文档中的节点或节点集,路径表达式基于HTML文档树,因此在学习XPath 时需要对网页结构有一个初步了解,关于网页结构这些在之前的文章《网页基本结构》中已经介绍到了。
安装
使用XPath 需要安装Python的第三方库lxml,可以使用命令pip install lxml
进行安装
使用
下文中,我们会通过一个示例来了解xpath的用法。
这是一个测试网页1
这是一个测试网页2
- 北京
- 上海
- 广州
- 深圳
标题
内容1
内容2
内容3
这是一个简单的网页body结构。我们想要提取页面中的信息,就需要先分析它的结构,理清结构后,编写路径表达式就会更加方便。在前文对xpath的介绍中我们了解到xpath是对XML或HTML文档进行解析的功能,但在代码中,示例中的html文本只是一段字符串,所以在使用xpath进行匹配前首先要将字符串转成HTML对象。
from lxml import etreeelement = """ 这是一个测试网页1
这是一个测试网页2
- 北京
- 上海
- 广州
- 深圳
标题
内容1
内容2
内容3
"""html = etree.HTML(element)print(html)#输出:
将文本转化为html对象后,就可以使用xpath进行匹配了。
路径表达式
表达式 | 描述 | 示例 | 示例描述 |
---|---|---|---|
nodename | 选取此节点下的所有子节点 | head | 获取当前head节点下的所有子节点 |
/ | 从根节点选取 | /html/head | 从根节点匹配head节点 |
// | 从任意位置匹配节点 | //head | 匹配任意head节点 |
. | 选取当前节点 | ||
.. | 选取当前节点的父节点 | //head/.. | 匹配head节点的父节点 |
@ | 选取属性 | //div[@id="box"] | 匹配任意id值为box的div标签 |
选取节点
以示例代码为例,我们想要匹配所有的li标签,可以这样实现:
html.xpath("//li")#输出 [, , , ]
谓语
获取id属性值为box的div标签信息
html.xpath("//div[@id="box"]")#输出 []
获取所有class属性值为article的标签信息
html.xpath("//*[@class="article"]")#输出 [, , , ]
获取所有class属性值为article的标签下h3标签的文本信息
html.xpath("//*[@class="article"]/h3/text()")#输出 ["标题"]
获取所有class属性值为article的标签下p标签的文本信息
html.xpath("//*[@class="article"]/p/text()")#输出 ["内容1", "内容2", "内容3"]
获取第一个li标签的文本信息
html.xpath("//li[1]/text()")#输出 ["北京"]
获取最后一个li标签下的所有文本信息
html.xpath("//li[last()]//text()")#输出 ["深圳"]
获取倒数第二个li标签下的所有文本信息
html.xpath("//li[last()-1]//text()")#输出 ["广州"]
获取前两个li标签下的文本信息
html.xpath("//li[position()<3]//text()")#输出 ["北京", "上海"]
选取多个路径
html.xpath("//div[@class="article"]/h3/text() | //div[@id="box"]/p/text()")#输出 ["这是一个测试网页1", "标题"]
轴
轴可定义相对于当前节点的节点集。
轴名称 | 结果 |
---|---|
ancestor | 选取当前节点的所有先辈(父、祖父等)。 |
ancestor-or-self | 选取当前节点的所有先辈(父、祖父等)以及当前节点本身。 |
attribute | 选取当前节点的所有属性。 |
child | 选取当前节点的所有子元素。 |
descendant | 选取当前节点的所有后代元素(子、孙等)。 |
descendant-or-self | 选取当前节点的所有后代元素(子、孙等)以及当前节点本身。 |
following | 选取文档中当前节点的结束标签之后的所有节点。 |
namespace | 选取当前节点的所有命名空间节点。 |
parent | 选取当前节点的父节点。 |
preceding | 选取文档中当前节点的开始标签之前的所有节点。 |
preceding-sibling | 选取当前节点之前的所有同级节点。 |
self | 选取当前节点。 |
获取ul标签下的子li标签下的a标签的href属性
html.xpath("//ul/child::li/a/@href")#输出 ["sz.html"]
获取a标签的所有先辈div标签
html.xpath("//a/ancestor::div")#输出 []
获取a标签的所有属性
html.xpath("//a/attribute::*")#输出 ["sz", "sz.html", "_self"]
获取id属性值为u2的li标签之后的所有p标签的文本信息
html.xpath("//li[@id="u2"]/following::p/text()")#输出 ["内容1", "内容2", "内容3"]
获取id属性值为u2的li标签之前的所有p标签的文本信息
html.xpath("//li[@id="u2"]/preceding::p/text()")#输出 ["这是一个测试网页1", "这是一个测试网页2"]
获取id属性值为u2的li标签之后的所有同级标签的文本信息
html.xpath("//li[@id="u2"]/following-sibling::*/text()")#输出 ["广州"]
获取id属性值为u3的li标签之前的所有同级标签的文本信息
html.xpath("//li[@id="u2"]/preceding-sibling::*/text()")#输出 ["北京"]
运算符
获取id属性值为u1或者u2的标签下的文本信息
html.xpath("//li[@id="u1" or @id="u2"]/text()")#输出 ["北京", "上海"]
判断a标签的name属性值是否为sz
html.xpath("//a/@name="sz"")#输出 True
函数
xpath提供了非常多的内置函数,这些函数可以用于各种值的计算与处理,这里只介绍常用的函数。
获取所有属性值包含test的标签的文本信息
html.xpath("//*[contains(attribute::*,"test")]/text()")#输出 ["这是一个测试网页1", "这是一个测试网页2"]
将id为u1的li标签和id为u2的li标签的文本信息进行拼接
html.xpath("concat(//li[@id="u1"]/text(),//li[@id="u2"]/text())")#输出 北京上海
获取id属性值以u开头的所有li标签的文本信息
html.xpath("//li[starts-with(@id,"u")]/text()")#输出 ["北京", "上海", "广州"]
上文中讲到的路径表达式的写法只是xpath中比较常用的写法,基本能够覆盖大部分需求。xpath路径也可以通过F12开发者工具直接获取,在 element 中右键需要匹配的节点元素,复制完整xpath即可。复制下来的完整xpath路径如:/html/body/ul/li[1]
。这种方法虽然简单,但实际上路径并不准确,而且路径为绝对路径,相对复杂,所以路径表达式推荐自己手动编写。
BeautifulSoup的使用
BeautifulSoup与上文中介绍的xpath一样,都是用于解析XML或HTML标签中的信息。BeautifulSoup 与 xpath 各有优势,使用哪个可以凭个人喜好。
安装
目前流行的 beautifulsoup 版本为beautifulsoup4,下面简称bs4。
pip install beautifulsoup4
使用
与 xpath 不同,bs4 需要自己选择解析器,常用的解析器有:
html.parser:Python内置解析器
lxml HTML:HTML解析器
lxml XML:XML解析器
各解析器之间的区别主要在于文档解析容错能力,对于不规范的 HTML 文本,它们的解析结果并不一致。
这里我们推荐使用 lxml 作为解析器,使用 lxml 作为解析器需要提前安装 lxml 第三方库。
from bs4 import BeautifulSouphtml = """ 这是一个测试网页1
这是一个测试网页2
- 北京
- 上海
- 广州
- 深圳
标题
内容1
内容2
内容3
"""soup = BeautifulSoup(html,"lxml")#返回完整的html文本
bs4的写法比较简洁,更人性化。
soup.body :获取body信息soup.li :获取第一个li标签soup.div :获取第一个div标签soup.li["id"] :获取第一个li标签的id属性值soup.a.attrs :获取第一个a标签的所有属性值,返回类型为字典
获取多个信息
soup.find_all("li") :获取所有li标签soup.find_all(["p","a"]) :获取所有p标签与a标签soup.find_all("div","article") :获取所有类名为article的div标签soup.find_all(id="box") :获取所有id属性值为box的标签
节点
soup.ul.parent :获取ul标签的父节点soup.find("a").find_parent("li") :获取第一个a标签的父li标签soup.find("a").find_parents("li") :获取第一个a标签的所有父li标签soup.find("li").find_next_siblings("li") :获取第一个li标签后的兄弟li标签soup.find("li").find_next_sibling("li") :获取第一个li标签后的第一个兄弟li标签soup.find(attrs={"id":"u4"}).find_previous_siblings("li") :获取id属性值为u4的li标签前的所有兄弟li标签soup.find(attrs={"id":"u4"}).find_previous_sibling("li") :获取id属性值为u4的li标签前的第一个兄弟li标签
CSS选择器
BeautifulSoup 支持大部分的CSS选择器,CSS选择器在之前的文章《网页基本结构》中做了介绍。
soup.select("div h3") :获取div下的h3标签soup.select("#city #u2") :获取id属性值为city的标签下id值u2的标签soup.select("a[href="sz.html"]") :获取href属性值为sz.html的a标签soup.select_one(".article") :获取第一个类名为article的标签
bs4 作用上与 xpath 基本一致,但是 bs4 的优势就在于语句的简洁性,用bs4匹配数据比 xpath 稍微简单一些,但是它在性能上比 xpath 要稍弱。
re正则表达式的使用
正则表达式(Regular Expression,通常简写为“regex”或“regexp”)是一种用来匹配文本字符串的模式。在编程和文本处理中,正则表达式通常被用来进行字符串匹配、搜索、替换等操作。
实际开发中,我们会对一些非结构化数据进行解析,对于这类数据,无论是 xpath 还是 BeautifulSoup 都无法进行解析。这时我们就需要用到正则表达式,正则表达式的强大在于它能够匹配任意类型的文本数据,可以帮助开发者快速的处理文本数据。
安装
Python 中内置了 re 库,无需额外安装
使用
模式 | 描述 |
---|---|
\w | 匹配字母数字及下划线 |
\W | 匹配非字母数字及下划线 |
\s | 匹配任意空白字符,等价于[\t\n\r\f] |
\S | 匹配任意非空白字符 |
\d | 匹配任意数字,等价于[0-9] |
\D | 匹配任意非数字的字符 |
\A | 匹配字符串的开头 |
\Z | 匹配字符串的结尾,如存在换行,只匹配到换行前的结束字符串 |
\z | 匹配字符串的结尾,如存在换行,会匹配换行符 |
^ | 匹配字符串的开头 |
$ | 匹配字符串的结尾 |
. | 匹配任意字符,除换行符,当re.DOTALL被指定时可以匹配包括换行符的任意字符 |
[...] | 匹配一组字符,如[abc],匹配a,b,c |
[^...] | 匹配不在[]中的字符 |
* | 匹配0或多个表达式 |
+ | 匹配1或多个表达式 |
? | 对它前面的正则式匹配0到1次 |
匹配n个之前的正则表达式 | |
对表达式进行n到m次匹配,尽量取最多 | |
a|b | 匹配a或b |
() | 匹配括号内的任意表达式 |
compile函数
re.compile 可以将正则表达式样式的字符串编译为一个正则表达式对象,可以通过这个对象来调用下述方法。
pattern = re.compile("\d")
match函数
re.match 会从字符串的起始位置进行匹配正则表达式,匹配成功后会返回匹配成功的结果,匹配失败则返回None。
import re#匹配字符apattern = re.compile("a") #从字符串开头开始匹配print(pattern.match("cat")) #从下标为1的位置开始匹配print(pattern.match("cat",1))
运行结果:
None
表达式匹配:
#以hello开头中间为数字后面是World的字符串pattern = re.compile("^hello\s(\d+)\sWorld") print(pattern.match("hello 123 World!!!"))
运行结果:
可以看到,两次的运行结果都是一个对象,可以使用group()方法获取匹配到的文本信息。
pattern = re.compile("^hello\s(\d+)\sWorld")result = pattern.match("hello 123 World!!!")print(result.group())print(result.group(1))
运行结果:
hello 123 World123
group(1)会返回第一个被括号包围的匹配结果,示例中被括号包围的是\d+,所以输出的结果为123。
Search函数
match函数是从字符串的开头开始匹配,想要从其它地方开始匹配需要自己传入位置,用这种方法匹配数据局限性很大。我们想要从任意位置开始匹配数据可以使用 re.search 函数。
pattern = re.compile("(\d+)")result = pattern.search("hello 123 World321!!!")print(result)print(result.group(1))
运行结果:
123
可以看到,使用 search 方法我们无需指定位置,它会搜寻整个字符串,返回第一个匹配成功的结果。
findall函数
search 函数可以从任意位置进行匹配,但是它只会返回第一个匹配成功的结果。我们想要获取所有匹配成功的结果就需要用到 findall 函数。
pattern = re.compile("(\d+)")result = pattern.findall("hello 123 World321!!!")print(result)
运行结果:
["123", "321"]
findall 函数会返回一个列表,因此 findall 函数返回的结果无法使用 group 方法。
通用匹配
在实际开发中,我们往往会遇到非常复杂的文本结构如:
"hello 123 this is a 999Regex Demo!!!World321"
这时如果使用\w,\s进行匹配会显得非常复杂,这时我们就可以使用一个通配组合.*
,上文中介绍到了.是匹配任意字符,*是匹配0或多个表达式,.*
搭配在一起就是匹配任意多个字符。使用.*
可以简单有效的进行数据匹配。
#匹配hello World之间的信息pattern = re.compile("hello(.*)World")result = pattern.findall("hello123 World this is a 999Regex Demo!!!World321")print(result)
运行结果:
["123 World this is a 999Regex Demo!!!"]
这里我们可以看到,使用.*后它匹配到了第一个 hello 到最后一个 World 之间的所有文本。但如果我们想要匹配 hello 到第一个 world 之间的信息呢。这时我们就需要了解一下贪婪匹配与非贪婪匹配。
贪婪与非贪婪
顾名思义,贪婪模式表示尽可能多的匹配,非贪婪模式表示尽可能少的匹配。从上文的示例我们可以看到re.compile("hello(.*)World")
它会从 hello 开始,匹配到最后一个 World,这显然就是贪婪模式,它会尽可能多的匹配,也就是匹配到最后一个符合规则的位置。正则表达式中,非贪婪模式需要使用到?,前文中讲到了?是匹配0到1次,使用?就能实现尽可能少的匹配。
#匹配hello World之间的信息(非贪婪)pattern = re.compile("hello(.*?)World")result = pattern.findall("hello123 World this is a 999Regex Demo!!!World321")print(result)
运行结果:
["123 "]
可以看到使用.*?
后,正则表达式只匹配到第一个 World 就停下了,这样就实现了非贪婪匹配。
Newspaper智能解析库的使用
Newspaper 是 Python 的第三方库,主要用于抓取新闻网页。它能够自动解析网页内容,匹配出新闻的各种信息。而且操作简单,非常容易上手。但是它并不适用于实际开发,因为它不够稳定,存在各种问题,无法应对爬虫开发中可能遇到的问题,如反爬虫等,所以这里对它只做介绍。
安装
命令行安装:pip install newspaper3k
使用
它的使用非常简单,传入目标网址后,调用 download() 方法下载网页源代码,使用 parse() 方法解析源码。
from newspaper import Article# 目标新闻网址url = "https://目标文章"news = Article(url, language="zh")news.download()news.parse()#获取新闻网页源码print(news.html)#获取新闻标题print(news.title)#获取新闻正文print(news.text)#获取新闻作者print(news.authors)#获取新闻发布时间print(news.publish_date)#获取新闻关键词print(news.keywords)#获取新闻摘要print(news.summary)#获取新闻配图地址print(news.top_image)#获取新闻视频地址print(news.movies)
Newspaper 可以与 requests 配合使用,通过 requests 获取源码,由 Newspaper 进行解析提取。Newspaper 库并不能完美的解析出各种信息,适合非专业人士使用。
总结
上文中,讲到了四个爬虫解析库的使用,其中 xpath 与 beautifulSoup 主要用于对 html 文本的解析,正则表达式主要用于对非结构化文本的解析,无法用 xpath 和 beautifulSoup 解析的文本信息通常会使用正则来进行匹配。Newspaper 是智能解析库,使用它可以自动解析新闻信息,无需自己编写表达式,但是缺点也很明显 。
与网络请求库一样,网页解析库的使用是每一个爬虫初学者都应该牢牢掌握的知识点,能够熟练的使用解析库才能更好的完成数据采集工作。
关键词:
快资讯丨【0基础学爬虫】爬虫基础之网页解析库的使用
世界今日报丨Qt商业级无边框窗口实现源码(windows、msvc)
今日视点:TypeScript 学习笔记 — 类型推断和类型保护(十一)
1个月发了4版驱动 Intel Arc显卡自信起来了:RTX 3060性价比已不能看
当前最新:索尼A7R5更新Ver.2.00固件:四大升级
速读:人工智能大潮下:Meta高管仍坚称元宇宙才是未来
每日快报!库克到访米哈游与大伟哥合影 大赞《原神》及创作团队
全球热讯:马斯克请愿叫停GPT-5!360周鸿祎:不发展才是最大的不安全
前沿资讯!打通为民服务“最后一米”,浦东这个街道积极推进社会治理与公共服务全覆盖
今日热闻!RegEX 备忘清单_开发速查表分享
全球视讯!Python常见面试题014.请说出下面的代码返回结果是什么?
世界今热点:基础篇丨链路追踪(Tracing)其实很简单
天天播报:什么是横向扩展「Scale-out」和纵向扩展「Scale-up」?
焦点信息:易基因: m6A RNA甲基化研究的前期探索性实验思路|干货系列
【环球热闻】全球男性精子量告急:50年来减少62%!2045年人类绝育?
nba2k13怎么空接?nba2k13阵容名单
iu14D2N.tmp是什么意思?iu14D2N.tmp文件详情介绍
华硕f83cr笔记本是哪一年上市的?华硕f83cr笔记本配置
英雄联盟为什么进不去比尔吉沃特?比尔吉沃特服务器在哪个城市?
微信8.0的状态能维持多久?微信8.0更新了什么功能?
支付宝招财宝如何样?招财宝收益高吗?
IM跨平台技术学习(七):得物基于Electron开发客服IM桌面端的技术实践
世界今日讯!min 与 + 运算转换成类似于矩阵乘法的推导过程
【环球时快讯】HDFS Balancer负载均衡器
每日观察!【Visual Leak Detector】配置项 SkipCrtStartupLeaks
世界快消息!掌握这几个算法题.NET初级面试算法不发愁
观热点:《最后生还者》 印象派杰作
焦点快报!vivo X Fold2真机亮相:经典华夏红配色、“天圆地方”设计
全球今头条!女生爬完泰山发现裤子变成偏大码引热议:网友质疑几乎不可能
焦点热议:专家:中国汽车产业进入淘汰赛 将从百家变成十几家
资讯推荐:北京出台新政引导光伏发电高质量发展
天天即时看!火山引擎 DataTester 推出可视化数据集成方案
速读:全网最详细中英文ChatGPT-GPT-4示例文档-个性化角色智能对话从0到1快速入门——官网推荐的48种最佳应用场景(附python/node.js/c
继《孤勇者》之后 小学生开始流行盘手串 网友:这届小朋友不好带了
苹果CEO库克造访米哈游:与《原神》创作团队交谈
【天天热闻】胜为八类网线7.5米到手23.9元:25Gbps高速传输
世界最新:微软建议Office 2016/2019用户升级:10月后将无法访问Microsoft 365
热点评!图灵波浪3.30-白银震荡上行格局不改
全球讯息:全网最详细中英文ChatGPT-GPT-4示例文档-读书书单推荐从0到1快速入门——官网推荐的48种最佳应用场景(附python/node.js/cu
当前热讯:BitMap对象当前正在其他地方使用?加锁也没用?
全球今热点:履约核心引擎低代码化原理与实践
天天快资讯:Linux 修改系统时间的两种方式
快看点丨京东二面:线程池中的线程抛出了异常,该如何处理?大部分人都会答错!
世界观热点:张奔斗:阳光双赛双四强 辛纳状态很“辛辣”
今日讯!男孩向女生水杯里放吸铁石 差点被喝下:医生称严重会胃穿孔
法国法芙娜脆珠+新鲜奶油 上行斋生巧福团狂促:8枚券后不到15元
精选!罗永浩将在淘宝直播间售卖民用卫星:最低200万起步
ChatGPT也要带货?微软开始在新必应插入广告
环球微头条丨长期进食柿子山楂 胃中长出巨大“顽石” 医生巧用无糖可乐辅助尿毒症女子成功碎石
环球百事通!【网络安全软件】上海道宁与Cybereason为您提供未雨绸缪的攻击保护,终结对端点、整个企业以及网络上任何角落的网络攻击
环球速读:1.redis的基本使用
全球简讯:前端设计模式——依赖注入模式
年轻人找工作不看工资看什么?一季度全国平均招聘月薪10101元 学历越高钱越多
世界新消息丨眼科医生自己真的都不做近视手术?
世界观天下!周上险量超5000 理想L系累计交付超10万台:其他新势力难了
热门美剧推动PS5销量大涨
专家提醒:千万不要侧躺玩手机 科普标准姿势
退役军人事务部调研组来洛 常正国带队
天天观热点:Linux的3个文件时间
Cursor,程序员的 AI 代码编辑助手
厚衣服先别收!强冷空气很快就到:今年来最大范围雨雪
“基尼太美” 兰博基尼Revuelto亮相 马力超千匹 2.5秒破百
【独家焦点】Win12 UI设计曝光被苹果用户吐槽:抄袭macOS太明显
2022年房屋的主要卖点是什么
3月份国有大行二级资本债密集发行 专家称大型银行与中小银行发债规模将明显分层
邮储银行450亿元定增落地 中国移动溢价逾40%“通吃”
世界讯息:鹰眼自爆伤情
天天观速讯丨读SQL进阶教程笔记02_三值逻辑和NULL
【全球热闻】结石痛怎么缓解_尿道结石疼痛怎么缓解
汽车雷达在无人陵园内显示全是人影 网友吐槽更智能了:官方回应
观天下!1W字长文:K8S Ingress 原理和实操
简讯:mvc-mvp-mvvm架构调研及实现--分布式课程思考题--zzb
【Visual Leak Detector】配置项 SkipHeapFreeLeaks
Unity 中的存档系统(本地存档)
最新消息:IDEA2023.1破解 永久激活 最新版IDEA激活 亲测可用!
突破10GB/s!影驰首款PCIe 5.0 SSD开卖:2TB售价2499元
热门:2.1s破百!100万的新款特斯拉 快得我差点吐了
世界今亮点!苹果WWDC大会定档6月6日:iOS 17无悬念、MR头显最受期待
达墨国产PCIe 5.0 硬盘2TB 1899元 官方坦诚提醒:谁买谁冤种
当前速看:飞艇事件的背后
世界热文:搞笑动漫日和在线观看(搞笑动漫日和)
天天新资讯:Ubuntu18.04系统安装nginx
天天速递!手撕HashMap(二)
【Visual Leak Detector】配置项 TraceInternalFrames
苹果推出的美国版花呗:被严重低估了
全球聚焦:为什么洗澡时总想“尿尿”?这怀习惯可不好!
环球信息:新一代高贵“亮机卡”!RTX 4050被曝6月发布:弱得不像话
【世界报资讯】 “大号MINI”!五菱缤果正式上市:5.98万元起
国产特有 魔改RTX 3060显卡999元:AMD也做不到的性价比
天天通讯!报告:电信业采购供应链发展呈现四大趋势
【独家】【Visual Leak Detector】配置项 StartDisabled
78.类型转换
环球快报:2023年找工作的心酸历程
全球热议:ASP.NET Core MVC+Quartz实现定时任务可视化管理页面
世界即时看!SSM框架笔记 庆祝学习SSM框架结束!!!
世界速读:【财经分析】债市短期表现向好 机构操作犹存分歧
当前速看:《生化危机4:重制版》阿什莉服装Mod公布 看了把持不住
天天亮点!CPU占用暴降 SSD提速百倍:《暗黑4》将支持微软DX游戏神技
具体如何编写信号与槽
今日热讯:关于大国竞争,“修昔底德陷阱”提出者谈到了“澶渊之盟”