【问题标题】:Going to next page when web scraping with Jsoup使用 Jsoup 抓取网页时转到下一页
【发布时间】:2021-06-28 14:11:21
【问题描述】:

我正在尝试使用 Jsoup 抓取此 https://www.actksa.com/ar/training-courses/training-in/Jeddah,我编写的代码仅获取第一页上的主题。

try {
                String url = "https://www.actksa.com/ar/training-courses/training-in/Jeddah";

                Document doc = Jsoup.connect(url).get();

                Elements data = doc.select("tr");
                int size = data.size();
                Log.d("doc", "doc: "+doc);
                Log.d("data", "data: "+data);
                Log.d("size", ""+size);
                for (int i = 0; i < size; i++) {

                    String title = data.select("td.wp-60")
                            .eq(i)
                            .text();

                    String detailUrl = data.select("td.wp-60")
                            .select("a")
                            .eq(i)
                            .attr("href");
                    parseItems.add(new ParseItem(title, detailUrl));
                    Log.d("items"," . title: " + title);

如何继续从下一页抓取主题? 我注意到我可能可以使用分页,但我不确定如何使用。其次,当转到下一页时,链接会略有变化,所以我可以使用它。转到下一页并继续抓取标题的代码是什么?

【问题讨论】:

    标签: java android-studio web-scraping jsoup html-parsing


    【解决方案1】:

    该站点的分页似乎由?page=&lt;int&gt; 查询参数控制。 只需将现有代码包装在将控制当前页面的 for 循环中。

    int numPages = 5; // the number of pages to scrape
    for (int i = 0; i < numPages; i++) {
        String url = "https://www.actksa.com/ar/training-courses/training-in/Jeddah?page=" + i;
    
        Document doc = Jsoup.connect(url).get();
    
        Elements data = doc.select("tr");
        int size = data.size();
        Log.d("doc", "doc: "+doc);
        Log.d("data", "data: "+data);
        Log.d("size", ""+size);
        for (int j = 0; j < size; j++) {
             String title = data.select("td.wp-60")
                    .eq(j)
                    .text();
             String detailUrl = data.select("td.wp-60")
                    .select("a")
                    .eq(j)
                    .attr("href");
            parseItems.add(new ParseItem(title, detailUrl));
            Log.d("items"," . title: " + title);
        }
    }
    

    如果您想在不硬编码数字的情况下获取所有页面,则将递增放在一个 while 循环中,当页面上的表格没有内容时该循环将中断。例如https://www.actksa.com/ar/training-courses/training-in/jeddah?page=6 不是一个有效的页面,只是显示一个带有空表的页面。

    【讨论】:

      猜你喜欢
      • 2019-04-14
      • 1970-01-01
      • 2013-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-05
      • 2019-08-03
      • 1970-01-01
      相关资源
      最近更新 更多