博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Go抓取网页数据并存入MySQL和返回json数据<三>
阅读量:6434 次
发布时间:2019-06-23

本文共 2909 字,大约阅读时间需要 9 分钟。

上一节主要实现了使用 从图片网站 抓取数据。主要抓取图片的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中使用 is a lightweight and fast MySQL-Driver for Go's (golang) database/sql package

文档:

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

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

然后在database.go中引入:

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

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

package crawldataimport (    "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 crawldataimport (    "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}, "\t-->\t"))        }    }}

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

go run indiepic.go

随后就可以看到数据被存入数据库了。

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

转载地址:http://yhhga.baihongyu.com/

你可能感兴趣的文章
下一代网络安全将全部基于行为识别
查看>>
纽瓦克市政厅电脑遭勒索软件劫持,部分公共服务被迫瘫痪
查看>>
Ixia张林辉:测试系统让SDN更“迷人”
查看>>
IBM致梁允超:乘着新技术东风 SaaS100+让汤臣“倍”加健壮
查看>>
大数据,大格局,大发展
查看>>
蒙克:云计算安全问题被夸大
查看>>
中国人工智能学会通讯——最优传输理论在机器学习中的应用 1.1 最优传输理论与 WGAN 模型...
查看>>
WD强势出击 推出全球业界首款2TB硬盘
查看>>
外媒:为何说中国对美国科技行业的影响与日俱增
查看>>
2016云栖大会马云畅谈未来五大创新趋势
查看>>
数据中心机房设计及各专业技术平衡
查看>>
如何在Linux下安装PyCharm
查看>>
收集Java面试题知识点(Java基础部分三)
查看>>
全新WiFi技术问世 更适合智能家庭和物联网
查看>>
开机慢 不换SSD如何提升Windows 10开机速度
查看>>
Android键盘面板冲突 布局闪动处理方案
查看>>
阿里云E-MapReduce 创建执行计划
查看>>
数据中心里的应急关机技术
查看>>
偏见为什么是数据科学领域的一个大问题
查看>>
SAS实现四十年连续增长,2015年全球营收达31.6亿美元
查看>>