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=1pageSize=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有大大的动静的主要内容,如果未能解决你的问题,请参考以下文章

CSDN APP 2021年最后一版发布:Blink升级为微社区评论内容支持长按举报……2021.12.20

我的Go+语言初体验——用Go+写个爬虫并进行数据处理

官宣!阿里Blink和Flink合并计划出炉

2022 个人工作年度总结

这一年多来,阿里Blink测试体系如何从0走向成熟?

cocos creator blink闪烁动画怎么没有效果