博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Go语言爬虫项目将结果写入MySql数据库
阅读量:2492 次
发布时间:2019-05-11

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

来源于Google资深工程师深度讲解Go语言

package mainimport (	"fmt"	"io/ioutil"	"net/http")const url = "http://www.zhenai.com/zhenghun"func main() {	//发送get请求	resp, err := http.Get(url)	if err != nil {		panic(err)	}	//关闭通道	defer resp.Body.Close()	//判断状态	if resp.StatusCode != http.StatusOK {		fmt.Errorf("StatusCode:%v \n", http.StatusOK)	}	//输出结果	all, err := ioutil.ReadAll(resp.Body)	if err != nil {		fmt.Errorf("ReadAll: %s ", err)	}	fmt.Printf("%s\n",all)}

可以将整个html页面爬取下来

正则表达式处理

package mainimport (	"fmt"	"io/ioutil"	"net/http"	"regexp")//const url = "http://www.baidu.com"const url = "http://www.zhenai.com/zhenghun"func main() {	//发送get请求	resp, err := http.Get(url)	if err != nil {		panic(err)	}	//关闭通道	defer resp.Body.Close()	//判断状态	if resp.StatusCode != http.StatusOK {		fmt.Errorf("StatusCode:%v \n", http.StatusOK)	}	//输出结果	all, err := ioutil.ReadAll(resp.Body)	if err != nil {		fmt.Errorf("ReadAll: %s ", err)	}	printListCity(all)}// 获取城市,urlconst cityListRe = `]*>([^<]*)`func printListCity(contents []byte) {	rg := regexp.MustCompile(cityListRe)	allSubmatch := rg.FindAllSubmatch(contents, -1)	for _, m := range allSubmatch {		fmt.Printf("%s\n ", m[1])		fmt.Printf("%s\n ", m[2])	}}

结果

http://www.zhenai.com/zhenghun/zhuhai 珠海 http://www.zhenai.com/zhenghun/zhumadian 驻马店 http://www.zhenai.com/zhenghun/zhuzhou 株洲 http://www.zhenai.com/zhenghun/zibo 淄博 http://www.zhenai.com/zhenghun/zigong 自贡 http://www.zhenai.com/zhenghun/ziyang1 资阳 http://www.zhenai.com/zhenghun/zunyi 遵义

将结果存入数据库

  • 注意的是id为自增长的主键,不参与golang语言的表结构展示,特别是在插入时,不应该算入在内
const cityListRe = `]*>([^<]*)`func mySql(contents []byte) {	//用户名:密码^@tcp(地址:3306)/数据库	db, err := sql.Open("mysql", "root:Kou123$%^@tcp(39.107.87.114:3306)/zhenai?charset=utf8")	if err!=nil {		fmt.Println(err)		return	}	//表结构	type info struct {		city string `db:"city"`		url string `db:"url"`	}	//查询表	rows,err:=db.Query("SELECT * FROM city_url_id")	//遍历打印	for rows.Next(){		var s info		err=rows.Scan(&s.city,&s.url,)	}		//执行MySql语句	rg := regexp.MustCompile(cityListRe)	allSubmatch := rg.FindAllSubmatch(contents, -1)	for _, m := range allSubmatch {		//fmt.Printf("%s\n ", m[1])		//fmt.Printf("%s\n ", m[2])		//插入语句		db.Exec("INSERT INTO city_url_id(city,url)VALUES (?,?)",  m[1], m[2])	}	rows.Close()}

在这里插入图片描述

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

你可能感兴趣的文章
【2020-3-21】Mac安装Homebrew慢,解决办法
查看>>
influxdb 命令行输出时间为 yyyy-MM-dd HH:mm:ss(年月日时分秒)的方法
查看>>
已知子网掩码,确定ip地址范围
查看>>
判断时间或者数字是否连续
查看>>
docker-daemon.json各配置详解
查看>>
Docker(一)使用阿里云容器镜像服务
查看>>
Docker(三) 构建镜像
查看>>
Spring 全家桶注解一览
查看>>
JDK1.8-Stream API使用
查看>>
cant connect to local MySQL server through socket /tmp/mysql.sock (2)
查看>>
vue中的状态管理 vuex store
查看>>
Maven之阿里云镜像仓库配置
查看>>
Maven:mirror和repository 区别
查看>>
微服务网关 Spring Cloud Gateway
查看>>
SpringCloud Feign的使用方式(一)
查看>>
SpringCloud Feign的使用方式(二)
查看>>
关于Vue-cli+ElementUI项目 打包时排除Vue和ElementUI
查看>>
Vue 路由懒加载根据根路由合并chunk块
查看>>
vue中 不更新视图 四种解决方法
查看>>
MySQL 查看执行计划
查看>>