数据存储,在爬虫中也是十分的重要,因为我们要把我们想要的数据保存到本地,其中最简单直接的就是保存为文件文本,比如: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. 吴裕雄--天生自然C++语言学习笔记:C++ 数据封装

    所有的 C++ 程序都有以下两个基本要素: 程序语句(代码):这是程序中执行动作的部分,它们被称为函数. 程序数据:数据是程序的信息,会受到程序函数的影响. 封装是面向对象编程中的把数据和操作数据的函 ...

  2. Day 20:网络编程(1)

    什么是计算机网络? 指的是分布在不同地域的计算机,通过外部设备连接起来,实现资源共享与数据传输的计算机系统. 通信三要素: IP: IP地址 Internet上的每台主机(Host)都有一个唯一的IP ...

  3. P3045 [USACO12FEB]牛券Cow Coupons

    P3045 [USACO12FEB]牛券Cow Coupons 贪心题.先选中 \(c_i\) 最小的 \(k\) 头牛,如果这样就超过 \(m\) ,直接退出,输出答案.否则考虑把后面的牛依次加入, ...

  4. Database--事务

    参考 https://segmentfault.com/a/1190000012669504?utm_source=tag-newest https://blog.csdn.net/qq_371559 ...

  5. python-局域网内实现web页面用户端下载文件,easy!

    好久没有发博客了,但是也没闲着,最近疫情原因一直在家远程办公,分享一下今天的干货 先说需求:某个文件压缩之后可以供用户点击下载 没想到特别好的办法,在网上搜索大多都是通过socket实现的,然后我这个 ...

  6. Codeforces 444C 线段树 懒惰标记

    前天晚上的CF比赛div2的E题,很明显一个线段树,当时还在犹豫复杂度的问题,因为他是区间修改和区间查询,肯定是要用到懒惰标记. 然后昨天真的是给这道题跪了,写了好久好久,...我本来是写了个add标 ...

  7. Android群英传神兵利器读书笔记——第三章:Android Studio奇技淫巧

    这篇文章篇幅较长,可以使用版权声明下面的目录,找到感兴趣的进行阅读 3.1 Android Studio使用初探 Project面板 Stucture面板 Android Monitor Keymap ...

  8. iOS如何禁用长按页面弹出菜单

    iOS如何禁止用户长按页面导致弹出菜单? 给元素设置样式: -webkit-touch-callout:none; 补充:同样适用于图片如果想禁止用户保存或者复制等

  9. pipeline简单规则

    Declarative 1. pipeline{ agent options{ } stages{ stage(' '){ steps{ } } } post{ always{} changed{} ...

  10. rabbitmq安装及简单demo练习

    参考:https://my.oschina.net/loveorange/blog/3026473 安装参考链接: 1. 下载自己需要的rabbitmq_server(http://www.rabbi ...