前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >当当网图书数据清洗

当当网图书数据清洗

作者头像
数据科学人工智能
发布2022-04-01 10:52:55
1K0
发布2022-04-01 10:52:55
举报
文章被收录于专栏:数据科学和人工智能

在之前的案例使用网络爬虫自动抓取图书信息中,我们通过简单的爬虫抓取了当当网的机器学习相关的图书数据,并保存为 ./input/books_total.csv 文件。通过爬虫采集原始数据,但是由于各种原因,原始数据往往会存在许多问题,例如数据格式不正确,数据存在冗余等等。因此第一手获得的原始数据不能直接使用,需要进行数据清洗。本案例基于爬取的书籍数据进行数据清洗,使其称为符合我们要求的数据。

1.读取数据

首先,我们借助 Pandas 包提供的 read_csv 方法读取原始数据,将其转换成 Pandas 中的 DataFrame 格式。注意由于数据中包含中文,需要正确设置字符编码。

代码语言:javascript
复制
import pandas as pd 
data = pd.read_csv('./input/books_total.csv',encoding="utf8",sep="\t")

通过 shape 属性可以查看数据的行数和列数。

代码语言:javascript
复制
data.shape

(600, 5)

查看数据的前5行。

代码语言:javascript
复制
data.head()

书名

出版信息

当前价格

星级

评论数

0

机器学习 击败AlphaGo的武林秘籍,赢得人机大战的必由之路:人工智能大牛周志华教授巨著...

周志华 /2016-01-01 /清华大学出版社

¥66.00

width: 90%;

76149条评论

1

机器学习实战【python基础教程指南,python核心编程实例指导,对wxpython数...

[美]哈林顿 /2013-06-01 /人民邮电出版社

¥46.30

width: 90%;

25256条评论

2

机器学习实战:基于Scikit-Learn和TensorFlow 被称为机器学习图书*强的...

(法)奥雷利安・杰龙(Aurélien Géron) /2018-08-27 /机械工业出版社

¥83.30

width: 90%;

5759条评论

3

机器学习理论导引

周志华 王魏 高尉 张利军 /2020-05-30 /机械工业出版社

¥62.30

width: 100%;

783条评论

4

机器学习――原理、算法与应用 全书深入浅出,兼具广度与深度,帮助读者真正掌握机器学习、深度...

雷明 /2019-09-01 /清华大学出版社

¥39.60

width: 90%;

1184条评论

可以看出原始数据中有许多问题,例如当前价格带有人民币符号'¥',评论数含有文本等等。在本案例中我们按照步骤完成数据清洗,主要任务为:

  • 1)去掉当前价格这一列中的 '¥' 符号,转换成数值格式。
  • 2) 星级列转换成数字格式,取值范围为{0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5}。例如width:90%先转换为0.9,然后以最高星分数5乘以0.9最终得到4.5。
  • 3)对于评论数这一列直接提取数值。
  • 4)出版信息分为三列分别是作者、出版日期、出版社。
  • 5)将原始数据中的书名拆分为为书名和简介两列。

2.提取价格数值

首先我们处理价格、星级、评论数,这几个比较简单,对于价格最主要的目的是提取数据中的数值,但真实数据除了数值还包含其他的内容,我们可以使用正则匹配将数值提取出来。

正则表达式是一种按照特定规则搜索文本的方法。在正则表达式中\d表示数字,+表示匹配前一个字符1次或无限次,常见的正则表达式符号含义见下表所示。

在Python中,re 包实现了正则表达式的匹配,常用的 search 函数能够完成匹配。下面我们编写 get_numers 函数用来提取一个字符串中的数值。

代码语言:javascript
复制
import re #导入 re 包
def get_numers(x):
    regex_num = "\d{1,4}\.{0,1}\d{0,2}"  #编写匹配数字的正则表达式
    return float(re.search(regex_num,x)[0]) # 调用 re.search 函数进行匹配

get_numers("¥66.00") 

66.0

使用DataFrame的map方法对当前价格这一列的每一个数据遍历执行,并取代原来的列。

代码语言:javascript
复制
data['当前价格'] = data['当前价格'].map(get_numers)
代码语言:javascript
复制
data.head()

