Python爬虫(七)数据处理方法之JSON

2019-06-08  本文已影响0人  咸甜怪

什么是JSON

JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation),是轻量级的文本数据交换格式,且具有自我描述性,更易理解。
JSON看起来像python类型(列表,字典)的字符串。

数据处理

在之前的文章中,我们说到了怎么用response的方法,获取到网页正确解码后的字符串。如果还有不懂的,可以先阅读Python爬虫(三)Requests库。接下来以有道翻译为例子,说说怎么通过网页解码后的字符串,提取到翻译结果。

import json
json.loads(json字符串)

再结合上述有道翻译的例子,得到字典类型的返回结果,并提取出来翻译结果。

import requests
import json

url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36'}
data = {'i': '人生苦短,我用python',
        'from': 'AUTO',
        'to': 'AUTO',
        'smartresult': 'dict',
        'client': 'fanyideskweb',
        'salt': '15598805838805',
        'sign': '601e9410133b355529e58d23a6c60578',
        'ts': '1559880583880',
        'bv': '565657d9b2f836d2c4c3a1fd81d7b3c3;',
        'doctype': 'json',
        'version': '2.1',
        'keyfrom': 'fanyi.web',
        'action': 'FY_BY_CLICKBUTTION'
        }
response = requests.post(url, data=data, headers=headers)
html_str = response.content.decode()
#将字符串转换成字典
dict_json = json.loads(html_str)
#打印转换之后的数据以及数据类型
print(dict_json)
print(type(dict_json))
#获取翻译结果
ret = dict_json['translateResult'][0][0]['src']
print('翻译结果是:',ret)
执行结果如下: 获取翻译结果.png
import json
json.dumps(字典)

将上述例子的dict_json换成str字符串,再写入文本中。

import requests
import json

url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36'}
data = {'i': '人生苦短,我用python',
        'from': 'AUTO',
        'to': 'AUTO',
        'smartresult': 'dict',
        'client': 'fanyideskweb',
        'salt': '15598805838805',
        'sign': '601e9410133b355529e58d23a6c60578',
        'ts': '1559880583880',
        'bv': '565657d9b2f836d2c4c3a1fd81d7b3c3;',
        'doctype': 'json',
        'version': '2.1',
        'keyfrom': 'fanyi.web',
        'action': 'FY_BY_CLICKBUTTION'
        }
response = requests.post(url, data=data, headers=headers)
#将字符串转换成字典
dict_json = json.loads(html_str)
#将字典转换成字符串并写入fnayi.txt文件中
fanyi_str = json.dumps(dict_json)
with open('fanyi.txt', 'w') as f:
    f.write(html_str)

执行完上述的程序,会得到一个fanyi.txt的文件,其结果如下:{"type": "ZH_CN2EN", "errorCode": 0, "elapsedTime": 1, "translateResult": [[{"src": "\u4eba\u751f\u82e6\u77ed\uff0c\u6211\u7528python", "tgt": "Life is too short, I use python"}]]}。这样子的一份文档,中文部分显示的是二进制,且格式非常不利于阅读,这并不是我们想要的结果。好在json.dumps()为我们提供的两个方法,以帮助我们更好阅读文档。
1.ensure_ascii,能够让中文显示成中文;
2.indent,能够让下一行在第一行的基础上空格。
其用法如下:

fanyi_str = json.dumps(dict_json, ensure_ascii=False, indent=2)
with open('fanyi.txt', 'w', encoding='utf-8') as f:
    f.write(fanyi_str)
输出结果如下: 格式化后的输出.png
上一篇下一篇

猜你喜欢

热点阅读