jsoup爬取网站内容,感觉是一件很神奇的事。如果爬取的内容进行非法的传播或进行商业用途,可能会收到法院的传票(被仲裁),所以请确认你的用途,以免官司或牢狱之苦。总而言之,且爬且谨慎吧。

本例中,目标站点为喜马拉雅,这也是我最喜欢的平台(没有之一)。​喜马拉雅是一个非常不错的知名音频分享平台,内容十分丰富。不管你是学生党,......,上班族等,喜马拉雅总有你想听的内容。推荐喜马拉雅,你值得拥有。

免责声明:喜马拉雅平台,作者爬取内容,纯属练习技术,并没有进行盈利以及商业活动。如果贵平台不想我的这个博客继续存在于互联网中,请通知我,我立即删除。谢谢!

打开网页(地址在代码中)后,按F12或者浏览器(我使用的是谷歌浏览器)页面右击检查,看到如下截图:

jsoup爬取网站内容_Jsoup

根据上图,分析DOM结构等信息。

其他的不多说,直接贴代码

public class JsoupTest {
public List<Map<String, String>> list = new ArrayList<Map<String, String>>();
@Test
public void getPageContent() throws Exception{
String url = "https://www.ximalaya.com/renwen/3048185/";
Document doc = doc(url);
Integer totalPages = getTotalPages(doc);
if(totalPages > 0){
for (int i = 1; i <= 43; i++) {
System.out.println("当前页码为: " + i);
if(i == 1){
printContent(doc,i);
}else{
String nextPageUrl = url + "p"+i+"/";
Document tempDoc = doc(nextPageUrl);
printContent(tempDoc, i);
}
Thread.sleep(5000);//爬一页,歇息5s,让目标网站认为是认为操作
}
System.out.println(list);
System.out.println(list.size());
}
}

public void printContent(Document doc, int pageNum){
Elements divTexts = doc.select("div[class=\"text _tr\"]");
if (divTexts.size() > 0) {
int countor = 0;
String currentPage = "第" + pageNum + "页:\r\n";
Map<String, String> map = new HashMap<String, String>();//爬取内容的集合
StringBuffer sb = new StringBuffer();
for (Element element : divTexts) {
countor++;
String text = element.getElementsByTag("a").text();
String content = countor + ": " + text;
sb.append(content);
sb.append("\r\n");
}
map.put(currentPage, sb.toString());
list.add(map);
}
}

/**
* 获取一共多少页
*/
public Integer getTotalPages(Document doc) throws Exception{
Integer totalNum = 0;
if (doc != null) {
Elements totalPages = doc.select("span[class=\"_aTOY\"]");
if (totalPages.size() > 0) {
for (Element element : totalPages) {
String getNum = element.text();
//System.out.println("getNum : " + getNum);
if (getNum != null && !"".equals(getNum) && isNum(getNum)) {
Integer pageNum = Integer.valueOf(element.text());
if (pageNum > totalNum) {
totalNum = pageNum;
}
}
}
System.out.println("totalPageNum = " + totalNum);
} else {
System.out.println("没有获取总页数");
}
}else{
System.out.println("没有爬取到任何内容");
}
return totalNum;
}

/**
* 爬取页面内容
*/
public Document doc(String url) throws Exception{
Document doc = null;
try {
doc = Jsoup.connect(url).get();
} catch (Exception e) {
e.printStackTrace();
System.out.println("爬取内容时异常!");
}
return doc;
}

/**
* 验证是否是数字
*/
public boolean isNum(String pageNum){
String regex = "^\\d+$";
boolean matches = Pattern.compile(regex).matcher(pageNum).matches();
return matches;
}
}

学无止境!勤奋不是嘴上说说而已,而是要实际行动。加油!