目标:统计斗鱼(www.douyu.com)人数
思路:
1. 目录找到douyu播出的所有游戏 http://www.douyutv.com/directory
2. 借助 chrome 定位到每个游戏的目录页面,正则表达式为 /directory/game/\\w+
比如对于LOL来说,找到 href=/directory/game/LOL
3. 进入到游戏目录后,借助 chrome 得到 xpath, 定位到各个主播的人数
比如某个主播的观众数 //*[@id="item_data"]/ul/li[2]/a/div[1]/p/span[1]
推出人数的位置规律为 //*[@id="item_data"]/ul/li[number]/a/div[1]/p/span[1]
4. code 如下
public class DouyuViewerStat implements PageProcessor { private Site site = Site.me().setDomain("http://www.douyutv.com/") .addStartUrl("http://www.douyutv.com/directory"); @Override public void process(Page page) {// System.out.println(page); List<String> links = page.getHtml().links().regex("/directory/game/\\w+").all(); for(String link: links) { page.addTargetRequest("http://www.douyutv.com"+link); } // System.out.println(links); page.putField("userName", page.getHtml().xpath("//*[@id=\"item_data\"]/ul/li[1]/a/div[1]/h1")); page.putField("viewerNumber", page.getHtml().xpath("//*[@id=\"item_data\"]/ul/li[1]/a/div[1]/p/span[1]")); } @Override public Site getSite() { return site; } public static void main(String args[]) { Spider.create(new DouyuViewerStat()) .addPipeline(new ConsolePipeline()) .run(); }}
时间: 2025-01-02 00:12:12