Jsoup解析用Java

时间:2015-07-27 19:48:47

标签: java parsing jsoup

import java.io.IOException;
import java.util.ArrayList;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Node;
import org.jsoup.select.Elements;


public class listGrabber {
    public static void main(String[]args) {
        try {
            Document doc = Jsoup.connect("https://play.google.com/store/apps/category/GAME_ACTION/collection/topselling_free").get();
            int count = 0;
            Elements elements;
            String url;
            ArrayList<String> list = new ArrayList<>();
            do{
                elements = doc.select("a[class^=title]").get(count).select("a[class^=title]");

                url = "";
                url = elements.attr("abs:title").replaceAll("https://play.google.com/store/apps/category/GAME_ACTION/collection/","");
                url = url.replaceAll("®|™","");
                url = url.replaceAll("[(](.*)[)]","");
                list.add(url);
                System.out.println(url);
                count++;
            }while (url!="" &&url!=null);
            // String divContents =
            // doc.select(".id-app-orig-desc").first().text();
            // elements.remove("div");
        } catch (IOException e) {

        }
    }
}

如您所见,我试图从https://play.google.com/store/apps/category/GAME_ACTION/collection/topselling_free

中获取单词列表

每次滚动到页面底部时,Google Play商店页面都会加载更多元素。

我的程序将抓住显示的前40个元素,但由于jsoup没有加载动态加载的其余网页,我无法抓住前40个以外的任何元素。

此外,如果您在页面上滚动到游戏#300,则会出现“显示更多”按钮,我还想解析显示更多按钮之外的元素。

有没有办法让Jsoup解析会动态加载到页面上的所有元素?

1 个答案:

答案 0 :(得分:5)

编辑 - 在OP的一些评论之后,我完全理解了他想要实现的目标。我改变了一点原始解决方案并进行了测试。

您可以使用<table class="pure-table fullWidth myTable"> <tbody> <tr class="pure-table-odd"> <td> <label class="boldText">Bank</label> </td> <td> <label class="boldText">Japha Bank</label> </td> </tr> </tbody> </table> <br><br> <table class="pure-table fullWidth"> <tbody> <tr class="pure-table-odd"> <td> <label class="boldText">Bank</label> </td> <td> <label class="boldText">Japha Bank</label> </td> </tr> </tbody> </table>执行此操作。在第一页之后,获取下一个页面需要您使用一些标题发送JSOUP请求。标题包含(以及其他)起始编号和要获取的记录数。如果您发送非法号码(即您要求包含游戏号码700的页面但结果仅包含600场游戏),您将再次获得第一页。您可以循环浏览页面,直到获得已有的结果 有时服务器返回600个结果,有时只返回540,我无法理解为什么 代码是 -

post

代码可以进一步改进(比如以单独的方法处理所有列表),所以由你决定。
我希望这能帮到你。