热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

网络爬虫第六章数据存储

概述 一、基本存储:存储至TXT或CSV 二、存储至MongoDB数据库     (1)下载安装MongoDB     (2)M
  • 概述
    一、基本存储:存储至TXT或CSV
    二、存储至MongoDB数据库
        (1)下载安装MongoDB
        (2)MongoDB的基本概念
        (3)Python操作MongoDB数据库
        (4)RoboMongo的安装和使用


概述

主要是介绍两种存储数据的方法:
(1)存储在文件中,包括TXT文件CSV文件
(2)存储在数据库中,包括MySQL关系数据库MongoDB数据库
返回




一、基本存储:存储至TXT或CSV


1、把数据存储至TXT

title = "This is a test sentence."
with open('title.txt', "a+") as f:f.write(title)f.close()

在这里插入图片描述
有时需要把几个变量写入TXT文件中,这时分隔符就比较重要了。可以采用Tab进行分隔,因为在字符串中一般不会出现Tab符号。我们可以使用join函数将变量连接成一个字符串。
Python中有.join()os.path.join()两个函数,具体作用如下:
. join(): 连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串
os.path.join(): 将多个路径组合后返回

>>#对序列进行操作(分别使用' ' 、' - '与':'作为分隔符)
>> a=['1','2','3','4','5']
>> ' '.join(a)
1 2 3 4 5
>>';'.jion(a)
1-2-3-4-5
>>'.'.join(a)
1.2.3.4.5

>>#对字符串进行操作(分别使用' ' 、' - '与':'作为分隔符)
>>b='hello world'
>> ' '.join(b)
h e l l o w o r l d
>>'-' .join(b)
h-e-l-l-o- -w-o-r-l-d
>>':'.jion(b)
h:e:l:l:o: :w:o:r:l:d

>>#对元组进行操作(分别使用' ' 、' - '与':'作为分隔符)
>>c=('1','2','3','4','5')
>>' '.join(c)
1 2 3 4 5
>>'-'.join(c)
1-2-3-4-5
>>':'.join(c)
1:2:3:4:5

>>#对字典进行无序操作(分别使用' ' 、' - '与':'作为分隔符)
>>d={'name1':'a','name2':'b','name3':'c','name4':'d'}
>>' '.join(d)
name1 name2 name3 name4
>>'-'.join(d)
name1-name2-name3-name4
>>':'.join(d)
name1:name2:name3:name4

>>#对目录进行操作
>> import os
>>os.path.join('/hello/','good/date','datbody')
hello/good/date/datbody

2、把数据存储至CSV

CSV(Comma-Separated Values)是逗号分隔值的文件格式,其文件以纯文本的形式存储表格数据(数字和文本)。CSV文件的每一行都用换行符分隔,列与列之间用逗号分隔。
相对于TXT文件,CSV文件既可以用记事本打开,又可以用Excel打开,表现为表格格式。CSV的使用分为读取写入两个方面,首先介绍CSV的读取。
假如我们创建了一个Excel文件,里面的表格是4 x 4的:
在这里插入图片描述
之后存为CSV,文件名为test1.csv,尝试从中读取数据:

import csv
with open('test1.csv', 'r', encoding='UTF-8') as csvfile:csv_reader = csv.reader(csvfile)for row in csv_reader:print(row)print(row[0])

结果如下:
在这里插入图片描述
可见,csv_reader把每一行数据转化成了一个列表(list),列表中从左至右的每个元素是一个字符串。接下来我们使用writerow()方法把一个列表直接写入一列中:

import csvoutput_list = ['1', '2', '3', '4']with open('test2.csv', 'a+', encoding='UTF-8', newline='') as csvfile:w = csv.writer(csvfile)w.writerow(output_list)

结果如下:
在这里插入图片描述
返回




二、存储至MongoDB数据库

在网络爬虫的时候需要存储大量数据,而且有时爬取返回的数据是JSON格式,这时选择使用NoSQL数据库存储就容易多了。NoSQL泛指非关系型数据库。相比于关系数据库MySQL,NoSQL自诞生之初就容易扩展,数据之间无关系,具有非常高的读写性能。

(1)下载安装MongoDB

MongoDB是一款基于分布式文件存储的数据库,本身就是为了为Web应用提供可扩展的高性能数据存储。因此,使用MongoDB存储网络爬虫再合适不过了。

下面介绍Windows系统下的安装:

首先下载MongoDB,下载windows的msi版本:
https://www.mongodb.com/download-center/community
在这里插入图片描述
然后,根据提示来安装,可以选择Complete安装完整版本,也可以选择Custom自己定制安装。为了方便,建议选择Complete。
然后我们会看到出现了两个文件夹,其中data文件夹是用来存放MongoDB数据库的(database),log文件夹用来存放数据库的操作记录。

在这里插入图片描述
接下来,就是启动MongoDB了,有两种方式,这里我介绍一种较为简单的方式,以Windows服务的方式打开。我们需要以管理员的身份运行cmd.exe,注意一定要是管理员的身份,输入:

net start MongoDB

然后看到下面的界面就代表已经成功启动了。
在这里插入图片描述

(2)MongoDB的基本概念

