scrapy爬取起点中文网24小时热销榜单(将数据存到数据中)

系列文章目录

第一章:scrapy爬取起点中文网24小时热销榜单
第二章:scrapy爬取苏州二手房交易信息
第三章:scrapy爬取QQ音乐榜单歌曲及豆瓣电影信息
第四章:scrapy爬取起点中文网24小时热销榜单(将数据存到数据库中)


文章目录

前言

之前每次将爬虫得到的信息都存到了csv文件中,虽然可以用wps打开并进行修改,但是还有有一些不方便,这次就直接在程序中,将所的信息直接插到数据库中进行保存,对于日后的数据再次调用也方便了许多。


一、安装需要的库

1.安装数据库(博主选择的是mysql)
不是本次内容不说了,如果你的电脑是ubuntu可以看我另一篇博客
ubuntu20.04安装mysql5.7及Navicat
2.安装mysqlclient或者pymysql
这里简单说一下两者的区别
前者是由python和mysql共同开发的,是一个C的扩展模块,效率更快一些,但是安装编译较麻烦。
后者是一个纯python的驱动,可以直接用pip安装,但是效率略低一些。
博主前期用的是pymysql但现在已经换成mysqlclient,建议新手用pymysql如果是打算长期使用爬虫的还是用mysqlclient。根据自身需求决定吧。
安装pymysql直接 pip install pymysql
安装mysqlclient,也可以直接pip,但一般都会有编译错误,自己根据错误信息解决。

二、项目分析

1.数据抓取
本次项目是在第一章的项目上对数据进行了新的处理,对于数据的抓取并没有什么新的内容,略过。
2.创建数据表
如图创建五个数据字段,数据库操作不是本次内容,略过。
scrapy爬取起点中文网24小时热销榜单(将数据存到数据中)

三、代码编写

因此代码实在第一章的项目上进行改进,所以只说下需要修改的部分。

1.编写piplines(将数据插入数据库)

import MySQLdb

class MySQLPipeline(object):
    def open_spider(self,spider):#再spider开始之前,调用一次
		#这里的表名,用户名,密码都存储在settings中,下面每个get()中有两个参数
		#第一个就是从settings中获取配置信息,第二个当获取失败时采用的信息。
        db_name=spider.settings.get("MYSQL_DB_NAME","qidian")
        host = spider.settings.get("MYSQL_HOST", "localhost")
        user = spider.settings.get("MYSQL_USER", "root")
        password = spider.settings.get("MYSQL_PASSWORD", "123456")
        #连接mysql数据库
        self.db_conn=MySQLdb.connect(db=db_name,
                                     host=host,
                                     user=user,
                                     password=password,
                                     charset="utf8")

        self.db_cursor=self.db_conn.cursor() #建立游标尺

    def process_item(self,item,spider):#处理每一个item
        valuse=(item["name"],item["author"],item["type"],item["form"])

        #确定sql
        sql="insert into hot(name,author,type,form) value(%s,%s,%s,%s)"
        self.db_cursor.execute(sql,valuse)
        return item

    def close_spider(self,spider):#再spider结束时,调用一次
        self.db_conn.commit()#提交数据
        self.db_cursor.close() #删除游标尺
        self.db_conn.close() #断开链接

2.编写settings(编写配置信息)

在最下方加入数据库的配置信息

MYSQL_DB_DNNAME="qidian"
MYSQL_HOST="localhost"
MYSQL_user="root"
MYSQL_PASSWORD="123456"

开启piplines管道文件。

ITEM_PIPELINES = {
    'qidian_hot.pipelines.MySQLPipeline': 400,
}

3.修改start

from scrapy import cmdline

cmdline.execute("scrapy crawl hot" .split())

4.效果图

scrapy爬取起点中文网24小时热销榜单(将数据存到数据中)


总结

此次文章在内容抓取上没有什么新的内容,只是增加了将数据插入数据库,主要是为日后的代码复用提供便利。

上一篇:爬虫应用开发(python课程设计Ⅰ)


下一篇:基于 DHT 网络的磁力链接和BT种子的搜索引擎架构