"Mi primera experiencia con el lenguaje Go+" | La convocatoria de artículos está en curso...
Directorio de artículos
escribir delante
¡Es tal que! Personalmente, soy un amante del idioma Go. Me puse en contacto con Qiniu cuando era estudiante de primer año. ¡En los últimos días, Qiniuyun
Go+
me trajo a CSDN para escribir ensayos! ¡EntoncesGo+
escribiré un rastreador!
Inicialización del proyecto
¡Hemos completado la go+
construcción antes, y luego construyamos un proyecto! Úselo vscode
, porque goland
no hay complemento para goplus.
- crear un
.gop
archivo
- Escriba hola mundo para probar si se puede ejecutar
gop run main.gop
pero saldrá mal
¡Aquí indica que no se encuentra gop.mod!
¡En este punto, primero debemos gop mod
mirar el nombre del paquete! ¡Darse cuenta! ! ¡Debemos usarlo gop mod
!
Aunque se go mod
puede ejecutar, no es un gop mod sino un go mod. Utilicé go mod para init desde el principio, ¡pero el Sr. Xu dijo que necesitamos gop mod! !
Luego aparecerá este gop mod
archivo .
Entonces, ¡vamos a correr!
Habrá este error. En este momento, solo tenemos que seguir su solicitud, ir a buscar esto builtin
, y
luego podemos salir corriendo.
¡Entonces escribamos un rastreador en Go+!
1. Encuentra parpadeo
En cuanto a CSDN, ¡tienes que cambiar 新版
para ver parpadear! Tenía la versión anterior, así que primero cambié a la nueva.
lo encontramos
2. Página de análisis
Descubrimos que no hay una interfaz correspondiente para mostrar comentarios, por lo que después de hacer clic en más
, aparecerá esto, ¡y esta es nuestra dirección de rastreo!
Luego miramos esto url
, ¡el retorno es la información de comentario que necesitamos!
¡Luego nos fijamos en los parámetros de respuesta!
- pageNum es el número de página
- pageSize es el tamaño de la página
- blinkId es el id de este parpadeo
¡Entonces podemos dejar que pageNum=1
, pageSize=500
, devuelva todos los comentarios directamente!
¡cómodo!
3. Escribe el código
go-plus
Si no le gusta el aviso de que no hay un complemento en goland , puede vscode
crearlo en, para que pueda tener un aviso resaltado.
3.1 Enviar una solicitud
Usando el net/http
paquete, construya un 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 {
println 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 {
println err
}
bodyText, _ := ioutil.ReadAll(respSpider.Body)
3.2 Analizando los datos
json
Podemos ver que se trata de datos de formato estándar con solo mirar la respuesta .
Entonces podemos usar el json
paquete, que se string
convertirá en una estructurajson格式
var result BlinkResult
_ = json.Unmarshal(bodyText, &result)
3.3 Procesamiento y análisis de datos
- Ver todos los mensajes de este día hace 24 días
count := 0
// 如果存在20天前发表的内容,打印出内容
if ({
for item <- items, item.CreateTime == "24 天前"}) {
// 注意这里一定要有括号, 返回bool
for item <- items, item.CreateTime == "24 天前" {
count++
println item
}
printf("一共有%d人在24天前留言", count)
}
- Ver todas las reseñas en la plataforma de origen
for item <- items {
switch item.FromType {
case "CSDN-APP:Android:":
countAndroid++
userAndroid = append(userAndroid, item)
case "CSDN-APP:iOS:":
countIOS++
userIOS = append(userIOS, item)
case "pc":
countPC++
userPC = append(userPC, item)
default:
countOrder++
}
}
- Haz una pequeña actualización, contamos el tiempo promedio de comentarios de cada plataforma
countAndroid, countIOS, countPC, countOrder, all := 0, 0, 0, 0, len(items)
meanDayIOS, meanDayAndroid, meanDayPC := 0, 0, 0
tmp := 0
var userAndroid []LuckyBlinkPerson
var userIOS []LuckyBlinkPerson
var userPC []LuckyBlinkPerson
// 统计所有的来源平台以及平均评论天数
for item <- items {
switch item.FromType {
case "CSDN-APP:Android:":
countAndroid++
tmp, _ = strconv.Atoi(item.CreateTime[:2])
userAndroid = append(userAndroid, item)
meanDayAndroid += tmp
case "CSDN-APP:iOS:":
countIOS++
userIOS = append(userIOS, item)
tmp, _ = strconv.Atoi(item.CreateTime[:2])
meanDayIOS += tmp
case "pc":
countPC++
userPC = append(userPC, item)
tmp, _ = strconv.Atoi(item.CreateTime[:2])
meanDayPC += tmp
default:
countOrder++
}
}
printf("来自Android有:%d人 平均评论天:%d天前\n", countAndroid, meanDayAndroid/len(userAndroid))
printf("来自iOS有:%d人 平均评论天:%d天前\n", countIOS, meanDayIOS/len(userIOS))
printf("来自pc有:%d人 平均评论天:%d天前\n", countPC, meanDayPC/len(userPC))
printf("其他的有:%d人\n", countOrder)
printf("一共有%d人\n", all)
- Luego contamos cuántas personas comentaron ese día.
// 统计评论天数每一天有多少人评论
mapDay := map[string]int{
}
meanDayIOS, meanDayAndroid, meanDayPC = 0, 0, 0
for user <- items {
mapDay[user.CreateTime]++
}
for k, v <- mapDay {
printf("%s 评论了 %d 条信息\n", k, v)
}
安卓用户
Devuelve el apodo, el contenido y la hora de creación de todos los comentarios realizados en este día hace 20 días.
androidCommont := [[user.NickName, user.Content, user.CreateTime] for user <- userAndroid, user.CreateTime == "20 天前"]
if len(androidCommont) != 0 {
for androidInfo <- androidCommont {
println androidInfo
}
}
- Eliminar datos de comentarios de nombres de usuario duplicados
func removeBlinkRepByMap(slc []LuckyBlinkPerson) []LuckyBlinkPerson {
var result []LuckyBlinkPerson
tempMap := map[LuckyBlinkPerson]byte{
}
for _, e <- slc {
l := len(tempMap)
tempMap[e] = 0
if len(tempMap) != l {
result = append(result, e)
}
}
return result
}
3.4 Salida de todos los comentarios
var luckyBPList []LuckyBlinkPerson
for _, v <- commentList {
var luckBlinkPerson LuckyBlinkPerson
luckBlinkPerson.FromType = v.FromType
luckBlinkPerson.NickName = v.Nickname
luckBlinkPerson.CreateTime = v.CreateTime
luckBlinkPerson.Content = v.Content
luckyBPList = append(luckyBPList, luckBlinkPerson)
}
luckyBPList = removeBlinkRepByMap(luckyBPList)
for _, v <- luckyBPList {
println v.NickName, v.Content, v.CreateTime
}
El código completo está github
arriba:
https://github.com/CocaineCong/go-plus-demo
Resumir
Cómo debería decirlo, después de escribir el rastreador, parece un poco como escribir python. Después de todo, soy un estudiante de ciencia de datos y, a menudo, uso python para el procesamiento de datos...
El campo de Go+ está orientado al análisis de datos, ¡y el rastreador de Go+ es muy rápido! El rendimiento también es mejor que Python, y la sintaxis es similar.
¡Creo que el futuro de Go+ será tan bueno como el de su empresa fundadora 7777777
!
¡También espero poder aportar mi granito de arena a la comunidad de Go+ y dar uno Go+爬虫
a todos!