Go语言爬取Blink评论 | 小小的Blink有大大的动静
Posted 小生凡一
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go语言爬取Blink评论 | 小小的Blink有大大的动静相关的知识,希望对你有一定的参考价值。
写在前面
之前发了一个
blink
,本来只是想在blog
里面的评论送python的,但是blink
太多人了,所以又额外在blink
的评论中送一本java
书。那我们来看看Go语言如何爬取blink的评论吧~
前一阵子呢,写了一个Go语言
在博客评论区
抽奖的,今天给大家带来在blink评论区
的抽奖情况哈!
1. 找到blink
CSDN呢,要切换成新版
才能看到blink的!我本来是旧版的,就先切换一下新版。
我们就找到了
2. 分析页面
我们发现并没有相应的接口显示评论,所以我们点击更多之后
就会出现这个了,这个就是我们的爬取地址了!
然后我们看一下这个url
,返回就是我们所需要的评论信息!
然后我们看响应参数!
- pageNum就是页码
- pageSize就是页面大小
- blinkId就是这个blink的id了
那么我们可以直接让pageNum=1
,pageSize=500
,直接返回全部的评论!
舒服了!
3. 编写代码
3.1 发送请求
使用Go语言的net/http
,构造一个client
,
client := &http.Client{}
reqSpider, err := http.NewRequest("GET", "https://blink-open-api.csdn.net/v1/pc/blink/allComment?pageNum=1&pageSize=400&blinkId=1260435", nil)
if err != nil {
log.Fatal(err)
}
reqSpider.Header.Set("content-length", "0")
reqSpider.Header.Set("accept", "*/*")
reqSpider.Header.Set("x-requested-with", "XMLHttpRequest")
respSpider, err := client.Do(reqSpider)
if err != nil {
log.Fatal(err)
}
bodyText, _ := ioutil.ReadAll(respSpider.Body)
3.2 解析数据
我们通过刚刚查看响应的方式情况,可以看到这是标准的json
格式的数据,
所以我们在Go语言中
可以使用反序列化,将string
转化成结构体的json格式
var result BlinkResult
_ = json.Unmarshal(bodyText, &result)
3.3 数据处理
- 去除重复的数据
func removeBlinkRepByMap(slc []LuckyBlinkPerson) []LuckyBlinkPerson { //去除重复的元素
var result []LuckyBlinkPerson //存放返回的不重复切片
tempMap := map[LuckyBlinkPerson]byte{} // 存放不重复主键
for _, e := range slc {
l := len(tempMap)
tempMap[e] = 0 //当e存在于tempMap中时,再次添加是添加不进去的,因为key不允许重复
if len(tempMap) != l { // 加入map后,map长度变化,则元素不重复
result = append(result, e) //当元素不重复时,将元素添加到切片result中
}
}
return result
}
- 使用随机种子
func lotteryBlink(totalPerson []LuckyBlinkPerson) LuckyBlinkPerson { // 抽取中奖选手
rand.Seed(time.Now().UnixNano()) // 使用随机种子
index:=rand.Intn(len(totalPerson)) // 生成0到这个列表的长度的一个数字
return totalPerson[index] // 返回中奖选手
}
3.4 进行抽奖
fmt.Println("以下名单进行抽奖:")
for _, item := range luckyBPList {
fmt.Println(item.NickName)
}
fmt.Printf("本次抽奖共有 %d 人参与! \\n准备抽奖~\\n",len(luckyBPList))
for i := 3; i >= 1; i-- {
fmt.Println(i)
time.Sleep(1 * time.Second)
}
fmt.Println("恭喜这位选手中奖~")
luckDog := lotteryBlink(luckyBPList)
fmt.Printf("Blink中奖昵称是:%s 用户名是:%s 评论时间:%s 评论内容:%s\\n", luckDog.NickName,luckDog.UserName,luckDog.CreateTime,luckDog.Content)
抽中了这位幸运儿!已经联系这位选手啦~
4. 送书福利
关于这个送书的福利呢,是每周都会有的,所以小伙伴们总会有一次是分子
的!
喜欢的话,可以留意一下噢~
以上是关于Go语言爬取Blink评论 | 小小的Blink有大大的动静的主要内容,如果未能解决你的问题,请参考以下文章