书名

出版信息

当前价格

星级

评论数

0

机器学习 击败AlphaGo的武林秘籍,赢得人机大战的必由之路:人工智能大牛周志华教授巨著...

周志华 /2016-01-01 /清华大学出版社

66

width: 90%;

76149条评论

1

机器学习实战【python基础教程指南,python核心编程实例指导,对wxpython数...

[美]哈林顿 /2013-06-01 /人民邮电出版社

46.3

width: 90%;

25256条评论

2

机器学习实战:基于Scikit-Learn和TensorFlow 被称为机器学习图书*强的...

(法)奥雷利安・杰龙(Aurélien Géron) /2018-08-27 /机械工业出版社

83.3

width: 90%;

5759条评论

3

机器学习理论导引

周志华 王魏 高尉 张利军 /2020-05-30 /机械工业出版社

62.3

width: 100%;

783条评论

4

机器学习――原理、算法与应用 全书深入浅出,兼具广度与深度,帮助读者真正掌握机器学习、深度...

雷明 /2019-09-01 /清华大学出版社

39.6

width: 90%;

1184条评论

代码语言:javascript
复制
data['当前价格'].sample(10)

495 53.40 92 54.50 535 49.16 581 81.20 325 69.10 473 69.00 547 55.31 587 44.60 225 46.60 211 68.80 Name: 当前价格, dtype: float64

可以看出价格这一列的数值全部提取出来了。

3.提取评论数

由于评论是也是提取数值,因此对于评论数使用同样的方法处理,具体如下。

代码语言:javascript
复制
data['评论数'] = data['评论数'].map(get_numers)
data.head()

书名

出版信息

当前价格

星级

评论数

0

机器学习 击败AlphaGo的武林秘籍,赢得人机大战的必由之路:人工智能大牛周志华教授巨著...

周志华 /2016-01-01 /清华大学出版社

66

width: 90%;

76149

1

机器学习实战【python基础教程指南,python核心编程实例指导,对wxpython数...

[美]哈林顿 /2013-06-01 /人民邮电出版社

46.3

width: 90%;

25256

2

机器学习实战:基于Scikit-Learn和TensorFlow 被称为机器学习图书*强的...

(法)奥雷利安・杰龙(Aurélien Géron) /2018-08-27 /机械工业出版社

83.3

width: 90%;

5759

3

机器学习理论导引

周志华 王魏 高尉 张利军 /2020-05-30 /机械工业出版社

62.3

width: 100%;

783

4

机器学习――原理、算法与应用 全书深入浅出,兼具广度与深度,帮助读者真正掌握机器学习、深度...

雷明 /2019-09-01 /清华大学出版社

39.6

width: 90%;

1184

代码语言:javascript
复制
data['评论数'].sample(10)

87 143.0 204 834.0 392 0.0 440 0.0 378 0.0 142 1677.0 246 1.0 102 323.0 186 740.0 347 0.0 Name: 评论数, dtype: float64

可以看到评论数这一列的数值也成功提取出来了,不过它是float类型,我们需要将其转换成int类型。

代码语言:javascript
复制
data["评论数"] = data["评论数"].astype("int")
data["评论数"] .head()

0 76149 1 25256 2 5759 3 783 4 1184 Name: 评论数, dtype: int64

4.转换星级

对于星级,首先要提取出数值,然后对数值进行计算,计算方法为用提取后的数值除以20,就得到最终的星级。对应关系如下表:

原始数据

数值

星级

width: 0%;

0

0

width: 10%;

10

0.5

width: 20%;

20

1

width: 30%;

30

1.5

width: 40%;

40

2

width: 50%;

50

2.5

width: 60%;

60

3

width: 70%;

70

3.5

width: 80%;

80

4

width: 90%;

90

4.5

width: 100%;

100

5

代码语言:javascript
复制
data['星级'] = data['星级'].map(get_numers)/20
data.head()

书名

出版信息

当前价格

星级

评论数

0

机器学习 击败AlphaGo的武林秘籍,赢得人机大战的必由之路:人工智能大牛周志华教授巨著...

周志华 /2016-01-01 /清华大学出版社

66

4.5

76149

1

