一步一步学爬虫(4)数据存储之文本存储

news2024/9/27 12:08:03

一步一步学爬虫(4)数据存储之文本存储

  • 4.1 TXT纯文本文件存储
    • 4.1.1 本节目标
    • 4.1.2 基本实例
    • 4.1.3 打开方式
    • 4.1.4 简化写法

4.1 TXT纯文本文件存储

  将数据保存到 TXT 文本的操作非常简单,而且 TXT 文本几乎兼容任何平台,但是这有个缺点,那就是不利于检索。所以如果对检索和数据结构要求不高,追求方便第一的话,可以采用 TXT 文本存储。

  本节中,我们就来看下利用 Python 保存 TXT 文本文件的方法。

4.1.1 本节目标

  本节我们以电影示例网站 https://ssr1.scrape.center/ 为例,爬取首页 10 部电影的数据,然后将相关信息存储为 TXT 文本格式。

4.1.2 基本实例

  首先,可以用 requests 将网页源代码获取下来,然后使用 pyquery 解析库解析,接下来将提取的电影名称、类别、上映时间等信息保存到 TXT 文本中,代码如下:

import requests
from pyquery import PyQuery as pq
import re

url = 'https://ssr1.scrape.center/'
html = requests.get(url).text
doc = pq(html)
items = doc('.el-card').items()

file = open('movies.txt', 'w', encoding='utf-8')
for item in items:
    # 电影名称
    name = item.find('a > h2').text()
    file.write(f'名称: {name}\n')
    # 类别
    categories = [item.text() for item in item.find('.categories button span').items()]
    file.write(f'类别: {categories}\n')
    # 上映时间
    published_at = item.find('.info:contains(上映)').text()
    published_at = re.search('(\d{4}-\d{2}-\d{2})', published_at).group(1) \
        if published_at and re.search('\d{4}-\d{2}-\d{2}', published_at) else None
    file.write(f'上映时间: {published_at}\n')
    # 评分
    score = item.find('p.score').text()
    file.write(f'评分: {score}\n')
    file.write(f'{"=" * 50}\n')
file.close()

  这里主要是为了演示文件保存的方式,因此 requests 异常处理部分在此省去。首先,用 requests 提取首页的 HTML 代码,然后利用 pyquery 将电影的名称、类别、上映时间、评分信息提取出来。

  利用 Python 提供的 open 方法打开一个文本文件,获取一个文件操作对象,这里赋值为 file,每提取一部分信息,就利用 file 对象的 write 方法将提取的内容写入文件。

  全部提取完毕之后,最后调用 close 方法将其关闭,这样抓取的内容即可成功写入文本中了。

  运行程序,可以发现在本地生成了一个 movies.txt 文件,其内容如图所示。
在这里插入图片描述
  这样电影信息的内容就被保存成文本形式了。

  回过头来我们看下本节重点需要了解的内容,就是文本写入操作,其实就是 open、write、close 这三个方法的用法。

  这里 open 方法的第一个参数即要保存的目标文件名称;第二个参数为 w,代表以覆盖写入的方式写入文本;另外,我们还指定了文件的编码为 utf-8。最后,写入完成后,还需要调用 close 方法来关闭文件对象。

4.1.3 打开方式

  在刚才的实例中,open 方法的第二个参数设置成了 w,这样在每次写入文本时会清空源文件,然后将新的内容写入文件,这是一种文件打开方式。关于文件的打开方式,其实还有其他几种,这里简要介绍一下。

  • r:以只读方式打开文件,意思就是只能读取文件内容,不能写入文件内容。这是默认模式。
  • rb:以二进制只读方式打开一个文件,通常用于打开二进制文件,比如音频、图片、视频等等。
  • r+:以读写方式打开一个文件,既可以读文件又可以写文件。
  • rb+:以二进制读写方式打开一个文件,同样既可以读又可以写,但读取和写入的都是二进制数据。
  • w:以写入方式打开一个文件。如果该文件已存在,则将其覆盖。如果该文件不存在,则创建新文件。
  • wb:以二进制写入方式打开一个文件。如果该文件已存在,则将其覆盖。如果该文件不存在,则创建新文件。
  • w+:以读写方式打开一个文件。如果该文件已存在,则将其覆盖。如果该文件不存在,则创建新文件。
  • wb+:以二进制读写格式打开一个文件。如果该文件已存在,则将其覆盖。如果该文件不存在,则创建新文件。
  • a:以追加方式打开一个文件。如果该文件已存在,文件指针将会放在文件结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,则创建新文件来写入。
  • ab:以二进制追加方式打开一个文件。如果该文件已存在,则文件指针将会放在文件结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,则创建新文件来写入。
  • a+:以读写方式打开一个文件。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,则创建新文件来读写。
  • ab+:以二进制追加方式打开一个文件。如果该文件已存在,则文件指针将会放在文件结尾。如果该文件不存在,则创建新文件用于读写。

