GO语言工程在线词典和其实现
在线词典
以彩云科技提供的在线翻译为例。打开彩云翻译的网页,然后右键检查打开浏览器的开发者工具。
1.抓包
找到network 点击翻译按钮,浏览器会发送一系列请求,我们能很轻松地找到那个用来查询单词的请求。
找到这个dict post的请求
然后我们找到这个请求后,右键这个请求,copy一下,选择copy as cURL(bash)
2.生成代码
在 Golang 里面去发送这个请求。手写代码的话比较麻烦,在此老师提供了一种方法
打开老师提供的网站curlconverter.com/
获得以下代码,将这个代码粘贴到编辑器中
go
复制代码
package main
import (
"fmt"
"io"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{"trans_type":"en2zh","source":"nice"}`)
req, err := http.NewRequest("POST", "https://api.interpreter.caiyunai.com/v1/dict", data)//创建请求
if err != nil {
log.Fatal(err)
}
//设置请求头
req.Header.Set("authority", "api.interpreter.caiyunai.com")
req.Header.Set("sec-ch-ua", `" Not A;Brand";v="99", "Chromium";v="8"`)
req.Header.Set("sec-ch-ua-mobile", "?0")
req.Header.Set("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.1.4031 SLBChan/103")
req.Header.Set("app-name", "xy")
req.Header.Set("content-type", "application/json;charset=UTF-8")
req.Header.Set("accept", "application/json, text/plain, */*")
req.Header.Set("device-id", "19d327dca1394d0846bd1495388c4a91")
req.Header.Set("os-type", "web")
req.Header.Set("x-authorization", "token:qgemv4jr1y38jyq6vhvi")
req.Header.Set("origin", "https://fanyi.caiyunapp.com")
req.Header.Set("sec-fetch-site", "cross-site")
req.Header.Set("sec-fetch-mode", "cors")
req.Header.Set("sec-fetch-dest", "empty")
req.Header.Set("referer", "https://fanyi.caiyunapp.com/")
req.Header.Set("accept-language", "zh-CN,zh;q=0.9")
resp, err := client.Do(req)//发起请求
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := io.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
将上述代码运行之后,我们可以得到
但是之前输入是固定的,我们是要从一个变量来输入,我们需要用到JSON序列化
3.生成解析 request body
因为请求得到的内容是个字符串,而且有很多不需要的信息,接下来就是要把得到的字符串转为JSON
。
需要定义一个结构体与请求后的response
来对应起来用来接收数据,通过JSON
反序列化到结构体里即可。
因为response
返回的数据非常多而且复杂,自己书写起来很容易出错,所以我们可以通过在线生成代码工具来帮助我们生成代码。
打开这个网站,把浏览器response
的内容复制到网站里点击转换-嵌套
就能生成对应的结构体。
删除无用的字段,得到结果如下:
go
复制代码
type DictResp struct {
Dictionary struct {
Prons struct {
EnUs string `json:"en-us"`
En string `json:"en"`
} `json:"prons"`
Explanations []string `json:"explanations"`
} `json:"dictionary"`
}
接下来是对请求响应体进行JSON反序列化:
go
复制代码
var dictResp DictResp
err = json.Unmarshal(bodyText, &dictResp)
if err != nil {
log.Fatal(err)
}
fmt.Println(word, "UK:", dictResp.Dictionary.Prons.En, "US:", dictResp.Dictionary.Prons.EnUs)
for _, item := range dictResp.Dictionary.Explanations {
fmt.Println(item)
}
3.心得体会
本项目考察我们对爬取网站的基本能力的要求,重点在于序列化和反序列化的相关处理,打开了我对网页抓包的新思路。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgajbhc
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01