首页 文章 精选 留言 我的

精选列表

搜索[自适应爬虫],共4643篇文章
优秀的个人博客,低调大师

Python爬虫+Go WebServer+Flutter App(GoLang篇)

1.前言 继第一篇Python篇,这是第二篇GoLang篇,通过Go设置web server 2.Go 开发设置 设置服务端监听,等待客户端请求;处理客户端请求,查询数据库,生成返回结果,发送给客户端. 2.1安装Go 从官网下载对应系统的安装包 安装完成,设置好环境变量 输入"go version",如果显示相应的go版本,则安装完成 zxl@zxl:~$goversion goversiongo1.12linux/amd64 2.2设置GOPATH 新建好go的工作空间根目录,将该目录设置为GOPATH 以linux为例 exportGOPATH=/home/zxl/workspace/my_github/go_test_server 2.3安装开发工具LiteIDE 通过下载链接选择最新版本,下载对应系统的安装包 打开LitelDE,选择菜单"工具"—>“编辑当前环境”,设置好GOROOT,GOPATH,PATH GOROOT=/usr/local/go GOPATH=/home/zxl/workspace/my_github/go_test_server PATH=$GOROOT/bin:$PATH 也可以选择菜单"工具"—>"管理GOPATH/Modules"设置每个工作空间的GOPATH 3.接口功能开发 接口主要响应客户端数据请求 3.1设置端口开启服务 如下代码所示,设置了端口为"9090"的服务,点击菜单"编译"—>“BuildAndRun”,则可以启动服务 在浏览器输入"http://localhost:9090/test",网页则显示"Hello astaxie!" packagemainimport( "fmt" "log" "net/http" "strings" http_handle"http_handle")funcsayhelloName(whttp.ResponseWriter,r*http.Request){ r.ParseForm()//解析参数,默认是不会解析的 fmt.Println(r.Form)//这些信息是输出到服务器端的打印信息 fmt.Println("path",r.URL.Path) fmt.Println("scheme",r.URL.Scheme) fmt.Println(r.Form["url_long"]) fork,v:=ranger.Form{ fmt.Println("key:",k) fmt.Println("val:",strings.Join(v,"")) } fmt.Fprintf(w,"Helloastaxie!")//这个写入到w的是输出到客户端的}funcmain(){ http.HandleFunc("/test",sayhelloName)//设置访问的路由 err:=http.ListenAndServe(":9090",nil)//设置监听的端口 iferr!=nil{ log.Fatal("ListenAndServe:",err) }} 3.2从数据库获取数据,响应客户端请求 3.2.1创建数据结构 packagedatatypeQsbkHotPicItemstruct{ Idstring AuthorNickNamestring AuthorGenderstring AuthorAgestring AuthorImgUrlstring Contentstring ThumbImgUrlstring StatsVoteContentstring StatsCommentContentstring StatsCommentDetailUrlstring Md5string}typeQsbkHotPicItemListstruct{ ItemList[]QsbkHotPicItem} 3.2.2创建数据库操作 packagebase_dbimport( "database/sql" "fmt" _"github.com/Go-SQL-Driver/MySQL")funcQuery(sql_strstring)(*sql.Rows,*sql.Stmt,*sql.DB){ fmt.Println("query::sql_str=",sql_str) db,_:=sql.Open("mysql","用户名:密码@tcp(zxltest.zicp.vip:42278)/数据库名") fmt.Println("query::open_db_err=",open_db_err) stmt,prepare_err:=db.Prepare(sql_str) fmt.Println("query::prepare_err=",prepare_err) rows,query_err:=stmt.Query() fmt.Println("query::query_err=",query_err) returnrows,stmt,db} 3.2.3响应客户端请求 以MySQL为例,导入数据库驱动 在命令行终端,输入go get -u github.com/go-sql-driver/mysql 匿名导入包_ "github.com/Go-SQL-Driver/MySQL" 导入数据解构"data" 导入数据库操作base_db "db" 其会自动下载驱动库,并放入到设置的GOPATH目录下 这样就可以完成代码开发,最后以json形式把数据返回给客户端 packagehttp_handleimport( "encoding/json" "fmt" "net/http" "strconv" "strings" _"github.com/Go-SQL-Driver/MySQL" "data" base_db"db")funcQsbkHotPicList(whttp.ResponseWriter,r*http.Request){ r.ParseForm()//解析参数,默认是不会解析的 fmt.Println(r.Form)//这些信息是输出到服务器端的打印信息 fmt.Println("path",r.URL.Path) fmt.Println("scheme",r.URL.Scheme) varlast_id=-1 iflen(r.Form["last_id"])>0{ last_id,_=strconv.Atoi(r.Form["last_id"][0]) } page,_:=strconv.Atoi(r.Form["page"][0]) page_size,_:=strconv.Atoi(r.Form["page_size"][0]) fmt.Println("last_id",last_id) fmt.Println("page",page) fmt.Println("page_size",page_size) varstart_index=page*page_size varend_index=page_size fmt.Println("start_index",start_index) fmt.Println("end_index",end_index) fork,v:=ranger.Form{ fmt.Println("key:",k) fmt.Println("val:",strings.Join(v,"")) } varsql_where="" iflast_id>0{ start_index=0 end_index=10 sql_where="WHEREid<"+strconv.Itoa(last_id)+"" } fmt.Println("sql_where",sql_where) varsql_str="SELECT"+ "id,author_nick_name,author_gender,author_age,author_img_url,content,thumb_img_url,stats_vote_content,stats_comment_content,stats_comment_detail_url,md5"+ "FROMjoke"+sql_where+ "ORDERBYidDESCLIMIT"+strconv.Itoa(start_index)+","+strconv.Itoa(end_index) rows,stmt,db:=base_db.Query(sql_str) varqsbkHotPicItemListdata.QsbkHotPicItemList forrows.Next(){ varid,author_nick_name,author_gender,author_age,author_img_url,content,thumb_img_url,stats_vote_content,stats_comment_content,stats_comment_detail_url,md5string rows.Scan(&id,&author_nick_name,&author_gender,&author_age,&author_img_url,&content,&thumb_img_url,&stats_vote_content,&stats_comment_content,&stats_comment_detail_url,&md5) fmt.Println("query::result=",id,author_nick_name,author_gender,author_age,author_img_url,content,thumb_img_url,stats_vote_content,stats_comment_content,stats_comment_detail_url,md5) varitem=data.QsbkHotPicItem{id,author_nick_name,author_gender,author_age,author_img_url,content,thumb_img_url,stats_vote_content,stats_comment_content,stats_comment_detail_url,md5} qsbkHotPicItemList.ItemList=append(qsbkHotPicItemList.ItemList,item) } deferrows.Close() deferstmt.Close() deferdb.Close() responseResult,responseError:=json.Marshal(qsbkHotPicItemList) fmt.Println("query::responseError=",responseError) fmt.Println("query::responseResult=",string(responseResult)) fmt.Fprint(w,string(responseResult))} 4.设置电脑外网可访问 由于我们当前调试都是本地局域网络,别人是访问不了我们的服务,因此我们需要提供外网功能,即内网穿透 可以通过花生壳教程完成内网穿透设置 最后将我们的端口为"9090"的服务启动,再开启花生壳内网穿透设置,就可以提供外网功能了

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册