数据存储,在爬虫中也是十分的重要,因为我们要把我们想要的数据保存到本地,其中最简单直接的就是保存为文件文本,比如:TXT、JSON、CSV等等,除此之外,我们还可以将其保存到数据库中,常见的数据库类型有关系型数据库(MySQL)和非关系型数据库(MongoDB、Redis)。今天主要是看着书学习了一下TXT文本存储。

TXT文本存储的操作比较简单,同样也有一个就是不利于检索,上代码(爬取知乎“发现”页面的热门话题):

import requests
from pyquery import PyQuery as pq
url = 'http://www.zhihu.com/explore'
headers = {
'Accept': 'image/webp,image/*,*/*;q=0.8',
'Accept-Language':'zh-CN,zh;q=0.8',
'Referer':'https://www.zhihu.com/explore',
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0'
}
html = requests.get(url,headers = headers).text
# print(html)
doc = pq(html)
# print(doc)
items = doc('.explore-tab .feed-item').items() for item in items:
question = item.find('h2').text()
author = item.find('.author-link-line').text()
answer = pq(item.find('.content').html()).text()
with open('zhuhu.txt', 'a',encoding='utf-8') as file:
file.write('\n'.join([question,author,answer]))
file.write('\n' + '=' *50 + '\n')
print("ok")
其中,我们主要用到了pyquery解析。还有一个需要解释的就是
with open('zhihu.txt', 'a',encoding='utf-8') as file:
中的zhihu.txt就是我们要保存的文件名称和类型,encoding='utf-8就是解码操作,如果不解码,返回的是二进制字符串,是无法正常阅读的,所以我们需要对其进行解码。
a代表的是以追加方式打开一个文件,如果该文件已经存在,文件指针就会自动放到文件结尾,如果文件不存在,就会创建新的文件来写入。除了a之外,还有几个,下边一一介绍:
r:以只读方式打开一个文件,文件的指针自动放到文件的开头。
rb:以二进制只读方式打开一个文件,文件的指针自动放到文件的开头。
r+:以读写方式打开一个文件,文件的指针自动放到文件的开头。
rb+:以二进制读写方式打开一个文件,文件的指针自动放到文件的开头。
w:以写入方式打开一个文件,如果文件已经存在,则将其覆盖,如果文件不存在,则创建新的文件。
wb:以二进制写入方式打开一个文件,如果文件已经存在,则将其覆盖,如果文件不存在,则创建新的文件。
w+:以读写方式打开一个文件,如果文件已经存在,则将其覆盖,如果文件不存在,则创建新的文件。
ab:以二进制追加方式打开一个文件,如果文件已经存在,则文件指针会放在文件结尾,如果有新的内容,会写入到已有内容的后边;如果文件不存在,则创建新的文件。
a+:以读写方式打开一个文件,如果文件已经存在,则文件指针会放在文件结尾,文件打开时会是追加模式,如果文件不存在,则创建新的文件。
ab+:以二进制追加方式打开一个文件。如果文件已经存在,则文件指针将会放在文件结尾,如果文件不存在,则创建新文件用于读写。

