美文网首页
从0搭建区块链资讯网站(6-4)pipelines并入库

从0搭建区块链资讯网站(6-4)pipelines并入库

作者: 子鱼文业 | 来源:发表于2018-07-23 23:05 被阅读0次

    上一节已经将爬虫,items编写完成, 本节我们将完成pipelines的编写,以及入库的操作,如下是详细步骤:

    1. 首先新建一个mysqlpipelines的包,然后新建两个文件,一个是我们的pipelines,一个是sql的模块,如下

    新建模块

    2. 在setting 文件里面,编写我们的pipilines的引用:

    settings

    3. Settigns 编写mysql的基本配置

    mysql

    4.  完成后,我们来编写SQL中的两个方法,一个是插入数据库的方法,一个是查看数据库中是否已经有这条记录的方法

    # -*- coding: utf-8 -*-

    import pymysql.cursors

    import traceback

    from ArticleSpider import settings

    MYSQL_HOSTS = settings.MYSQL_HOSTS

    MYSQL_USER = settings.MYSQL_USER       

    MYSQL_PASSWORD = settings.MYSQL_PASSWORD

    MYSQL_ROOT = settings.MYSQL_ROOT

    MYSQL_DB = settings.MYSQL_DB

    #数据库连接

    cnx = pymysql.Connect(user=MYSQL_USER, password = MYSQL_PASSWORD, host = MYSQL_HOSTS, database = MYSQL_DB, charset='utf8')

    cur = cnx.cursor()

    class Sql:

        #插入数据库

        @classmethod

        def insert_artical(cls,xs_title,xs_a_url, xs_image, xs_publish_time,xs_content, xs_desc,xs_source):

            sql = "INSERT INTO articals (title,url,image,publish_time,content,describ,source) values (%s,%s,%s,%s,%s,%s,%s)"

            value =(xs_title,xs_a_url, xs_image, xs_publish_time,xs_content, xs_desc,xs_source)

            try:

                cur.execute(sql , value)

                cnx.commit()

            except Exception as e:

                cnx.rollback()

                print('事务处理失败', e)

                traceback.print_exc()

        #查看是否已经有这条记录的方法       

        @classmethod

        def checkin_url(cls, xs_a_url):

            sql = "select url from articals where url = (%s)"

            cur.execute(sql, xs_a_url)

            results = cur.fetchall()

            cnx.commit()

            return results

    5. 然后在pipelines中,调用这个方法,将items中的数据插入数据库

    '''

    Created on 2018年7月16日

    @author: wenye.sun

    '''

    from ArticleSpider.items import ScrapyArticleItem

    from .sql import Sql

    class BitPipline(object):

        def process_item(self,item,spider):

            if spider.name == 'jianwen':

                if isinstance(item, ScrapyArticleItem):

                    xs_title = item['title'],

                    xs_a_url = item['a_url'],

                    xs_image = item['image'],

                    xs_publish_time = item['publish_time'],

                    xs_content = item['content'],

                    xs_desc = item['desc'],

                    xs_source = item['source'],

                    #查看是否已经存在了             

                    check_result = Sql.checkin_url(xs_a_url)

                    lens = len(check_result)

                    if(lens != 0):

                        print('已经存在')           

                    else:

                        #不存在则插入到库中

                        Sql.insert_artical(xs_title,xs_a_url, xs_image, xs_publish_time,xs_content, xs_desc,xs_source)

                        print('插入成功')   


    6. 接下来就是创建数据库的操作了,如下是创建数据库表的操作:

    首先用root用户登录数据库: mysql -u root -p

    登录后,创建一个用户,并指定密码:CREATE USER 'username'@'%' IDENTIFIED BY 'password';  把username和password这里替换为你自己的用户名和密码即可

    然后将所有权限赋予这个用户:

    GRANT ALL ON *.* TO 'username'@'%'; 

    flush privileges;

    然后创建一个新的数据库:CREATE DATABASE wechat;

    这时候用show databases; 就可以看到我们刚刚创建的数据库了

    使用 use wechat; 切换到我们新创建的数据库中

    然后使用下面语句创建我们的数据库表格

    create table articals( id int(255) NOT NULL AUTO_INCREMENT , title VARCHAR(255), url VARCHAR(255) ,

      image VARCHAR(255),

      publish_time VARCHAR(255),

      content BLOB(0),

    source VARCHAR(255),

    describ VARCHAR(255),

    visable INT(255),

        PRIMARY KEY ( id ));

    创建数据库成功以后,使用show tables; 可以查看刚刚创建的数据库。


    最后我们写一个测试的入口函数,来调用对应的爬虫,entry.py:

    '''

    Created on 2018年7月19日

    @author: wenye.sun

    '''

    # -*- coding: utf-8 -*-

    import os

    os.system('scrapy crawl jianwen')

    执行后,我们将看到执行的结果如下:

    插入成功

    同时数据库中也有了我们抓取来的20条数据

    数据结果

    我们从新抓取一遍,也可以看到数据库并未重复抓取

    已存在

    如下是我们整个项目的目录结构:

    目录

    后续可以在spiders里面去扩展我们想要抓取的网址,并优化spider文件。

    接下来就是将我们整个项目打包放到服务器上去,在服务器上需要做的事情如下:

    1. 同样的操作创建数据库

    2. 将代码放在服务器上运行抓取入库

    3. 至此我们的数据准备工作已经完成

    接下来将要做网站部分的内容,当然目前爬虫的第一版本非常粗糙,还有很多要改进的点,包括:

    1. Linux上的每日自动执行

    2. 爬虫内容去重

    3. 图片本地保存

    4. 更多的字段填充

    以上内容将在后续慢慢优化更新。


    相关文章

      网友评论

          本文标题:从0搭建区块链资讯网站(6-4)pipelines并入库

          本文链接:https://www.haomeiwen.com/subject/hxeupftx.html