首页 > 代码库 > 新浪微博热门评论抽取规则

新浪微博热门评论抽取规则

package weiboextractor;import java.util.HashSet;import java.util.Set;import org.apache.log4j.Logger;import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import org.jsoup.nodes.Element;import org.jsoup.select.Elements;/** * * @ClassName: WeiboExtrator * @Description: 微博抽取* @author zeze* @date 2016年11月27日 上午12:09:49 * */public class WeiboExtrator {    private static Logger logger = Logger.getLogger(WeiboExtrator.class);    // 热评翻页抽取    public int weiboExtratorPageNum(StringBuilder html) {        int num = 1;        Document doc = Jsoup.parse(html.toString());        // 没有热门评论,直接返回        Elements rt = doc.select("div[class=c]");        if (!rt.text().contains("返回评论列表")) {            logger.info("没有转发");            return 0;        }        if (doc.select("[id=pagelist]").text().contains("页")) {// 存在翻页            String pnum = doc.select("[id=pagelist]").get(0).text();            pnum = pnum.substring(pnum.indexOf("/") + 1).replace("页", "");            num = Integer.parseInt(pnum);        } else {            logger.info("热门评论小于10");        }        logger.info("热门评论页数:" + num);        return num;    }    public Set<String> weiboExtratorCommentList(StringBuilder html) {        Set<String> commentList=new HashSet<String>();        String zname = null;// 评论的用户名        String zid = null;// 评论的用户ID        String zzan = null;// 点赞数        String zmid = null;// 评论的消息id        String ztime = null;// 评论时间        String zsource = null;// 来源        String ztext = null;// 转发的内容        int cnt = 0;        Document doc = Jsoup.parse(html.toString());        Elements RTList = doc.select("div[class =c]");        for (Element result : RTList) {// 解析列表            // 点赞数            zzan = result.select("span[class=cc]").text();            if (zzan.equals("")) {// 过滤没有点赞标签                continue;            }            zzan = zzan.trim().substring(1).replace("[", "").replace("]", "").replace(" 回复", "");            if (result.select("a").size() > 0) {                zname = result.select("a").get(0).text();// 转发的用户名                zid = result.select("a").get(0).toString();// 转发的用户id                if (zid.indexOf("u/") == 10) {// 正常的用户id                    zid = zid.substring(zid.indexOf("\">") - 10, zid.indexOf("\">"));                } else {                    zid = zid.substring(zid.indexOf("/") + 1, zid.indexOf("\">"));                }            }            if (result.text().contains("查看更多热门"))                continue;            // 转发时间和来源            String tmp = result.select("span[class=ct]").text();            ztime = tmp.substring(0, tmp.indexOf("来自")).replace(" ", "");            zsource = tmp.substring(tmp.indexOf("来自") + 2);            // 转发的消息id            zmid = result.select("span[class=cc]").toString();            zmid = zmid.substring(zmid.indexOf("attitude") + 9, zmid.indexOf("attitude") + 18);            // 转发的内容            ztext = result.text();            if (ztext.contains("//@")) {                ztext = ztext.substring(ztext.indexOf(":") + 1, ztext.indexOf("//@")).replace(" ", "");            } else {                ztext = ztext.substring(ztext.indexOf(":") + 1, ztext.indexOf("   举报   ")).replace(" ", "");            }            // 用户ID,用户名,消息ID,消息内容,来源,赞数,发布时间            // zid,zname,zmid,ztext,zsource,zzan,ztime            cnt++;            String wString = zid + "|" + zname + "|" + zmid + "|" + ztext + "|" + zsource + "|" + zzan + "|" + ztime;            commentList.add(wString);            //logger.info(cnt + ":" + wString);        }        return commentList;    }}

 

新浪微博热门评论抽取规则