NLP文本采集(JSON XML)
转自up主:跨象成云
处理JSON文件
半结构化数据的处理
csv,txt等成为结构化数据,如果数据集不是行列式,则称其为半结构化数据集,但它也可以转化为结构化数据。通常,我们会遇到以键值对的形式存储或嵌入在标记之间的数据,比如JSON(js对象表示法)和XML(可扩展标记语言)文件,这些是最常用的半结构化数据实例。
JSON
json文件是独立于语言的,这意味着不同的编程语言(例如python java等)均可以有效地处理JSON文件。在Python中,一个名为字典的内置数据结构能够按照原样存储JSON对象。通常,JSON对象中的数据以键值对的形式出现。
JSON对象的数据类型必须是以下任意一种:
NoSQL数据库(如:MongoDB)以JSON对象的形式存储数据,大多数API返回的是JSON对象。
通常,我们在请求URL时得到的响应是JSON对象的形式。未来有效地处理JSON文件,我们需要知道如何解析它。
用python提取json文件中的内容
函数:json.dumps将python对象编码成json字符串,json.loads将已编码的json字符串解码为python对象
-
导入json库 import json
from pprint import pprint
-
加载json文件:json.loads用于解码json数据,该函数返回python字段的数据类型。 data = json.load(open('/ /'))
pprint(data)
JSON | Python |
---|
object | dict | array | list | string | unicode | number(int) | int,long | number(real) | float | true | True | false | False | null | None |
-
访问数据 dt['name'] for dt in data['students']
处理XML文件
xml如果有声明,则必须要放在第一行,包含版本号(正在使用的XML标准的版本)、编码(字符编码类型)、独立性(告诉解析器是否需要用外部信息来解释XML文件中的内容),如下:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
XML文件可以表示为XML树,这个XML树从根元素 (父元素)开始。这个根元素进一步分支到子元素。XML文件的每个元素都是XML树的一个结点。哪些没有子节点的元素是叶结点。
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
用python提取xml文件中的内容
-
导入xml库(三种方法)
- SAX(Simple API for XML):Python标准库包含SAX解析器,SAX用事件驱动模型,通过在解析XML的过程中触发一个个的事件并调用用户定义的回调函数来处理XML文件。
- DOM(Document Object Model)将XML数据在内存中解析成一个树,通过对树的操作来操作XML。
- ElementTree(元素树):轻量级DOM,具有方便友好的API。代码可用性好,速度快,消耗内存少。
import xml.ElementTree as ET
-
将XML文档解析为元素树:使用parse函数,对数据进行解析并加载。 tree = ET.parse('/ /')
-
获取根节点 root = tree.getroot()
print(root.tag)
-
访问数据:例如,使用findall查找record标签,然后分别使用find查找员工名字name和工作单位company for record in root.findal('record')[:20]:
print(record.find('name').text,"---",record.find('company').text)
-
利用其中的数据求出所有员工薪资总额 sum([int(record.find('salary').text.repace('$','').replace(',','')) for record in root.findall('record')])
|