首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Java提取html代码

用Java提取html代码
EN

Stack Overflow用户
提问于 2015-05-19 23:00:06
回答 1查看 66关注 0票数 0

我从Facebook上下载了我的个人数据,我想我可以用它做一些有趣的事情。我正在尝试提取我拥有的特定群聊。

我使用的文件的大小是18 kB,所以它是很多html代码,在标签中没有任何id或任何有助于提取数据的东西。我所有聊天的唯一区别是涉及的人不同,所以这就是我开始检查的原因。

我正在使用Jsoup (http://jsoup.org/)来做这件事。文档的层次结构排序如下:

代码语言:javascript
复制
<div class="thread">
    <div class="message">
       <div class="message_header">
            <span class="user">user_name</span>
            <span class="meta"> date_when_said </span> 
       </div>
    </div>
       <p>user_said_something</p>
</div> //div class thread ends
<div class="thread"> //new group chat begins 

我开始只是计算聊天中的每个人说了多少次。

代码语言:javascript
复制
for(int i = 0; i < doc.select("div[class=thread]").size(); i++){
   if (doc.select("div[class=thread]").get(i).ownText().equals(chat_name)) {
         int children = doc.select("div[class=thread]").get(i).children()
                .size();
         int traverse = 0;

         while (traverse <= children) {
         
            switch (doc.select("span[class=user]").get(traverse).ownText()) {
                    case user_one:
                wordSaid[0] += 1;
                break;
            case user_two:
                wordSaid[1] += 1;
                break;
             }
         }
      }

我在这里所做的是,我首先使用for循环检查所有不同的聊天。然后,我检查该线程的文本是否等于我想要提取的聊天内容。如果是,那么我开始向下迭代该线程的所有子线程。

由于一个线程的子线程最多可以包含2000个子线程,这需要很长时间。

我很高兴对我所做的事情有任何建议或评论,这样我就可以改进这一点,使其具有可扩展性,也许还能找到一种聪明的方法来解决我的任务。

EN

回答 1

Stack Overflow用户

发布于 2015-05-19 23:17:13

假设<span class="user">user_name</span>只发生在用户在聊天中说什么之前,你可以:

  • 创建映射,关键字是用户名,值是用户对每个条目表示的所有用户条目的次数doc.select("span[class=user]")
    • 获取具有该用户名的映射条目如果该条目存在,则将该值递增1,否则创建该条目并将该值初始化为one

这种方法的优点是,您不必计算子文件的数量并遍历整个XML文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30329253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档