(完整)爬取数据存储之TXT、JSON、CSV存储
一、文件存储
1. TXT文本存储
代码有不明白的 欢迎来微信公众号“他她自由行”找我,回复任何话都可以 我都会回你哒~
例:知乎发现页面,获得数据存成TXT文本
import requests
from pyquery import PyQuery as pq
url="https://www.zhihu.com/explore"
headers={'User-Agent':'ozilla/5.0 (iPhone; CPU iPhone OS 11_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E5216a QQ/7.5.5.426 V1_IPH_SQ_7.5.5_1_APP_A Pixel/1080 Core/UIWebView Device/Apple(iPhone 8Plus) NetType/WIFI QBWebViewType/1'
}
html=requests.get(url,headers=headers).text
doc=pq(html)
#问题列表
items=doc('.explore-tab .feed-item').items()
for item in items:
question=item.find('h2').text()
author=item.find('.author-link').text()
answer=pq(item.find('.content').html()).text()
with open('zhihu_explore.text','a',encoding='utf-8') as file:
file.write('\n'.join([question,author,answer]))
file.write('\n'+'='*50+'\n')
注意:
- 在用pyquery解析时,一定要找准属性进行匹配;
- 打开文件open()函数第二个参数设置为a,其他值:
r:以只读方式打开文件
w:以写入方式打开文件(覆盖之前文件)
a:以追加方式打开文件(不覆盖之前文件,追加上)
特:后面跟 + :代表以读写方式打开文件
后面跟 b :代表以二进制方式打开文件
3.每次open()打开文件后都要用close()关闭,直接用 with as 语句,会自动关闭文件。
2.JSON文件存储
JSON,是JavaScript对象标记,通过对象和数组的组合来表示数据
对象:数据结构为{key1:value1,key2:value2,...}的键值对结构
数组:数据结构为['Java','javascript','vb',...]的索引结构
(1)读取JSON文件
loads():把数据从JSON文本字符串转为JSON对象
dumps():把数据从JSON对象转为文本字符串
data=json.loads(str) //type(data)是list对象
str=json.dumps(data) //type(str)是字符串
获取属性值:
data[0]['name'] 或
data[0].get('name') //两种方式获取第一个元素的name属性的值;
.get('name',tom) //.get()方式更好:当没有name值时,会报None且可以用用第二个参数设定默认值
读取:
import json
with open('data.json','r') as file:
str=file.read()
data=json.loads(str)
注意:
- JSON的数据需要双引号来包围。
- 在data.json文件中是以字符串存在,读取时要用loads()转成JSON对象来应用,存储时用dumps()把JSON对象存成字符串。
(2)输出JSON,写入文件
with open('data.json','w') as file:
file.write(json.dumps(data,indent=2,ensure_ascii=False)) //indent是缩进个数,ensure_ascii是防止中文被编译成ascii码
3.csv文件存储
csv,叫作逗号分隔值或字符分隔值,以纯文本形式存储表格数据。
(1) 写入
import csv
with open('data.csv','w') as csvfile:
writer=csv.writer(csvfile) //初始化写入对象
writer.writerow(['id','name','age'])
writer.writerow(['10001','Mike','20'])
writer.writerow(['10002','Bob','23'])
writer.writerow(['10003','Jordan','21'])
这样就会生成一个data.csv文件
特:
- writer=csv.writer(csvfile,delimiter=' ') 意味着将列与列间的分隔符,变成空格分隔符
- writer.writerow([['10001','Mike','20'],['10002','BOb','23'],['10003','Jordan','21']])
以二维列表的形式写入 - 字典形式写入:
import csv
with open('data.csv','w') as csvfile:
filename=['id','name','age'] //定义写入名称
writer=csv.DictWriter(csvfile,filename=filename) //初始化一个字典写入对象
writer.writeheader() //写入头信息
writer.writerow({'id':'10001','name':'Mike','age':20})
writer.writerow({'id':'10002','name':'Bob','age':23})
注意:如果name='李明',则要改变编码方式open('data.csv','w',encoding='utf-8') 变成中文编码
(2)读取
(1 利用csv库读取:
import csv
with open('data.csv','r','utf-8') as csvfile:
reader=csv.reader(csvfile)
for row in reader:
print(row)
//按行输出数据
(2 利用pandas读取:
(pandas是数据分析当中非常重要的一个库,在我的数据分析博客中会提及很多次)
import pandas as pd
df=pd.read_csv('data.csv')
print(df)
代码有不明白的 欢迎来微信公众号“他她自由行”找我,回复任何话都可以 我都会回你哒~
(完整)爬取数据存储之TXT、JSON、CSV存储的更多相关文章
- Scrapy持久化存储-爬取数据转义
Scrapy持久化存储 爬虫爬取数据转义问题 使用这种格式,会自动帮我们转义 'insert into wen values(%s,%s)',(item['title'],item['content' ...
- scrapy爬虫事件以及数据保存为txt,json,mysql
今天要爬取的网页是虎嗅网 我们将完成如下几个步骤: 创建一个新的Scrapy工程 定义你所需要要抽取的Item对象 编写一个spider来爬取某个网站并提取出所有的Item对象 编写一个Item Pi ...
- scrapy爬取数据的基本流程及url地址拼接
说明:初学者,整理后方便能及时完善,冗余之处请多提建议,感谢! 了解内容: Scrapy :抓取数据的爬虫框架 异步与非阻塞的区别 异步:指的是整个过程,中间如果是非阻塞的,那就是异步 ...
- Java分布式爬虫Nutch教程——导入Nutch工程,执行完整爬取
Java分布式爬虫Nutch教程--导入Nutch工程,执行完整爬取 by briefcopy · Published 2016年4月25日 · Updated 2016年12月11日 在使用本教程之 ...
- Python使用Scrapy框架爬取数据存入CSV文件(Python爬虫实战4)
1. Scrapy框架 Scrapy是python下实现爬虫功能的框架,能够将数据解析.数据处理.数据存储合为一体功能的爬虫框架. 2. Scrapy安装 1. 安装依赖包 yum install g ...
- 关于js渲染网页时爬取数据的思路和全过程(附源码)
于js渲染网页时爬取数据的思路 首先可以先去用requests库访问url来测试一下能不能拿到数据,如果能拿到那么就是一个普通的网页,如果出现403类的错误代码可以在requests.get()方法里 ...
- 爬取豆瓣电影TOP 250的电影存储到mongodb中
爬取豆瓣电影TOP 250的电影存储到mongodb中 1.创建项目sp1 PS D:\scrapy> scrapy.exe startproject douban 2.创建一个爬虫 PS D: ...
- 【Spider】使用CrawlSpider进行爬虫时,无法爬取数据,运行后很快结束,但没有报错
在学习<python爬虫开发与项目实践>的时候有一个关于CrawlSpider的例子,当我在运行时发现,没有爬取到任何数据,以下是我敲的源代码:import scrapyfrom UseS ...
- python爬取豌豆荚中的详细信息并存储到SQL Server中
买了本书<精通Python网络爬虫>,看完了第6章,我感觉我好像可以干点什么:学的不多,其中的笔记我放到了GitHub上:https://github.com/NSGUF/PythonLe ...
- 如何提升scrapy爬取数据的效率
在配置文件中修改相关参数: 增加并发 默认的scrapy开启的并发线程为32个,可以适当的进行增加,再配置文件中修改CONCURRENT_REQUESTS = 100值为100,并发设置成了为100. ...
随机推荐
- 知物由学 | AI网络安全实战:生成对抗网络
本文由 网易云发布. “知物由学”是网易云易盾打造的一个品牌栏目,词语出自汉·王充<论衡·实知>.人,能力有高下之分,学习才知道事物的道理,而后才有智慧,不去求问就不会知道.“知物由学” ...
- Luogu1438 无聊的数列(单点查询)&&加强版(区间查询)
题目链接:戳我 线段树中差分和前缀和的应用 其实对于加上等差数列的操作我们可以分成这样三步-- update(1,1,n,l,l,k); if(r>l) update(1,1,n,l+1,r,d ...
- linux命令之信息显示与搜索文件命令
1.uname:显示系统信息 该命令用于显示系统相关的信息,比如内核版本号,硬件架构等. 参数 说明 -n(常用) 显示主机名称 -r(常用) 显示内核发行版本号 示例: 1)显示主机名 [root@ ...
- c++实验6 递归
1 利用递归设计此函数. int p(int a,int b) { if(a>=b) ; else ; } //粘贴测试数据及运行结果: //测试数据 int main() { cout < ...
- “全栈2019”Java第八十八章:接口中嵌套接口的应用场景
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- [RHEL] 配置 LVM 卷
[RHEL] 配置 LVM 卷 一.Introduction 基础预览 :LVM 认知与扩容操作 高端实战:Linux系统如何迁移至LVM磁盘 之前转过一篇文章 LVM分区在线扩容 ,其原因是我需要给 ...
- python数据类型详解(全面)
python数据类型详解 目录1.字符串2.布尔类型3.整数4.浮点数5.数字6.列表7.元组8.字典9.日期 1.字符串1.1.如何在Python中使用字符串a.使用单引号(')用单引号括起来表示字 ...
- springMVC请求注解@RequestMapping各个属性值
最近遇到了一个采用fastJson传输数据的方式,搞了半天,总是感觉模糊,觉得自己有必要在这里做一个系统的总结,今天先从@RequestMapping的属性开始,采用REST 风格的 URL 请求,R ...
- Swift中的Weak Strong Dance
亲爱的博客园的关注着博主文章的朋友们告诉你们一个很不幸的消息哦, 这篇文章将会是博主在博客园发表的最后一篇文章咯, 因为之后的文章博主只会发布到这里哦 http://daiweilai.github. ...
- ES6之新增const命令使用方法
hi,我又回来了,今天学习一下const命令. 声明一个常量 const声明一个只读常量,一旦声明,常量的值便不可改变. 例子如下: const food = 12; food = 23; // Un ...