热门标签 | 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:
在这里插入图片描述
最后我们就可以看到数据库的所有信息了:
在这里插入图片描述
返回





推荐阅读
  • python爬虫Demo
    1爬虫功能:爬取某域名下所有网页,比如爬取python文档 https:docs.python.orgzh-cn3 ,爬取之后, ... [详细]
  • Python3 中使用 lxml 模块解析 XPath 数据详解
    XPath 是一种用于在 XML 文档中查找信息的路径语言,同样适用于 HTML 文件的搜索。本文将详细介绍如何利用 Python 的 lxml 模块通过 XPath 技术高效地解析和抓取网页数据。 ... [详细]
  • Java 中重写与重载的区别
    本文详细解析了 Java 编程语言中重写(Override)和重载(Overload)的概念及其主要区别,帮助开发者更好地理解和应用这两种多态性机制。 ... [详细]
  • 导入大csv文件到mysql(CSV导入) ... [详细]
  • 利用Java与Tesseract-OCR实现数字识别
    本文深入探讨了如何利用Java语言结合Tesseract-OCR技术来实现图像中的数字识别功能,旨在为开发者提供详细的指导和实践案例。 ... [详细]
  • 本文详细探讨了如何在 SparkSQL 中创建 DataFrame,涵盖了从基本概念到具体实践的各种方法。作为持续学习的一部分,本文将持续更新以提供最新信息。 ... [详细]
  • 协同过滤推荐(CollaborativeFilteringRecommendation)主要包括基于用户的协同过滤算法与基于物品的协同过滤算法。下面,以movielens数据集为例 ... [详细]
  • 近期参与了一个旨在提高在线平台大规模查询响应速度的项目,预计处理的数据量为2-3亿条,数据库并发量约为每秒1500次,未来可能增至3000次。通过对比Redis和MongoDB,最终选择了MongoDB,因其具备优秀的横向扩展性和GridFS支持下的Map/Reduce功能。 ... [详细]
  • ML学习笔记20210824分类算法模型选择与调优
    3.模型选择和调优3.1交叉验证定义目的为了让模型得精度更加可信3.2超参数搜索GridSearch对K值进行选择。k[1,2,3,4,5,6]循环遍历搜索。API参数1& ... [详细]
  • PySpark实战:高效使用DataFrame超越RDD
    本文深入探讨了PySpark中DataFrame的使用方法及其相对于传统RDD的优势,旨在帮助开发者更好地理解和利用这一强大工具。 ... [详细]
  • 主板市盈率、市净率及股息率的自动化抓取
    本文介绍了如何通过Python脚本自动从中国指数有限公司网站抓取主板的市盈率、市净率和股息率等关键财务指标,并将这些数据存储到CSV文件中。涉及的技术包括网页解析、正则表达式以及异常处理。 ... [详细]
  • addcslashes—以C语言风格使用反斜线转义字符串中的字符addslashes—使用反斜线引用字符串bin2hex—函数把包含数据的二进制字符串转换为十六进制值chop—rt ... [详细]
  • 利用 Jest 和 Supertest 实现接口测试的全面指南
    本文深入探讨了如何使用 Jest 和 Supertest 进行接口测试,通过实际案例详细解析了测试环境的搭建、测试用例的编写以及异步测试的处理方法。 ... [详细]
  • Python并行处理:提升数据处理速度的方法与实践
    本文探讨了如何利用Python进行数据处理的并行化,通过介绍Numba、多进程处理以及Pandas DataFrame上的并行操作等技术,旨在帮助开发者有效提高数据处理效率。 ... [详细]
  • 本文通过Python编程语言,利用Pandas和Matplotlib库,对电影数据集中的类型字段进行处理,实现电影类型的统计分析及可视化展示。 ... [详细]
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社区 版权所有