机器学习实战【python基础教程指南,python核心编程实例指导,对wxpython数...

[美]哈林顿 /2013-06-01 /人民邮电出版社

46.3

4.5

25256

2

机器学习实战:基于Scikit-Learn和TensorFlow 被称为机器学习图书*强的...

(法)奥雷利安・杰龙(Aurélien Géron) /2018-08-27 /机械工业出版社

83.3

4.5

5759

3

机器学习理论导引

周志华 王魏 高尉 张利军 /2020-05-30 /机械工业出版社

62.3

5.0

783

4

机器学习――原理、算法与应用 全书深入浅出,兼具广度与深度,帮助读者真正掌握机器学习、深度...

雷明 /2019-09-01 /清华大学出版社

39.6

4.5

1184

代码语言:javascript
复制
data.sample(10)

书名

出版信息

当前价格

星级

评论数

587

Python+Spark 2.0+Hadoop机器学习与大数据实战 浅显易懂的原理介绍加上...

林大贵 /2018-01-01 /清华大学出版社

44.6

4.0

1258

364

机器学习系统设计:Python语言实现 [美] 戴维・朱利安(David Julian)机...

[美] 戴维・朱利安(David Julian) /2017-06-01 /机械工业出版社

59.25

0 .0

0

430

【新华书店】机器学习实战 [美] Peter Harrington 著,李锐,*,曲亚东,...

[美] Peter Harrington 著,李锐,李鹏, /2013-06-01 /人民...

63.37

0.0

0

370

机器学习与R语言(原书第2版),机械工业出版社【新华书店全新正品】 『新华书店闪电发货!限...

(美)布雷特・兰茨(Brett Lantz) /2017-03-01 /机械工业出版社

61.4

0

0

513

精通机器学习 基于R 第2版 考瑞・莱斯米斯特尔 人民邮电出版社 978711547778...

[美]考瑞・莱斯米斯特尔 /2018-03-01 /人民邮电出版社

49

0 .0

2

208

Python大数据与机器学习实战 算法多、代码多、注释多、案例多,凝聚作者十余年开发和培训...

谢彦 /2020-04-01 /电子工业出版社

59.5

5 .0

104

176

Python机器学习 Python机器学习实战教程 人工智能图书 Python程序员进阶图...

[印]阿布舍克・维贾亚瓦吉亚(Abhishek Vijayvargia) /2019-02-...

35.2

5.0

342

579

同济博士论丛――基于机器学习的蛋白质相互作用与功能预测

邓磊/关佶红 /2018-05-16 /同济大学出版社

58.4

0

15

101

机器学习算法框架实战:Java和Python实现 以一个自研机器学习算法框架的构建为主线,...

麦嘉铭 /2020-07-16 /机械工业出版社

47.6

0.0

114

452

机器学习与R语言,机械工业出版社, Brett Lantz 著,李洪成,许金炜,李舰 译 ...

(美)兰兹 著,李洪成,许金炜,李舰 译 /2015-03-01 /机械工业出版社

52

0.0

0

5.获取出版信息

接下来我们处理出版信息这一列,从原始数据中可以看到,这一列主要包含三个信息,分别是作者、出版日期、出版社。它们以/分隔,并且存放在一个数据单元中,因此我们将它们分别取出,然后单独存为三列。

5.1 提取作者

从原始数据中可以看出以/分隔的第一个数据是作者,因此我们可以直接提取。 使用字符串的split方法可以对字符串按照特定字符分割,并且分割后是列表形式,例如:

代码语言:javascript
复制
test = '周志华/2016-01-01/清华大学出版社'
test.split('/')

['周志华', '2016-01-01', '清华大学出版社']

出版信息这一列的每一个数据按照/分隔后取第一个数据就是作者,提取后我们将它保存在作者这一列。

代码语言:javascript
复制
data['作者'] = data['出版信息'].map(lambda x:x.split('/')[0])
代码语言:javascript
复制
data.head()

书名

出版信息

当前价格

星级

评论数

0

机器学习 击败AlphaGo的武林秘籍,赢得人机大战的必由之路:人工智能大牛周志华教授巨著...

周志华 /2016-01-01 /清华大学出版社

66

4.5

