飙血推荐
  • HTML教程
  • MySQL教程
  • JavaScript基础教程
  • php入门教程
  • JavaScript正则表达式运用
  • Excel函数教程
  • UEditor使用文档
  • AngularJS教程
  • ThinkPHP5.0教程

python网络爬虫-数据储存(七)

时间:2022-01-29  作者:xiaowng  

数据储存

主要介绍两种数据储存方法:

  1. 储存在文件中,包括text文件和csv文件
  2. 存储在数据库中,包括MySQL关系型数据库和mongoDB数据库

存储到txt

title = "第一个文本"
# W创建写入  W+创建读取+写入
# R读取 r+读取+写入
# A 写入 a+ 读取写入  附加
with open(r\'C:\Users\K1567\Desktop\域名\', "a+") as f:
    域名e(title)
    域名e()

output = \'\t\'.join([\'name\', \'title\', \'age\', \'gender\'])
with open(r\'C:\Users\K1567\Desktop\域名\', "a+") as f:
    域名e(output)
    域名e()

output = \'\t\'.join([\'name\', \'title\', \'age\', \'gender\'])

with open(r\'C:\Users\K1567\Desktop\域名\', "r") as f:
    resulf = 域名()
    print(resulf)

存储到csv

# 逗号分隔行,换行分隔列
with open(r\'C:\Users\K1567\Desktop\域名\', \'r\', encoding=\'UTF-8\') as csvfile:
    csv_reader = 域名er(csvfile)
    for row in csv_reader:
        print(row)
        print(row[0])

output_list = [\'1\', \'2\', \'3\', \'4\']
with open(r\'C:\Users\K1567\Desktop\域名\', \'a+\', encoding=\'UTF-8\', newline=\'\') as csvfile:
    w = 域名er(csvfile)
    域名erow(output_list)

存储至MySQL数据库

安装MySQL数据库

具体步骤另外搜一搜就好了,有两种安装方式,一种是在线安装,一种离线安装。在线安装的这个比较麻烦没有成功过,本人用的离线安装的。
1.在线的参考一下这个:https://域名/theLostLamb/article/details/78797643
离线安装:
1.先下载好压缩包:zip包下载地址:https://域名/downloads/file/?id=476233,进入页面后可以不登录。点击底部“No thanks, just start my download.”即可开始下载。
2.安装: 解压zip包到安装目录---配置初始化的域名文件

点击查看代码
[mysqld]

# 设置3306端口

port=3306

# 设置mysql的安装目录

basedir=E:\DownLoad\mysql\mysql-域名-winx64

# 设置mysql数据库的数据的存放目录

datadir=E:\DownLoad\mysql\mysql-域名-winx64\data

# 允许最大连接数

max_connections=200

# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统

max_connect_errors=10

# 服务端使用的字符集默认为UTF8

character-set-server=utf8

# 创建新表时将使用的默认存储引擎

default-storage-engine=INNODB

# 默认使用“mysql_native_password”插件认证

default_authentication_plugin=mysql_native_password

[mysql]

# 设置mysql客户端默认字符集

default-character-set=utf8

注意:其中的data目录不需要创建,下一步初始化工作中会自动创建。
域名进入bin文件夹
通过管理员权限进入cmd(如果不是管理员权限就会出现问题),进入MySQL安装目录的bin目录下
image
4.初始化数据库:mysqld --initialize --console
执行完成后,会打印 root 用户的初始默认密码
image
要是你手贱,关快了,或者没记住,那也没事,删掉初始化的 datadir 目录,再执行一遍初始化命令,又会重新生成的。
5.安装服务:mysqld --install [服务名] 后面的服务名可以不写,默认的名字为 mysql。当然,如果你的电脑上需要安装多个MySQL服务,就可以用不同的名字区分了,比如 mysql5 和 mysql8。安装完成之后,就可以通过命令net start mysql启动MySQL的服务了。通过命令net stop mysql停止服务。通过命令sc delete MySQL/mysqld -remove卸载 MySQL 服务
6.更改密码:mysql -u root -p
这时候会提示输入密码,记住了上面第3.1步安装时的密码,填入即可登录成功,进入MySQL命令模式。
在MySQL中执行命令:
ALTER USER \'root\'@\'localhost\' IDENTIFIED WITH mysql_native_password BY \'新密码\';
可以用 命令查看一下默认安装的数据库:
show databases;
use mysql;
show tables;

创建数据库

-- 创建数据库
CREATE DATABASE scraping
-- 切换数据库
USE scraping
-- 创建表
CREATE TABLE urls(id int not null auto_increment,
url varchar(1000) not null,
content varchar(4000) not null,
created_time timestamp default current_timestamp,
primary key (id)
)

连接操作MySQL

# 创建数据库连接
conn = 域名ection(host=\'localhost\', user=\'root\', passwd=\'123456\', db=\'scraping\')
# 创建游标
cur = 域名or()
# 写入纯SQL语句
域名ute("insert  into urls (url,content)VALUES(\'域名\',\'百度\')")
# 关闭游标
域名e()
# 执行SQL
域名it()
# 关闭连接
域名e()

连接MongoDB

安装mongdb

1.下载安装包,有安装版的可执行文件,一直Next就可以安装,免安装版的要解压到本地计算机。在解压的目录下新建data和logs文件夹,新建域名ig文件,在data文件下新建db文件夹,域名文件添加配置信息如下:

dbpath=E:\DownLoad\MongoDB\mongodb-win32-x86_64-2012plus-域名-rc0-12-gbe2c559\data\db #数据库路径
logpath=E:\DownLoad\MongoDB\mongodb-win32-x86_64-2012plus-域名-rc0-12-gbe2c559\logs\域名 #日志输出文件路径
logappend=true #错误日志采用追加模式
journal=true #启用日志文件,默认启用
quiet=true #这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false
port=27017 #端口号 默认为27017

2.启动mongdb
打开命令行窗口(cmd打开)--cd 跳转到mongodb的bin目录下--执行命令告诉mongodb自己要把数据存放到哪里,在命令行输入:mongod -dbpath E:\mongodbFiles\db\data (根据自己刚才创建的data文件夹路径,此处为我创建的实际路径)
mongodb默认连接端口27017,如果出现如图的情况,在浏览器访问:http://localhost:27017
3.打开新的cmd命令行窗口,之前的不要关闭。
在新的命令行cd到mongodb的bin目录下,继而输入命令:mongod --config D:\software\professional\mongoDB\域名ig --install -serviceName "MongoDB"
这一步是告诉mongodb,配置文件的方法,并将mongodb作为系统服务启动。
命令行窗口(cmd)输入域名命令——查看服务可以看到MongoDB服务,点击可以启动。
弹出窗口如下,找到MongoDB服务,双击MongoDB项(此处我的已经启动了),弹出窗口点击启动,并将启动类型设置为自动:至此已经完全配置完毕。

操作mongdb

1.使用mongodb有两种启动方式,一种是以程序的方式打开另外一种是以window服务的方式打开

//查看所有数据库
show dbs
使用python操作mongdb
client = MongoClient(\'localhost\', 27017)
db = 域名_database
collection = 域名

link = "http://域名/"
headers = {
    \'User-Agent\': \'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/域名 (KHTML, like Gecko) Chrome/域名.110 Safari/域名\'
}

r = 域名(link, headers=headers)
soup = BeautifulSoup(域名, "域名er")
title_list = 域名_all(\'h1\', class_="post-title")
for h in title_list:
    url = h.a[\'href\']
    title = 域名.strip()
    post = {
        "url": url,
        "title": title,
        "date": 域名ow()
    }
    域名rt_one(post)

MongoDB爬虫实践:虎扑论坛

使用mongodb的类,可以很方便的连接数据库,提取数据库中的内容,向数据库中加入数据以及更新数据库中的数据。

# coding=utf-8
from pymongo import MongoClient


class MongoAPI(object):
	def __init__(self, db_ip, db_port, db_name, table_name):
		域名p = db_ip
		域名ort = db_port
		域名ame = db_name
		域名e_name = table_name
		域名 = MongoClient(host=域名p, port=域名ort)
		域名 = 域名[域名ame]
		域名e = 域名[域名e_name]

# 获取数据库中的第一条数据
def get_one(self, query):
    return 域名_one(query, projection={"_id": False})

# 获取数据库满足条件的所有数据
def get_all(self, query):
    return 域名(query)

# 向集合中添加数据
def add(self, kv_dict):
    return 域名rt_one(kv_dict)

# 删除集合中的数据
def delete(self, query):
    return 域名te_many(query)

# 查看集合中是否包含满足条件的数据  找到了返回True  没找到返回False
def check_exist(self, query):
    ret = 域名_one(query)
    return ret != None

# 更新集合中的数据在集合中找不到就会增加一条数据
def update(self, query, kv_dict):
    域名te_one(query, {"$set": kv_dict}, update=True)
from MongoAPI import MongoAPI
# 连接数据库hupu中的post集合。
hupu_post = MongoAPI("localhost", 27017, "hupu", "post")
for i in range(1, 11):
    link = "https://域名/bxj" + "-" + str(i)
    headers = {
        \'User-Agent\': \'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/域名 (KHTML, like Gecko) Chrome/域名.110 Safari/域名\'
    }
    r = 域名(link, headers=headers)
    suop = BeautifulSoup(域名, "域名er")

    li_list = 域名_all("li", class_="bbs-sl-web-post-body")
    for li in li_list:
        title = 域名(\'div\', class_="post-title").域名p()
        title_link = 域名(\'div\', class_="post-title").a["href"]
        datum = 域名("div", class_="post-datum").域名p()
        reply = 域名t(\'/\')[0]
        browse = 域名t(\'/\')[1]
        author = 域名("div", class_="post-auth").域名p()
        start_date = 域名("div", class_="post-time").域名p()
        # data = 域名time(start_date, \'%Y-%m-%d\').date()
        # 添加数据
        域名te(
            {"title": title, "title_link": title_link, "reply": reply, "browse": browse, "author": author,
             "data": start_date})
        print(title, title_link, reply, browse, author, start_date)
    域名p(1)

标签:编程
湘ICP备14001474号-3  投诉建议:234161800@qq.com   部分内容来源于网络,如有侵权,请联系删除。