jsoup爬取网站内容

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

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

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

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

jsoup爬取网站内容_第1张图片

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

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

public class JsoupTest {
	public List> list = new ArrayList>();
	@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 map = new HashMap();//爬取内容的集合
			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;
	}
}

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

你可能感兴趣的:(java)