爬虫入门(实时新闻采集器)②

难得的周末,继续爬虫的学习。

爬虫的管理器类实现

在之前新建的parser包中,新建一个用于解析爬取下来的网页,管理器类
(用于解析下载下来的web页面html code的管理类)
然后再建一个用于存放解析出来的Pojo类(ParserResultEntity)
1)外层代码,解析带有ul里面再嵌套的ul内容,使用正则表达式进行拿取.

	List<ParserResultEntity> resultList = new ArrayList<ParserResultEntity>();
		// 先把url大块取到
	String regexUl = "<ul[\\s\\S]*?</ul>";
	String ulBlockHtmlSource = RegexUtil.getText(htmlSource, regexUl, 0);
	// 从ul中匹配到li块
	String regexLi = "<li[\\s\\S]*?</li>";
	Matcher matcher = RegexUtil.getMatcher(ulBlockHtmlSource, regexLi);
	while (matcher.find()) {
		String liHtmlSource = matcher.group();
		ParserResultEntity resultEntity = new ParserResultEntity();
			...................
			}

(List是用于存放下面解析出来的网页标题,链接,时间)
在while里面读取网页的对应需要的内容,并放进List列表里面,再存入数据库
2)标题,时间,url。的解析
解析postDate(新闻发布时间)

	// 解析postDate
	String regexPostdate = "<font>([\\s\\S]*?)</font>";
	String dateString = RegexUtil.getText(liHtmlSource, regexPostdate, 1);
	Date postdate = DateUtil.parseStringToDate(dateString);
	// System.out.println(matcherPostdate.group(1));
	resultEntity.setPostDate(postdate);

解析url链接(新闻对应链接)

// 解析url链接
	String regexURL = "href=\"([\\s\\S]*?)\"";
	String href = RegexUtil.getText(liHtmlSource, regexURL, 1);
	href = StaticValue.rootURL + href.substring(2);
	resultEntity.setSourceUrl(href);

解析标题(新闻标题)

// 解析标题
	String regexTitle = "<a[\\s\\S]*?>([\\s\\S]*?)</a>";
	Pattern patternTitle = Pattern.compile(regexTitle);
	Matcher matcherTitle = patternTitle.matcher(liHtmlSource);
	String title = RegexUtil.getText(liHtmlSource, regexTitle, 1);
	resultEntity.setTitle(title);

最后设置数据库插入时间,并存放进List里面

// 最后设置数据库插入时间
	resultEntity.setInsertDate(DateUtil.getCurrentDate());
	resultList.add(resultEntity);

上面要注意的是日期格式的转换Date和拿取下来的日期格式的转化.
接下来进行数据库链接的搭建(包括以下几点)
1.数据库环境搭建
2.基本操作与测试
3.数据库设计
4.java连接和操作数据库中的表
5.做数据校验
数据库操作都是基本要求这里就不多说啦。但需要注意的

  1. 记得异常要捕获不能直接抛出
  2. 数据插入的时候如果有多条可以用Batch进行批量处理
  3. 数据库链接的用户名,密码可以存放到文件中便于管理
  4. 注意字符编码,防止乱码

接下来是对文件的串联

编写一个SysetmController类对整体的文件进行串联操作
分为以下5步:
1.拿到url种子
2.交给任务调度,用于后续的下载
3.下载拿到任务的url,没有则返回空
4.解析下载下来的htmlSource
5.对解析下来的对象进行持久化(存入数据库)
代码如下:


import java.util.List;

import com.tl.spider.download.DownLoadManager;
import com.tl.spider.parser.HtmlParserManager;
import com.tl.spider.persistence.DataPersistenceManager;
import com.tl.spider.pojos.ParserResultEntity;
import com.tl.spider.schedule.ScheduleManager;
import com.tl.spider.ui.UIManager;

public class SystemControler {
	//做各个层间的串联
	public static void main(String[] args) throws Exception {
		/*
		 * 1.拿到种子url
		 */
		String seedUrl = UIManager.getSeedUrl();
		/*
		 * 2.交给任务调度,用于后续的下载
		 */
		ScheduleManager.addSeedUrlToTaskList(seedUrl);
		/*
		 * 3.下载拿到的任务url,没有则返回空
		 */
		String htmlSource = DownLoadManager.download();
		/*
		 * 4.解析下载下来的htmlsource
		 */
		if(htmlSource!=null) {
			List<ParserResultEntity> resultEntityList = HtmlParserManager.parseHtml(htmlSource);
			/*
			 * 5.对解析出来的对象进行持久化
			 */
			DataPersistenceManager.persist(resultEntityList);
		}else {
			System.out.println("没有找到要解析的htmlSource,本轮任务结束!");
		}
		
		System.out.println("done");
	}
}

以上这个爬虫的基本操作就完成了,接下来是进行一些优化操作。。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值