array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 数据存储之文件存储 - 爱码网

爬取知乎上的热门话题,获取话题的问题、作者、答案,然后保存在TXT文本中

import requests
from pyquery import PyQuery

url = 'https://www.zhihu.com/explore'
headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) '
                  'Chrome/58.0.3029.110 Safari/537.36'
}
html = requests.get(url, headers=headers).text
doc = PyQuery(html)

# 选择class="explore-tab"的内部class="feed-item"的所有节点,再遍历每一个元素(每个元素就是一个热门话题)
items = doc('.explore-tab .feed-item').items()

for item in items:
    # 找到'h2'节点,获取知乎上热门话题的问题
    question = item.find('h2').text()

    # 选择class="author-link-line"的所有节点,获取文本值
    author = item.find('.author-link-line').text()

    # 找到属性值为content的节点,获取其内部文本值,再通过PyQuery()方法初始化获取文本信息
    answer = PyQuery(item.find('.content').html()).text()

    file = open('explore.txt', 'a', encoding='utf-8')
    file.write('\n'.join([question, author, answer]))
    file.write('\n' + '=' * 50 + '\n')
    file.close()

运行结果生成一个TXT文件

数据存储之文件存储

JSON 文件存储

读取 JSON

调用JSON库的loads()方法将JSON文本字符串转为JSON对象

import json

# 注意:JSON数据需要用双引号来包围,不能用单引号。
string = '''
[
    {
        "name": "Lee Hua", 
        "gender": "male", 
        "birthday": "1997-10-25"
    }, 
    {
        "name": "Li Hua", 
        "gender": "female", 
        "birthday": "1998-10-25"
    }
]
'''

print(type(string), string, sep='\n')

data = json.loads(string)
print(type(data), data, sep='\n')
# 输出:
<class 'str'>

[
    {
        "name": "Lee Hua", 
        "gender": "male", 
        "birthday": "1997-10-25"
    }, 
    {
        "name": "Li Hua", 
        "gender": "female", 
        "birthday": "1998-10-25"
    }
]

<class 'list'>
[{'name': 'Lee Hua', 'gender': 'male', 'birthday': '1997-10-25'}, {'name': 'Li Hua', 'gender': 'female', 'birthday': '1998-10-25'}]

输出 JSON

通过dumps()方法将JSON对象转为文本字符串。

import json

data = [
    {
        "name": "Lee Hua", 
        "gender": "male", 
        "birthday": "1997-10-25"
    }, 
    {
        "name": "李 华",
        "gender": "男",
        "birthday": "1998-10-25"
    }
]


with open('data.json', 'w') as file:
    file.write(json.dumps(data, indent=2))


# 如果不存在data.json文件,运行结果则生成一个名为data.json的文件

# data.json文件内写入的内容:
[
  {
    "name": "Lee Hua",
    "gender": "male",
    "birthday": "1997-10-25"
  },
  {
    "name": "\u674e \u534e",
    "gender": "\u7537",
    "birthday": "1998-10-25"
  }
]


# file.write(json.dumps(data, indent=2))中, indent参数代表缩进字符个数。
# 如果想要再写入的data.json文件中显示写入的中文,那么file.write(json.dumps(data, indent=2, ensure_ascii=False))即可

CSV 文件存储

csv.writer()和csv.DictWriter()方法

import csv

with open('data.csv', 'w') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(['id', 'name', 'age'])
    writer.writerow(['10001', 'Li Hua', '18'])
    writer.writerow(['10002', 'Lee Hua', '19'])
    writer.writerow(['10003', 'liyihua', '20'])
# 上面的内容也可以这样写入
#    writer = csv.writer(csvfile)
#    writer.writerow(['id', 'name', 'age'])
#    writer.writerow(
#        [
#            ['10001', 'Li Hua', '18'],
#            ['10002', 'Lee Hua', '19'],
#            ['10003', 'liyihua', '20']
#        ]
#    )

# 上面内容还可以这样写入
#    field_names = ['id', 'name', 'age']
#    writer = csv.DictWriter(csvfile, fieldnames=field_names)
#    writer.writerow({'id': '10001', 'name': 'Li Hua', 'age': '18'})
#    writer.writerow({'id': '10002', 'name': 'Lee Hua', 'age': '19'})
#    writer.writerow({'id': '10003', 'name': 'liyihua', 'age': '20'})



# 运行结果:生成一个data.csv文件,文件内容如下
id,name,age
10001,Li Hua,18
10002,Lee Hua,19
10003,liyihua,20
# 想修改行与列之间的分隔符,可以传入参数delimiter参数,writer = csv.writer(csvfile, delimiter='分隔符')
# 如果想要追加写入的话,可以修改文件的打开模式,即将open()函数的第二个参数改成a。如:open('file', 'a')
# 写入时有时候会遇到编码错误问题,此时只要给open()函数指定编码形式就可以了。如:open('file', 'r', encoding='utf-8')

相关文章: