但是很快就遇到了问题,因为排行榜的数据是分页的,我们请求一次只能得到30条数据,于是我们找到了“更多”按钮,发现里面通过ajax异步的请求了一条链接获取数据。
https://www.taptap.com/ajax/top/played?page=2&total=30page就代表的页数,根据排行榜总数量150,每页30条可以得出一共有5页。这样我们就可以循环5次去请求所有的数据了
func ReqRankPage(page int) { res, err := http.Get("https://www.taptap.com/ajax/top/" + rankTypeName + "?page=" + strconv.Itoa(page)) if err != nil { log.Fatal(err) } defer res.Body.Close() if res.StatusCode != 200 { log.Fatalf("status code error: %d %s", res.StatusCode, res.Status) } jsonBs, err := ioutil.ReadAll(res.Body) tPageJson := TPageJson{} err = json.Unmarshal(jsonBs, &tPageJson) if err != nil { fmt.Println("解析json错误", err) } var htmlRead io.Reader = strings.NewReader(tPageJson.Data.Html) doc, err := goquery.NewDocumentFromReader(htmlRead) if err != nil { log.Fatal(err) } doc.Find(".taptap-top-card").Each(func(i int, selection *goquery.Selection) { ParseGameInfoCell(selection) }) }这样就可以把爬取下来的数据,写成文件,生成出一张张的词云进行分析啦
总结第一次玩爬虫,所以写的不是很好,爬虫还有很多技术,本文里都没有涉及。如防止反爬,账号登陆等。写这个也是想多写一点go代码,以后可能会把go作为我的主语言进行开发
接下来研究下爬取网易云音乐~ 嘿嘿嘿