java实现网络爬虫,从网上爬取资源到本地

一个java实现的网络爬虫,从网上爬取文章保存到本地

1.创建maven项目导入依赖

<dependencies>
	<dependency>
		<groupId>org.jsoupgroupId>
		<artifactId>jsoupartifactId>
		<version>1.12.1version>
	dependency>
	<dependency>
		<groupId>junitgroupId>
		<artifactId>junitartifactId>
		<version>4.12version>
		<scope>compilescope>
	dependency>
	<dependency>
		<groupId>log4jgroupId>
		<artifactId>log4jartifactId>
		<version>1.2.17version>
	dependency>
dependencies>

jsoup是对网页进行解析的一个类

2.打开搜狐网址,找到我们需要的内容

java实现网络爬虫,从网上爬取资源到本地_第1张图片

这是获取到文章的标题和连接,然后需要获取到文章里的内容,点击链接,查看文章,

java实现网络爬虫,从网上爬取资源到本地_第2张图片

下面是代码实现

2.编写爬取文章的代码,这里测试的是搜狐网上的文章

	public void spiderTest() throws IOException {
//		声明要访问的网站,get请求方式
		Document document = Jsoup.connect("http://news.sohu.com/").get();
//		获取到指定元素的集合---这个方法是根据css文件的名称查询
		Elements select = document.select(".list16");
		for (Element element : select) {
//		从获取的元素当中找到所有的a链接 ---也可以更精准的查询加上[]指定标签内属性的值
			Elements urls = element.select("a[href]");
			for (Element url : urls) {
//				获取到标题 --属性选择器类似于JQuery的attr
				String title = url.attr("title");
//				获取url
				String href = url.attr("href");
//				这些地址有些并不是以http开头,java无法访问,所以需要特殊处理
				if (!href.startsWith("http")) {
					href = "http:" + href;
				}
//				System.out.println(title+"====="+href);
//				获取文章的内容
				Document context = Jsoup.connect(href).get();
//				查找article标签
				Elements contextText = context.select("article");
//				获取其中的内容
				String text = contextText.text();
//				System.out.println(text);
//				存储本地时,使用的是文章标题命名,需要过滤特殊字符
				title = title.replace("|", "").replace("*", "").replace("\"", "").replace("?", "").replace("/", "")
						.replace("\\", "").replace(">", "").replace("<", "").replace(":", "");
//				最后存到本地,调用的工具类
				FileUtilIO.writeFile("d:souhuo/"+title+".txt", text, "utf-8");
			}
		}
	}

工具类代码

public static void writeFile(String path, String content, String charset) throws IOException {
		// 创建写入的文件
		File file = new File(path);
		// 判断父目录是否存在
		if (!file.getParentFile().exists()) {
			// 创建父目录
			file.getParentFile().mkdirs();
		}
		// 创建输出流对象
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), charset));
		bw.write(content);
		bw.flush();
		bw.close();
	}

获取到本地的文章

java实现网络爬虫,从网上爬取资源到本地_第3张图片

你可能感兴趣的:(java,java,网络爬虫)