我从/ r / pics开始抓取reddit。我在html中搜索下一页。当我在/ r / pics中启动时它可以工作,然后例如

http://www.reddit.com/r/pics/?count=25&after=t3_1tem9l


抓取此网址后,将其设置为当前网址,然后再次抓取,但它始终会返回相同的网址,而不是下一个。我觉得我错过了一些重要的事情,但是对我来说代码看起来已经完成了。

public void getNextPage() {
    Document doc;
    try {
        doc = Jsoup.connect(url).get();
            System.out.println(url);
        Elements next = doc.getElementsByTag("span");
        for (Element n : next) {
            if (n.className().equals("nextprev")) {
                Pattern pattern = Pattern
                        .compile("http://www.reddit.com/r/\\w+/\\?count=\\w+&after=\\w+");
                Matcher matcher = pattern.matcher(n.toString());
                if (matcher.find()) {
                    System.out.println(matcher.group());
                    url = matcher.group();
                }
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    }finally{
        System.out.println(url);
    }


}


该url是一个实例变量,因此在我运行getNextPage()之后应该更改它。这是主要的

public static void main(String[] args) {
        Scraper scraper = new Scraper();
        int i = 0;
        while (i < 3) {
            i++;
            scraper.getNextPage();
        }

    }


这是结果

http://www.reddit.com/r/pics/
http://www.reddit.com/r/pics/?count=25&amp;after=t3_1teq33
http://www.reddit.com/r/pics/?count=25&amp;after=t3_1teq33


返回的第三个网址只是第二个网址的重复,应该为count = 75。在我决定暂时放弃之前,被困了一段时间。

编辑:

我认为是因为在单击“ next”之后,现在有一个“上一个”和“下一个”。我的正则表达式可能无法获取网址...需要弄清楚如何解决它

最佳答案

Jsoup可能支持xpath。您正在寻找的xpath查询是:

//span[@class='nextprev']/a[2]/@href


而不是依赖正则表达式,这可能会更容易。

如果您要使用正则表达式,请捕获正则表达式的after部分。最高计数将URL转到下一页。

http://www.reddit.com/r/\\w+/\\?count=\\w+&amp;after=(\\w+)


after编号最大的url可将其转到下一页。

最好还是在reddit api周围使用任何Java包装器。

关于java - 抓取多于一页的逻辑时遇到麻烦,仅适用于第一页和第二页,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20726304/

10-13 04:22