java爬虫糗百

继上次用java把糗百的源码下下来后,决定开始进行剥离想要的字段,不要求别的,只要能与之前用python写的程序实现相同的功能即可,糗百嘛,当然最重要的是段子,所以我只剥夺段子出来,不会乱杀无辜。这里也不用什么线程了,感觉代码给别人看最重要的就是看核心,多了让人烦,就一个类,三个私有方法,一个main方法。这里scanner.nextLine()最好不要用scanner.next(),因为会不识别回车。

package spider;

import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class MyCreate {
	private static List<String> results = new ArrayList<String>();
	private static int page=1; // 表明目前是第几页
	private static String url="http://www.qiushibaike.com/8hr/page/";
	/**
	 * 爬取数据
	 * @param url
	 * @param pages
	 * @return
	 */
	private static String spider(String url,int pages) { 
		StringBuffer sb = null;
		try {
			URL urls = new URL(url+pages); // 指定要爬取得网站
			URLConnection urlconnection = urls.openConnection(); // 类似于python	 中的urlopen	个人理解为发送请求并用一个对象去接
			urlconnection.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)"); // 有些浏览器会查看浏览器信息,防止爬取。
			InputStream ins = urlconnection.getInputStream(); // 以流的方式读出内容
			BufferedReader buff = new BufferedReader(new InputStreamReader(ins, "utf-8")); // 以字符流读入
			sb = new StringBuffer(); // 把内容提取出来
			String lines = "";
			while ((lines = buff.readLine()) != null) {
				sb.append(lines + "\n");
			}
			OutputStreamWriter ops = new OutputStreamWriter(new FileOutputStream("W:/qiubai"+pages+".html", true), "utf-8");
			// 写入到本地的W盘中,命名为qiubai.html
			ops.write(sb.toString());
		} catch (MalformedURLException e) {
			e.printStackTrace();
			// TODO Auto-generated catch block
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return sb.toString();
	}

	/**
	 * 通过正则表达式获取想要的数据
	 * @param sb
	 */
	private static void filterData(String sb) {
		results.clear();
		Pattern pattern = Pattern.compile("<div.*?class=\"content\">(.*?)</div>", Pattern.MULTILINE | Pattern.DOTALL); // 正则表达式
		Matcher matcher = pattern.matcher(sb);
		while (matcher.find()) { // 会把所有查到的放入results中
			results.add(matcher.group(1));
		}
	}

	/**
	 * 用来在控制台展示数据
	 * @param index
	 */
	private static void showMsg(int index) {
		Scanner scanner = new Scanner(System.in);
		System.out.println("---------------------------------------\n  "
				+ "程序:糗百爬虫  \n"
				+ "版本:0.1\n  "
				+ "作者:马慧超 \n "
				+ "日期:2014-06-03\n  "
				+ "语言:java\n "
				+ "操作:输入quit退出阅读糗事百科\n  "
				+ "功能:输入任意字符依次浏览今日的糗百热点\n  "
				+ "\n"
				+ "---------------------------------------\n ");
		while (!scanner.nextLine().equals("quit")) {
				System.out.println("第"+page+"页"+results.get(index++));
				if(index>=results.size()){ 
					page+=1;
					String newResult=spider(url,page);
					filterData(newResult);
					index=0;
				}
		}
	}

	
	/**
	 *  此处测试使用(程序入口)
	 * @param agrs
	 */
	public static void main(String[] agrs) { 
		String result = spider(url,page);
		filterData(result);
		showMsg(page);
	}
	
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值