我从/ 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&after=t3_1teq33
http://www.reddit.com/r/pics/?count=25&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+&after=(\\w+)
after
编号最大的url可将其转到下一页。最好还是在reddit api周围使用任何Java包装器。
关于java - 抓取多于一页的逻辑时遇到麻烦,仅适用于第一页和第二页,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20726304/