【Go语言实战】(6) 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. 送书福利

关于这个送书的福利呢,是每周都会有的,所以小伙伴们总会有一次是分子的!
喜欢的话,可以留意一下噢~

猜你喜欢

转载自blog.csdn.net/weixin_45304503/article/details/121198961