Java 使用正则表达式和IO实现爬虫以及503解决

我这边找了个小说网站:
在这里插入图片描述

基本套路:

第一步:获取小说每一章的url地址
在这里插入图片描述
第二步:获取章节url内容并使用正则表达式提取需要的内容
在这里插入图片描述
第三步:多线程封装,实现如下效果
在这里插入图片描述
最后测试。

代码:

内容获取封装:

public class WebSpider {
   
	//<a href="/35/35971/13555631.html"> 第1章:边哨惨案 </a> -->{"/35/35971/13555631.html","第1章:边哨惨案"}
	// 存放所有章节列表和标题 
	private List<String[]> urlList;
	// 指定下载的跟目录
	private String rootDir;
	// 指定编码
	private String encoding;
	public WebSpider() {
   
		urlList = new ArrayList<String[]>();
	}
	public WebSpider(String titleUrl, Map<String, String> regexMap, String rootDir, String encoding) {
   
		this();
		this.rootDir = rootDir;
		this.encoding = encoding;
		initUrlList(titleUrl, regexMap);
	}

	/**
	 * 初始化小说所有章节列表 在构造方法中调用
	 * @param url
	 * @param regexMap
	 */
	private void initUrlList(String url, Map<String, String> regexMap) {
   
		StringBuffer sb = getContent(url, this.encoding);
		int urlIndex = Integer.parseInt(regexMap.get("urlIndex"));
		int titleIndex = Integer.parseInt(regexMap.get("titleIndex"));
		Pattern p = Pattern.compile(regexMap.get("regex"));
		Matcher m = p.matcher(sb);
		while (m.find()) {
   
			String[] strs = {
    m.group(urlIndex), m.group(titleIndex) };
			this.urlList.add(strs);
		}
	}

	/**
	 * 获取文本内容
	 * 
	 * @param urlPath
	 * @param enc
	 * @return
	 */
	public StringBuffer getContent(String urlPath, String enc) {
   
		StringBuffer strBuf;
		class Result{
   
			StringBuffer sb;
			public Result() {
   
				BufferedReader reader = null;
				HttpURLConnection conn = null;
				
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值