资讯专栏INFORMATION COLUMN

Go抓取网页数据并存入MySQL和返回json数据<三>

niuxiaowei111 / 2454人阅读

摘要:主要抓取图片的五项数据。到这里只实现了数据的获取,但是需要使用向外部提供接口,下一节完成数据的获取和使用框架返回数据。

上一节主要实现了使用 goquery 从图片网站 http://www.gratisography.com/ 抓取数据。主要抓取图片的data-originalwidthheightalttype 五项数据。因此需要先创建数据库和相应的表,在mac上我使用 Sequel Pro 数据库管理软件,连接之后创建新的数据库indiepic,然后创建表gratisography:

CREATE TABLE `gratisography` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `img_url` varchar(255) DEFAULT NULL,
  `type_name` varchar(50) DEFAULT NULL,
  `title` varchar(255) DEFAULT NULL,
  `width` int(11) DEFAULT NULL,
  `height` int(11) DEFAULT NULL,
  `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=388 DEFAULT CHARSET=utf8;

创建完数据库之后,就开始使用GO来实现连接数据库等操作了。在GO中使用Go-MySQL-Driver is a lightweight and fast MySQL-Driver for Go"s (golang) database/sql package

文档:http://godoc.org/github.com/go-sql-driver/mysql

在使用之前需要先使用以下命令获取该包:

go get github.com/go-sql-driver/mysql

然后在database.go中引入:

package crawldata

import (
    "database/sql"
    _ "github.com/go-sql-driver/mysql"
)

然后写一个打开数据库的方法OpenDatabase:

package crawldata

import (
    "database/sql"
    _ "github.com/go-sql-driver/mysql"
)

func OpenDatabase() (*sql.DB, error) {
    // 连接数据库
    db, err := sql.Open("mysql", "root:mysql@tcp(xxx.xx.xx.xxx:3306)/databaseName?charset=utf8")
    if err != nil {
        return nil, err
    }
    return db, nil
}

上一节已在crawldata.go中写了InsertData(&imageDatas)方法,但是是注释的,先在就需要在该文件中实现该方法。

package crawldata

import (
    "database/sql"
    "fmt"
    _ "github.com/go-sql-driver/mysql"
    "strconv"
    s "strings"
)

func OpenDatabase() (*sql.DB, error) {
    // 连接数据库
    db, err := sql.Open("mysql", "root:mysql@tcp(xxx.xx.xx.xxx:3306)/databaseName?charset=utf8")
    if err != nil {
        return nil, err
    }
    return db, nil
}

/*
   该函数将获取的数据存储到数据库
*/
func InsertData(datas *ImageDatas) {
    imageDatas := *datas
    // 连接数据库
    db, err := OpenDatabase()
    if err != nil {
        fmt.Printf(s.Join([]string{"连接数据库失败", err.Error()}, "-->"))
    }
    defer db.Close()

    for i := 0; i < len(imageDatas); i++ {
        imageData := imageDatas[i]
        // Prepare statement for inserting data
        imgIns, err := db.Prepare("INSERT INTO gratisography (img_url, type_name, title, width, height) VALUES( ?, ?, ?, ?, ? )") // ? = placeholder
        if err != nil {
            fmt.Println(s.Join([]string{"拼装数据格式", err.Error()}, "-->"))
        }
        defer imgIns.Close() // Close the statement when we leave main()

        img, err := imgIns.Exec(s.Join([]string{"http://www.gratisography.com", imageData.Src}, "/"), imageData.Tp, imageData.Title, imageData.Width, imageData.Height)
        if err != nil {
            fmt.Println(s.Join([]string{"插入数据失败", err.Error()}, "-->"))
        } else {
            success, _ := img.LastInsertId()
            // 数字变成字符串,success是int64型的值,需要转为int,网上说的Itoa64()在strconv包里不存在
            insertId := strconv.Itoa(int(success))
            fmt.Println(s.Join([]string{"成功插入数据:", insertId}, "	-->	"))
        }
    }
}

到此已经完成了数据抓取并存入数据库,在命令行中切换到$GOPATH/src/indiepic目录下,然后运行:

go run indiepic.go

随后就可以看到数据被存入数据库了。
到这里只实现了数据的获取,但是需要使用GO向外部提供json接口,下一节完成数据的获取和使用web框架返回json数据。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/46537.html

相关文章

  • Go抓取网页数据存入MySQL返回json数据&lt;一&gt;

    摘要:下面需要的抓取数据和将数据存入数据库以及从数据库中获取数据都写为该包下的一个函数。一个与抓取数据有关,一个与数据库存取数据有关。文件夹结构如下下一步就开始实现数据抓取部分的功能。主要抓取图片网站 前言 很久前就想学习GO,但是由于准备读研和要实习就一直耽搁没动手,只是偶尔看一下相关的基本语法,并没有将其具体地运用到实际的编码中。大四了,课程一下子少了很多,于是决定用它从网上抓一些图片数...

    iOS122 评论0 收藏0
  • Go抓取网页数据存入MySQL返回json数据&lt;四&gt;

    摘要:上一节已将将需要的数据从网站抓取并存入数据库使用中的函数,现在需要将数据从数据库的表中取出并然会格式的数据。函数返回两个参数。虽然使用自己写一个请求很简单,但为了更好地处理路由和数据,这里使用一个框架。 上一节已将将需要的数据从网站http://www.gratisography.com/ 抓取并存入数据库【使用crawldata.go中的InsertData(&imageDatas)...

    TIGERB 评论0 收藏0
  • Go抓取网页数据存入MySQL返回json数据&lt;二&gt;

    摘要:首先在入口文件中引入项目下的包然后调用其中抓取数据的函数,暂时取名为使用包里面的抓取需要的数据存到数据库主函数然后就是实现包里面的函数。因此我们需要定义一个结构体来表示每一条数据包含的数据以及用于存储全部数据的一个切片,然后在函数中使用。 上一节已经说明了要做什么,以及整个小程序的目录结构,接下来就开始编码部分。首先在入口文件中引入项目下的包crawldata,然后调用其中抓取数据的函...

    zhonghanwen 评论0 收藏0
  • 运用Python网络爬虫抓取金融衍生品数据库的经典案例

      从行业角度来说,通过一步一步剖析,目标就是简易,新手入门requests网络爬虫及新手入门pandas数据剖析就能完成,文中关键为大家介绍Python网络爬虫抓取金融衍生品数据库的经典案例,感兴趣的小伙伴一起了解一下吧  哈喽大家好政胤今日教给大家抓取金融衍生品数据和信息  每日任务介绍  最先,顾客原消费是获得https://hq.smm.cn/copper网站里的价钱数据和信息(注:获得的...

    89542767 评论0 收藏0
  • Python如何读取千万级数据自动写入MySQL数据

      小编写这篇文章的一个主要目的,主要是去给大家去做一些相关的一些介绍,涉及到内容的还是比较多的,比如如何去进行读取千万级的一些数据,并且将这些数据去自动录入到系统里面。录入到系统里面之后,怎么才能够导入到MySQL数据库呢?下面就给大家详细解答下。  序言  Python数据如何去进行读取MySQL数据库呢?这类工作在生活当中是比较的普遍的,涉及到的内容也是相关的一些python数据库,包括数据...

    89542767 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<