python-day8爬虫基础之数据存储的更多相关文章

  1. Python多线程爬虫与多种数据存储方式实现(Python爬虫实战2)

    1. 多进程爬虫 对于数据量较大的爬虫,对数据的处理要求较高时,可以采用python多进程或多线程的机制完成,多进程是指分配多个CPU处理程序,同一时刻只有一个CPU在工作,多线程是指进程内部有多个类 ...

  2. 05.Python网络爬虫之三种数据解析方式

    引入 回顾requests实现数据爬取的流程 指定url 基于requests模块发起请求 获取响应对象中的数据 进行持久化存储 其实,在上述流程中还需要较为重要的一步,就是在持久化存储之前需要进行指 ...

  3. 05,Python网络爬虫之三种数据解析方式

    回顾requests实现数据爬取的流程 指定url 基于requests模块发起请求 获取响应对象中的数据 进行持久化存储 其实,在上述流程中还需要较为重要的一步,就是在持久化存储之前需要进行指定数据 ...

  4. 《Python网络爬虫之三种数据解析方式》

    引入 回顾requests实现数据爬取的流程 指定url 基于requests模块发起请求 获取响应对象中的数据 进行持久化存储 其实,在上述流程中还需要较为重要的一步,就是在持久化存储之前需要进行指 ...

  5. Python扫描器-爬虫基础

    0x1.基础框架原理 1.1.爬虫基础 爬虫程序主要原理就是模拟浏览器发送请求->下载网页代码->只提取有用的数据->存放于数据库或文件中 1.1.基础原理 1.发起HTTP请求 2 ...

  6. Python网络爬虫之三种数据解析方式 (xpath, 正则, bs4)

    引入 回顾requests实现数据爬取的流程 指定url 基于requests模块发起请求 获取响应对象中的数据 进行持久化存储 其实,在上述流程中还需要较为重要的一步,就是在持久化存储之前需要进行指 ...

  7. python从爬虫基础到爬取网络小说实例

    一.爬虫基础 1.1 requests类 1.1.1 request的7个方法 requests.request() 实例化一个对象,拥有以下方法 requests.get(url, *args) r ...

  8. Python归纳 | 爬虫基础知识

    1. urllib模块库 Urllib是python内置的HTTP请求库,urllib标准库一共包含以下子包: urllib.error 由urllib.request引发的异常类 urllib.pa ...

  9. <Android基础> (六) 数据存储 Part 1 文件存储方式

    第六章 数据存储 6.1 持久化技术 持久化技术指将内存中的瞬时数据保存到存储设备中,保证即使在手机或电脑关机的情况下,这些数据仍然不会丢失. 主要有三种方式用于简单地实现数据持久化功能:文件存储.S ...

随机推荐

  1. P1012 数字分类

    转跳点:

  2. 关于数据库text字段

    问题描述: maven项目中,使用MBG代码生成器自动生成的实体类对象时,当数据库中表的字段有 text 类型时,对应到java类中是String类型的,在前端页面通过ajax获取到 json 格式的 ...

  3. CF_448D 二分

    给定n m k n和m为一个矩阵的行和列,都从1开始,矩阵的每个元素的值即为 i*j(行*列),求里面第k个数 还想找什么规律,发现虽然矩阵里面很有规律,但是n 和m在不断变化 根本不好找 其实元素从 ...

  4. 计划任务常用在线工具-微服务信息整-seafile网盘-亿图操作-正则工具

    正则工具 https://regex101.com/ http://www.regexp.cn/Regex 身份证匹配 ^(\\d{}|\d{})(\\d|[xX])$ \d{}[-9Xx]|\d{} ...

  5. spring boot rest 接口集成 spring security(1) - 最简配置

    Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...

  6. POJ - 3661 Running(dp---背包)

    题意:Bessie要运动N分钟,已知每一分钟可以跑的距离,每一分钟可选择跑或者不跑,若选择跑,疲劳度加1,但疲劳度不能超过M:若选择不跑,则每过一分钟,疲劳度减1,且只有当疲劳度减为0时可以继续跑.求 ...

  7. POJ 1547:Clay Bully

    Clay Bully Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 8349   Accepted: 4711 Descri ...

  8. 日志处理中一些shell命令技巧

    日志处理中一些shell命令技巧 阴差阳错的做的日志分析,前途未卜的这段日子,唯一还有点意思的可能就是手动的处理大量日志.总结一下. 日志文件的输入是动则几个G的文本.从N个这样的文件中得到一个列表, ...

  9. 68.ORM查询条件:date,time,year,week_day等

    1. date: 首先查看数据库中article表的信息,由表中的create_time字段可以看出时间为2020.2.5 打印出查询的结果: <QuerySet []>:但是查询的结果为 ...

  10. Javascript object.constructor属性与面向对象编程(oop)

    定义和用法 在 JavaScript 中, constructor 属性返回对象的构造函数. 返回值是函数的引用,不是函数名: JavaScript 数组 constructor 属性返回 funct ...