4.1.4 简化写法

  另外,文件写入还有一种简写方法,那就是使用 with as 语法。在 with 控制块结束时,文件会自动关闭,所以就不需要再调用 close 方法了。

  这种保存方式可以简写如下,对应的原代码就要删除掉,把下面代码放入for循环:

with open('movies.txt', 'a', encoding='utf-8')  as file:
    file.write(f'名称: {name}\n')
    file.write(f'类别: {categories}\n')
    file.write(f'上映时间: {published_at}\n')
    file.write(f'评分: {score}\n')

  上面便是利用 Python 将结果保存为 TXT 文件的方法,这种方法简单易用,操作高效,是一种最基本的保存数据的方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/129638.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spark环境搭建(Hadoop YARN模式)

前言 按照前面环境部署中所学习的,如果我们想要一个稳定的生产Spark环境,那么最优的选择就是构建:HA StandAlone集 群。 不过在企业中, 服务器的资源总是紧张的,许多企业不管做什么业务,都基本上会有Hadoo…

AD软件绘制不规则焊盘的器件封装

网上有很多关于AD软件绘制不规则焊盘的帖子,搜了一些帖子看了一下,感觉不太对。严格意义上AD软件是不能绘制不规则的焊盘的,至少目前用的AD软件不支持。为什么这么说呢? 我提一个需求:假如我在PCB文件中需要随意的添加…

企业选择SOP作业指导书系统的目的和意义

SOP是将作业指导流程予以说明规范,让作业人员有一个标准的作业准则,以达到作业的标准一致性。也是一种管理模式,通过对过程的标准化操作,减少和预防差错和不良后果的发生。通过动作的解析、比较、分析,循环作业分析等输…

MIT6.830-2022-lab4实验思路详细讲解

目录前言一、实验概览Exercise 1:Granting LocksExercise 2:Lock LifetimeExercise 3:Implementing NO STEALExercise 4:TransactionsExercise 5:Deadlocks and Aborts总结 && Debug记录前言 到lab4事务,这一块应该是数据库中概念比较多&#x…

2022/12/30总结

今日学习了二叉树有关知识。 二叉树 二叉树通俗来讲就是一个有俩个指针的链表。他们大多长这个样子: 这里还有俩个概念了,二叉树分为完全二叉树和满二叉树 上面所说的是满二叉树,顾名思义就是每个父节点都相应的有俩个指针,通常…

基于springboot+Vue的宿舍管理系统前后端分离(程序+详细文档+数据库)

大家好✌!我是CZ淡陌。一名专注以理论为基础实战为主的技术博主,将再这里为大家分享优质的实战项目,本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目,希望你能有所收获,少走一些弯路…

前端devops——利用gitlab实现CI/CD自动化部署

目录 前言 一、前期准备 1、开启虚拟服务 2、下载并安装docker 二、开始部署 1、安装gitlab 2、修改默认账号登录密码 3、修改项目clone地址 三、Gitlab CI/CD 1、安装并运行gitlab-runner 2、执行runner 3、将项目注册到gitlab-runner 1、获取token 2、执行注册 …

ETL数据清洗

大多数据仓库的数据架构可以概括为: 数据源-->ODS(操作型数据存储)-->DW-->DM(data mart) ETL贯穿其各个环节。 ​一、数据抽取: 可以理解为是把源数据的数据抽取到ODS或者DW中。 1. 源数据类型: 关系型数据库,如Or…

多模态串讲(上)

多模态的学习在最近几年异常火爆,除了普通的多模态学习,比如视觉问答,图文检索等,其实之前讲的所有这种Language Guided Detection,或者Language Guided Segmentation,这些任务都是多模态的,还有最近火的文…

SpringCloud之负载均衡Ribbon

1.Ribbon是什么? •Ribbon是 Netflix 提供的一个基于HTTP和TCP的客户端负载均衡工具。 •Ribbon主要有两个功能: 1.简化远程调用 2.提供客户端的软件负载均衡算法 Ribbon客户端组件提供一系列完善的配置项,如连接超时,重试等…

ERA5数据不同下载方法

ERA5数据不同下载方法1 ERA5简介2 ERA5下载的三种方法2.1 方法1:GEE下载2.2 方法2:官方网站下载2.3 方法3:通过Python脚本下载(以Linux系统为例)总结参考1 ERA5简介 ERA5是ECMWF对全球气候的第五代大气再分析。再分析…

ArcGIS基础实验操作100例--实验17按条件计算属性字段值

本实验专栏来自于汤国安教授《地理信息系统基础实验操作100例》一书 实验平台:ArcGIS 10.6 实验数据:请访问实验1(传送门) 基础编辑篇--实验17 按条件计算属性字段值 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff0…

工业远程I/O模块CANopen I/O模块 安装接线说明

1)外观尺寸 DIN35mm Rail标准导轨支架外观与尺寸: 2)面板说明 指示灯说明运行指示灯 绿色预留预留错误指示灯 红色CANopen地址设置开关,CANopen 通讯速率设置开关,当 0表示通信速率为10Kbps 4表示通信速率为250Kbps 1表…

Linux | 内存 | 由内存页不足(page allocation failure)引起程序杀死(OOM Killer)

本文对由于 page allocation failure 而引起 Out of Memory Killer 的背景及工作原理进行不完全总结。 更新:2022 / 12 / 30 文章目录触发条件__alloc_pages_slowpath()__vmalloc_area_node()__vmalloc_node_range工作原理结合实例1.2.GFP_ATOMIC 和 __GFP_COMP&am…

阿里云弹性预测 AHPA:助力厨芯科技降本增效

作者:李鹏(元毅) “使用阿里云弹性预测 AHPA,降低了 K8s 容器成本,同时减轻了运维工作量,加速了业务容器化的进程。”—— 朱晏(厨芯科技VP) 背景 厨芯科技,是全球领先的餐饮设备和服务提供商…

TCP 的报头结构 和 三次握手---详解(看完必会)

TCP 的三次握手: 在搞懂三次握手前,必须要搞明白TCP报头的结构内容 TCP报头结构: 源端口号 : 源计算机上的应用程序的端口号;目的端口号 : 目标计算机的应用程序端口号;序列号:客户端给服务端发送数据时…

React 配置文件(二) 配置环境变量

开发环境一般分为: UAT(测试环境) PRE(预上线环境) PROD(生产环境) 所以本地开发分别搭建相对应环境 2.安装 dotenv 3.在package.json文件中配置环境 "scripts": { "start": "react-app-rewired start", "uat": "dotenv…

【Linux】文件系统与inode

一、文件系统 理解文件系统前首先我们要来先了解一下磁盘结构。 接下来我们看看以水平、垂直角度来看看磁盘结构,并将其区域进行划分。 磁盘的垂直分布 (此图最上面的一面和最下面的一面无磁头,则不存储数据): 磁头数:磁头就是在…

LeetCode303.区域和检索 - 数组不可变

LeetCode刷题记录 文章目录📜题目描述💡解题思路⌨C代码📜题目描述 给定一个整数数组 nums,处理以下类型的多个查询: 计算索引 left 和 right (包含 left 和 right)之间的 nums 元素的 和 ,其中…

Windows nc命令下载使用与使用bash建立反弹shell

今天继续给大家介绍渗透测试相关知识,本文主要内容是Windows nc命令下载使用与使用bash建立反弹shell。 免责声明: 本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负! 再次强…