为了更好地理解MongoDB的基本概念,如文档、集合和数据库,我们可以将MongoDB和SQL的一些概念进行比较:
在这里插入图片描述
我们可以使用SQL的概念理解MongoDB,如MongoDB中的集合(collection)类似MySQL中的表格,文档(document)类似MySQL中的数据记录行(row),域(field)类似MySQL中的数据字段(column)
不过MongoDB和SQL数据库有很大区别,MongoDB的文档不需要设置相同的子段,并且相同的子段不需要相同的数据类型。

(3)Python操作MongoDB数据库

我们需要用pip安装PyMongo库,连接Python和MongoDB。在命令行输入:

pip intsall pymongo

安装完成后,可以尝试用python操作MongoDB,监测能否正常连接到数据库:

from pymongo import MongoClient
client = MongoClient('localhost',27017)
db = client.blog_database
collection = db.blog

首先,我们需要连接MongoDB客户端,然后连接数据库blog_database,如果该数据库不存在,就会创建一个数据库。接下来选择该数据库的集合blog,该集合不存在时也会创建一个。上述代码运行成功代表没有问题。
接下来,我们爬取博客主页的所有文章标题并存储至MongoDB数据库:

import requests
import datetime
from bs4 import BeautifulSoup
from pymongo import MongoClientclient = MongoClient('localhost',27017)
db = client.blog_database
collection = db.bloglink = "http://www.santostang.com/"
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) \AppleWebKit/537.36 (KHTML, like Gecko) \Chrome/70.0.3538.25 \Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400 ','Host': 'www.santostang.com'}
r = requests.get(link, headers=headers)soup = BeautifulSoup(r.text, "lxml")
title_list = soup.find_all("h1", class_="post-title")
for eachone in title_list:url = eachone.a['href']title = eachone.a.text.strip()post = {"url": url, "title": title, "date":datetime.datetime.utcnow()}collection.insert_one(post)

我们使用insert_one()函数将字典加入集合collection中。
然后,我们进入bin文件夹,打开Mongo.exe程序,输入:

use blog_database
db.blog.find.pretty()

这样就能查询数据集合的数据了,如下图:
在这里插入图片描述
如果还想深入学习python操作MongoDB数据库,可以到PyMongo官方网站学习,地址为:
https://api.mongodb.com/python/current/index.html

(4)RoboMongo的安装和使用

RoboMongo是MongoDB的图形化管理工具,只要会使用mongo shell,就可以用RoboMongo。
如果你想可视化地管理MongoDB的数据,可以试一试使用RoboMongo。下面介绍怎么安装:
首先,进入https://robomongo.org/download下载RoboMongo:

在这里插入图片描述
下载完成后,我们会得到两个文件:
在这里插入图片描述
这里我们打开robo3t-1.3.1-windows-x86_64-7419c406.exe文件,根据提示安装。
然后在打开的界面选择Create,默认选项单击save:

在这里插入图片描述
之后,对于新创建的这个连接,单击Connect:
在这里插入图片描述
最后我们就可以看到数据库的所有信息了:
在这里插入图片描述
返回





推荐阅读
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • HashMap的相关问题及其底层数据结构和操作流程
    本文介绍了关于HashMap的相关问题,包括其底层数据结构、JDK1.7和JDK1.8的差异、红黑树的使用、扩容和树化的条件、退化为链表的情况、索引的计算方法、hashcode和hash()方法的作用、数组容量的选择、Put方法的流程以及并发问题下的操作。文章还提到了扩容死链和数据错乱的问题,并探讨了key的设计要求。对于对Java面试中的HashMap问题感兴趣的读者,本文将为您提供一些有用的技术和经验。 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • java drools5_Java Drools5.1 规则流基础【示例】(中)
    五、规则文件及规则流EduInfoRule.drl:packagemyrules;importsample.Employ;ruleBachelorruleflow-group ... [详细]
  • MySQL多表数据库操作方法及子查询详解
    本文详细介绍了MySQL数据库的多表操作方法,包括增删改和单表查询,同时还解释了子查询的概念和用法。文章通过示例和步骤说明了如何进行数据的插入、删除和更新操作,以及如何执行单表查询和使用聚合函数进行统计。对于需要对MySQL数据库进行操作的读者来说,本文是一个非常实用的参考资料。 ... [详细]
  • 深入理解Java虚拟机的并发编程与性能优化
    本文主要介绍了Java内存模型与线程的相关概念,探讨了并发编程在服务端应用中的重要性。同时,介绍了Java语言和虚拟机提供的工具,帮助开发人员处理并发方面的问题,提高程序的并发能力和性能优化。文章指出,充分利用计算机处理器的能力和协调线程之间的并发操作是提高服务端程序性能的关键。 ... [详细]
  • 使用Spring AOP实现切面编程的步骤和注意事项
    本文介绍了使用Spring AOP实现切面编程的步骤和注意事项。首先解释了@EnableAspectJAutoProxy、@Aspect、@Pointcut等注解的作用,并介绍了实现AOP功能的方法。然后详细介绍了创建切面、编写测试代码的过程,并展示了测试结果。接着讲解了关于环绕通知的使用方法,并修改了FirstTangent类以添加环绕通知方法。最后介绍了利用AOP拦截注解的方法,只需修改全局切入点即可实现。使用Spring AOP进行切面编程可以方便地实现对代码的增强和拦截。 ... [详细]
  • Python教学练习二Python1-12练习二一、判断季节用户输入月份,判断这个月是哪个季节?3,4,5月----春 ... [详细]
author-avatar
你的眼神16_884
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有