76149

1

机器学习实战【python基础教程指南,python核心编程实例指导,对wxpython数...

[美]哈林顿 /2013-06-01 /人民邮电出版社

46.3

4.5

25256

2

机器学习实战:基于Scikit-Learn和TensorFlow 被称为机器学习图书*强的...

(法)奥雷利安・杰龙(Aurélien Géron) /2018-08-27 /机械工业出版社

83.3

4.5

5759

3

机器学习理论导引

周志华 王魏 高尉 张利军 /2020-05-30 /机械工业出版社

62.3

5

783

4

机器学习――原理、算法与应用 全书深入浅出,兼具广度与深度,帮助读者真正掌握机器学习、深度...

雷明 /2019-09-01 /清华大学出版社

39.6

4.5

1184

可以看到作者已经提取出来。

5.2提取出版社

采样正则表达式匹配出版社信息,正则表达式为 (\S{1,10}出版社) 。下面我们实现 get_publisher 函数,从出版信息列找那个提取出版社信息。

代码语言:javascript
复制
def get_publisher(x):
    regex_pub = "/(\S{1,10}出版社)"
    pub_match_result = re.search(regex_pub,x)
    if pub_match_result != None:
        return pub_match_result[1].strip()
    else:
        return ""
    
get_publisher("周志华王魏高尉张利军/2020-05-30/机械工业出版社")

'机械工业出版社'

在数据中新增 出版社 一列。

代码语言:javascript
复制
data['出版社'] = data['出版信息'].map(get_publisher)
代码语言:javascript
复制
data['出版社'].sample(10)

188 机械工业出版社 83 清华大学出版社 534 人民邮电出版社 115 人民邮电出版社 108 电子工业出版社 308 电子工业出版社 436 电子工业出版社 229 清华大学出版社 233 清华大学出版社 197 人民邮电出版社 Name: 出版社, dtype: object

如上所示,我们成功地提取了每个数据的出版社。

5.3提取出版日期

出版日期的格式为 YYYY-MM-DD ,对应的正则表达式为 (\d{4}-\d{2}-\d{2})

代码语言:javascript
复制
def get_pubdate(x):
    regex_date = "/(\d{4}-\d{2}-\d{2})"
    pubdate_match_result = re.search(regex_date,x)
    if pubdate_match_result != None:
        return pubdate_match_result[1].strip()
    else:
        return ""
    
get_pubdate("周志华王魏高尉张利军/2020-05-30/机械工业出版社")

'2020-05-30'

新增 出版日期 列,并借助 pd.to_datetime 方法将字符串格式的时间转换成时间格式。

代码语言:javascript
复制
data['出版日期'] = pd.to_datetime( data['出版信息'].map(get_pubdate))
代码语言:javascript
复制
data['出版日期'] .sample(10)

13 2015-04-01 228 2020-06-01 230 2018-01-01 504 2017-07-01 8 2019-08-12 490 2020-06-25 148 2018-05-01 358 2018-01-01 370 2017-03-01 593 NaT Name: 出版日期, dtype: datetime64[ns]

如上所示,我们已经成功提取作者、出版社、出版日期,因此原始的出版信息这一列可以删除。

代码语言:javascript
复制
del data["出版信息"]
data.head()

书名

当前价格

星级

评论数

作者

出版社

出版日期

0

机器学习 击败AlphaGo的武林秘籍,赢得人机大战的必由之路:人工智能大牛周志华教授巨著...

66

4.5

76149

周志华

清华大学出版社

2016/1/1

1

机器学习实战【python基础教程指南,python核心编程实例指导,对wxpython数...

46.3

4.5

25256

[美]哈林顿

人民邮电出版社

2013/6/1

2

机器学习实战:基于Scikit-Learn和TensorFlow 被称为机器学习图书*强的...

83.3

4.5

5759

(法)奥雷利安・杰龙(Aurélien Géron)

机械工业出版社

2018/8/27

3

机器学习理论导引

62.3

5

783

周志华 王魏 高尉 张利军

机械工业出版社

2020/5/30

4

机器学习――原理、算法与应用 全书深入浅出,兼具广度与深度,帮助读者真正掌握机器学习、深度...

