Python3.X网络爬虫学习(六)
Scrapy的中文输出与存储
一、什么是json
json是一种在编程中常用的数据格式,属于一种轻量级的数据交换格式。json数据常见的基本存储结构有数组和对象两种。
数组结构的存储方式:
["苹果","梨子","葡萄"]
这种数组结构的存储方式,对应的值是通过索引的方式进行获取的,对应关系为:0->"苹果",1->"梨子",2->"葡萄"。
对象结构的存储方式:
对象结构的json文件中的数据一般通过{}括起来,里面的数据一般是键值对的形式,键与值之间通过“:”分开,各项数据间通过“,”分开,基本格式为:“{key1:value1,key2:value2...}”,比如:
{"姓名":"hzc","头发":"黑色","皮肤":"黄色"}
Python对象->json对象
import json
dic = {"name":"hzc","sex":"man"}
j1 = json.dumps(dic)
print(dic)
print(j1)
print(type(dic))
print(type(j1))
代码执行结果:
可以看出,json.dumps()函数,它用于将 Python对象编码成json字符串。
下面列出几个常用的参数:
Skipkeys:默认值是False,如果dict的keys内的数据不是python的基本类型(比如中文),设置为False时,就会报TypeError的错误。此时设置成True,则会跳过这类key。
dic = {"name":"hzc",(1,3):"man"} j1 = json.dumps(dic) print(j1)# TypeError: keys must be a stringdic = {"name":"hzc",(1,3):"man"} j2 = json.dumps(dic,skipkeys=True) print(j2) # {"name": "hzc"}
ensure_ascii:默认值True,如果dict内含有non-ASCII的字符,则会类似\uXXXX的显示数据,设置成False后,就能正常显示。
dic = {"名字":"hzc","性别":"man"} j3 = json.dumps(dic) print(j3) # {"\u540d\u5b57": "hzc", "\u6027\u522b": "man"}dic = {"名字":"hzc","性别":"man"} j4 = json.dumps(dic,ensure_ascii = False) print(j4) # {"名字": "hzc", "性别": "man"}
indent:可以设置json的缩进格式。
dic = {'b':'I', 'a':123, 'c':'100'} j5 = json.dumps(dic, sort_keys = True, indent = 4) print (j5) # { # "a": 123, # "b": "I", # "c": "100" # }
separators:可以设置json对象的分隔符,实际上是(item_separator, dict_separator)的一个元组,默认的就是(',',':');这表示dictionary内keys之间用“,”隔开,而KEY和value之间用“:”隔开。
dic = {'b':'I', 'a':123, 'c':'100'} j6 = json.dumps(dic, sort_keys = True, separators = ('$','@')) print (j6) # {"a"@123$"b"@"I"$"c"@"100"}
encoding:默认是UTF-8,设置json数据的编码方式。
sort_keys:将数据根据keys的值进行排序。
dic = {'b':'I', 'a':123, 'c':'100'} j7 = json.dumps(dic, sort_keys = True) print (j7) # 输出为:{"a": 123, "b": "I", "c": "100"}
json对象->Python对象
import json
dic = {"name":"hzc","sex":"man"}
j1 = json.dumps(dic)
print(j1)
# {"name": "hzc", "sex": "man"}decode1 = json.loads(j1)
print(decode1)
# {'name': 'hzc', 'sex': 'man'}
json.loads()函数用于将json对象解码为python对象。
存取json文件
如果要将python对象存到json格式的文件中,此时不再用dumps,而是要用dump:
import json
dic_info = {'name':'hzc', 'sex':'男', 'age':21}
file = open ('E://test.json', 'w', encoding='utf-8')
json.dump(dic_info, file,ensure_ascii=False)
file.close()
如果要从json文件中读取内容存入python对象,不再用loads而是要用load:
import json
file = open ('E://test.json', 'r', encoding='utf-8')
hzc = json.load(file)
file.close()
print(hzc)
print(type(hzc))
二、Scrapy的中文存储
下面,我们来学习如何将Scrapy爬虫爬取到的含有中文的数据,存储为json格式的文件。
在这里我们主要进行的是爬取数据的后续处理,所以主要编写与修改的是一个项目中的pipelines文件。
在这里直接给出spiders文件夹下的爬虫文件:
import scrapy
from hzc.items import HzcItem
class MySpider(scrapy.Spider):name = "hzc"start_urls = ['http://www.baidu.com']def parse(self, response):item = HzcItem()item["title"] = response.xpath("/html/head/title/text()")[0].extract()print(item["title"])yield item
该爬虫只是一个简单的获取百度网页title的程序,因为重点在于pipelines,所以在此不另讲爬虫。
打开项目对应文件夹中的pipelines文件,然后修改为如下所示,关键部分已给出注释:
import codecs
import json
class HzcPipeline(object):def __init__(self):self.file = codecs.open("E://hzc.json","w",encoding="utf-8")def process_item(self, item, spider):#通过dic(item)将item转化成一个字典#然后通过json模块下的dumps()处理字典数据line = json.dumps(dict(item), ensure_ascii=False) + "\n"#将line写入到文件中self.file.write(line)return itemdef spider_closed(self, spider):self.file.close()
在项目路径下通过执行命令行:scrapy crawl 项目名 得到生成的json文件:
注:在进行json.dumps()序列化的时候,中文信息会默认使用ASCII编码,所以需要把ensure_ascii参数设置为False,不使ASCII进行编码,这样就可以处理中文信息。
Python3.X网络爬虫学习(六)相关推荐
- python网络爬虫学习(六)利用Pyspider+Phantomjs爬取淘宝模特图片
本篇博文在编写时参考了http://cuiqingcai.com/2652.html,向作者表示感谢 一.新的问题与工具 平时在淘宝上剁手的时候,总是会看到各种各样的模特.由于自己就读于一所男女比例三 ...
- java jsoup 网络爬虫 学习例子(六)京东和当当商品比价
java jsoup 网络爬虫 学习例子(六)京东和当当商品比价 package com.iteye.injavawetrust.jdvsdd;import java.util.List;/*** * ...
- python网络爬虫学习资料
第一:Python爬虫学习系列教程(来源于某博主:http://cuiqingcai.com/1052.html) Python版本:2.7 整体目录: 一.爬虫入门 1. Python爬虫入门一之综 ...
- 2022年网络我的网络爬虫学习心得
2022年网络我的网络爬虫学习心得 写在前面 一.心得 二.爬虫项目中所需要的pip模块 1.requests 2.bs4 3.Pandas 4.selenium 5.Scrapy 6.gerapy_ ...
- python网络爬虫学习笔记(6)动态网页抓取(一)知识
文章目录 网络爬虫学习笔记(2) 1 资料 2 笔记 2-1 动态抓取概述 2-2 通过浏览器审查元素解析真实网页地址 2-3 网页URL地址的规律 2-4 json库 2-5 通过Selenium模 ...
- java jsoup 网络爬虫 学习例子(八)京东和淘宝商品比价 PhantomJS
java jsoup 网络爬虫 学习例子(八)京东和淘宝商品比价 PhantomJS /** filename getHtml.js* phantomjs.exe 2.0.0* author InJa ...
- 关于使用Python3进行网络爬虫的字符问题
使用Python3进行网络爬虫的时候,对于某一些网页,使用utf-8编码是没有问题的.比如: import urllib.request url = "https://www.baidu.c ...
- java jsoup 网络爬虫 学习例子(七)京东和淘宝商品比价 htmlunit
java jsoup 网络爬虫 学习例子(七)京东和淘宝商品比价 htmlunit package com.iteye.injavawetrust.pricecheck;import java.uti ...
- 网络爬虫学习第一弹:urllib库使用
小道之前有学过一点爬虫,但是面对越来越严峻的就业形势,为了提高自身竞争力,决定系统的学习一下爬虫.用的是崔庆才大大的书.写博作为自己的学习笔记,方便以后复习.欢迎高人补充赐教!小道感激不尽! 网络爬虫 ...
最新文章
- Spring对事务管理的支持的发展历程(基础篇)
- GoEasy导入依赖的时候报错,包用不了,maven导包
- cocos2dx游戏开发简单入门视频教程 (cocos2d-x)- 第3天
- 回顾声智科技助力联想智能音箱MINI亮相CES Asia
- HBase的java操作,最新API。(查询指定行、列、插入数据等)
- Dell’Oro 5年期数据中心报告预测25G/100G端口速率市场快速上升
- bin文件用cad打开_bin文件 打开方法_win7如何打开bin 格式的文件图文步骤
- pdf转word文档保留原格式 本地离线软件
- 极速版RPS选股,一秒出结果的方案是如何实现的!股票量化分析工具QTYX-V2.5.3...
- Office server webs app 集成(JAVA)
- 如何调用common.js
- View基础知识---MotionEvent和TouchSlop
- Python面向对象06/反射/双下方法
- 为什么英语是程序员的竞争力?
- win10安装xshell免费版
- 人工智能细分领域龙头企业排行榜单
- 设计幸运大转盘h5小游戏总结
- python怎么计算相关系数_Python三种方法计算皮尔逊相关系数
- 解决 0X000000该内存不能为read 的方法
- 洛谷 P1423 小玉在游泳 AC