39.6

4.5

1184

雷明

清华大学出版社

2019/9/1

观察数据后发现,此时已经没有出版信息这一列,说明我们已经删除成功,现在只剩下书名这一列需要处理。

6.提取书名和书简介

书名信息中混合这书的简介信息,观察原始数据中书名一列,能找到一些规律。除去最开始可能包含的一些包含在 【】[] 中间的标注信息,剩余的内容中书名和其他内容基本是由空格隔开的。所以我们首先将【】[] 去掉,然后按照空格分隔字符串,第一个内容便是书名。实现方法如下:

代码语言:javascript
复制
def get_book_name(x):
    x = x.strip()
    x = re.sub("【.*?】","",x)
    x = re.sub("\[.*?\]","",x)
    return x.split(" ")[0]
get_book_name("【全2册】机器学习 周志华著+机器学习与应用 雷明著 全新正版 2本书")  

'机器学习'

代码语言:javascript
复制
data["书名称"] = data["书名"].map(get_book_name)
代码语言:javascript
复制
data.sample(10)

书名

当前价格

星级

评论数

作者

出版社

出版日期

书名称

33

白话机器学习算法 机器学习算法工程师入门教程 算法及数据科学入门图书 涵盖回归分析 神经网...

34.5

4

402

[新加坡] 黄莉婷 苏川集

人民邮电出版社

2019/2/1

白话机器学习算法

425

机器学习实战+美团机器学习实践 人工智能机器学习经典教程基于Python代码

149.85

0

0

人民邮电出版社

2014/5/1

机器学习实战+美团机器学习实践

288

【全2册】图解深度学习+图解机器学习

81

0

12

暂无

人民邮电出版社

2018/5/1

图解深度学习+图解机器学习

545

实用机器学习 苏尼拉・格拉普蒂(SunilaGollapudi)著,张世武 机械工业出版社...

73

0

0

苏尼拉・格拉普蒂(SunilaGollapudi)著,张世武

机械工业出版社

2018/6/1

实用机器学习

1

机器学习实战【python基础教程指南,python核心编程实例指导,对wxpython数...

46.3

4.5

25256

[美]哈林顿

人民邮电出版社

2013/6/1

机器学习实战人工智能开发图书

250

数据产品经理高效学习手册 产品设计、技术常识与机器学习 讲述产品经理的数据产品设计思维框架...

29.5

5

144

张威

人民邮电出版社

2020/4/1

数据产品经理高效学习手册

426

【新华书店rt】机器学习算法,[意]朱塞佩・博纳科尔索(Giuseppe Bonaccor...

63.42

0

0

[意]朱塞佩・博纳科尔索(Giuseppe Bonaccor

机械工业出版社

2018/5/1

机器学习算法,朱塞佩・博纳科尔索(Giuseppe

249

AI前沿深度强化学习与分布式机器学习 套装共2册 微软亚洲研究院机器学习研究团队所著,刘铁...

129.7

0

0

刘驰,刘铁岩,等

机械工业出版社

2020/8/21

AI前沿深度强化学习与分布式机器学习

401

机器学习与R语言 (美)布雷特・兰茨(Brett Lantz)机械工业出版社 因书籍批量采...

69.3

0

0

(美)布雷特・兰茨(Brett Lantz)

机械工业出版社

2017/3/1

机器学习与R语言

176

Python机器学习 Python机器学习实战教程 人工智能图书 Python程序员进阶图...

35.2

5

342

[印]阿布舍克・维贾亚瓦吉亚(Abhishek Vijayvargia)

人民邮电出版社

2019/2/1

Python机器学习

得到书名后,剩余的内容便是简介。

代码语言:javascript
复制
data["简介"] = data["书名"].map(lambda x:x.replace(get_book_name(x),""))
代码语言:javascript
复制
data.sample(5)

书名

当前价格

星级

评论数

作者

出版社

出版日期

书名称

简介

0

机器学习 击败AlphaGo的武林秘籍,赢得人机大战的必由之路:人工智能大牛周志华教授巨著...

66

4.5

76149

周志华

清华大学出版社

2016/1/1

机器学习

击败AlphaGo的武林秘籍,赢得人机大战的必由之路:人工智能大牛周志华教授巨著,全面揭...

1

机器学习实战【python基础教程指南,python核心编程实例指导,对wxpython数...

46.3

4.5

25256

[美]哈林顿

人民邮电出版社

2013/6/1

机器学习实战人工智能开发图书

机器学习实战【python基础教程指南,python核心编程实例指导,对wxpython数...

2

机器学习实战:基于Scikit-Learn和TensorFlow 被称为机器学习图书*强的...

83.3

4.5

5759

(法)奥雷利安・杰龙(Aurélien Géron)

机械工业出版社

2018/8/27

机器学习实战:基于Scikit-Learn和TensorFlow

被称为机器学习图书*强的存在!前谷歌工程师撰写,“美亚”人工智能图书畅销榜首图书!从实践...

3

机器学习理论导引

62.3

5

783

周志华 王魏 高尉 张利军

机械工业出版社

2020/5/30

机器学习理论导引

4

机器学习――原理、算法与应用 全书深入浅出,兼具广度与深度,帮助读者真正掌握机器学习、深度...

39.6

4.5

1184

雷明

清华大学出版社

2019/9/1

机器学习――原理、算法与应用

全书深入浅出,兼具广度与深度,帮助读者真正掌握机器学习、深度学习的原理与应用

提取出书名称和简介信息后,我们可以将数据中的原始书名列删除。

代码语言:javascript
复制
del data["书名"]
data.head()

当前价格

星级

评论数

作者

出版社

出版日期

书名称

简介

0

66

4.5

76149

周志华

清华大学出版社

2016/1/1

机器学习

击败AlphaGo的武林秘籍,赢得人机大战的必由之路:人工智能大牛周志华教授巨著,全面揭...

1

46.3

4.5

25256

[美]哈林顿

人民邮电出版社

2013/6/1

机器学习实战人工智能开发图书

机器学习实战【python基础教程指南,python核心编程实例指导,对wxpython数...

2

83.3

4.5

5759

(法)奥雷利安・杰龙(Aurélien Géron)

机械工业出版社

2018/8/27

机器学习实战:基于Scikit-Learn和TensorFlow

被称为机器学习图书*强的存在!前谷歌工程师撰写,“美亚”人工智能图书畅销榜首图书!从实践...

3

62.3

5

783

周志华 王魏 高尉 张利军

机械工业出版社

2020/5/30

机器学习理论导引

4

39.6

4.5

1184

雷明

清华大学出版社

2019/9/1

机器学习――原理、算法与应用

全书深入浅出,兼具广度与深度,帮助读者真正掌握机器学习、深度学习的原理与应用

最后,将清洗完成的数据保存到 CSV 文件中。

代码语言:javascript
复制
data.to_csv("./input/books_cleaned.csv", index="None", sep="\t",encoding="utf8")

7.总结

由于数据采集时获得的数据可能并不规范,不能直接用来分析,因此需要做数据清洗。本案例对爬虫抓取的书籍数据进行清洗,主要使用正则匹配和自定义的方法实现。首先提取了价格、评论以及星级的数值;然后对于出版信息中的数据分别获取书籍的作者、出版社和出版日期;最后基于原始数据的书名,进一步提取书的简介和名称,相较于前几步来说,提取书简介和书名可能相对复杂一些,当然在实际数据清洗时可能有多种方法,本案例仅提供其中一种方法供大家参考。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据科学人工智能 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.读取数据
  • 2.提取价格数值
  • 3.提取评论数
  • 4.转换星级
  • 5.获取出版信息
    • 5.1 提取作者
      • 5.2提取出版社
        • 5.3提取出版日期
        • 6.提取书名和书简介
        • 7.总结
        相关产品与服务
        联邦学习
        联邦学习(Federated Learning,FELE)是一种打破数据孤岛、释放 AI 应用潜能的分布式机器学习技术,能够让联邦学习各参与方在不披露底层数据和底层数据加密(混淆)形态的前提下,通过交换加密的机器学习中间结果实现联合建模。该产品兼顾AI应用与隐私保护,开放合作,协同性高,充分释放大数据生产力,广泛适用于金融、消费互联网等行业的业务创新场景。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档