您的位置:首页 > 运维架构 > 网站架构

优酷电视剧爬虫代码实现一:下载解析视频网站页面(3)

2017-01-13 15:26 1131 查看
优酷电视剧爬虫代码实现一:下载解析视频网站页面(2)已经完成页面下载,以及优酷页面解析实现类的基本框架,接下来优酷电视剧爬虫代码实现一:下载解析视频网站页面(3)的工作,就是要具体实现这个优酷解析实现类process的具体代码。

1. 优酷解析实现类:

  1.利用htmlCleaner对网页进行解析,得到根节点

  2.根节点根据定位的XPath,获取子节点

  3.对子节点判断并且挨个取值,输出子节点的内容。

  4.在StartDSJCount电视剧爬虫入口类进行测试输出结果验证这里是否真的获取到了子节点的文本值。

package com.dajiangtai.djt_spider.service.impl;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.htmlcleaner.HtmlCleaner;
import org.htmlcleaner.TagNode;
import org.htmlcleaner.XPatherException;

import com.dajiangtai.djt_spider.entity.Page;
import com.dajiangtai.djt_spider.service.IProcessService;

public class YOUKUProcessService implements IProcessService {

public void process(Page page) {
String content = page.getContent();
HtmlCleaner htmlCleaner = new HtmlCleaner();
//利用htmlCleaner对网页进行解析,得到根节点
TagNode rootNode = htmlCleaner.clean(content);

try {
// /html/body/div[4]/div/div[1]/div[2]/div[2]/ul/li[11]
//对XPath做相应的调整,使其有效,如果不该写,则使用debug模式,会发现evaluateXPath为[]
Object[] evaluateXPath = rootNode.evaluateXPath("/body/div/div/div/div/div/ul/li[11]");
if(evaluateXPath.length>0){
TagNode node = (TagNode)evaluateXPath[0];
System.out.println(node.getText().toString());
}
} catch (XPatherException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

2. 电视剧爬虫入口类StartDSJCount

代码不修改,依然测试main方法,查看控制台输出。

package com.dajiangtai.djt_spider.start;

import com.dajiangtai.djt_spider.entity.Page;
import com.dajiangtai.djt_spider.service.IDownLoadService;
import com.dajiangtai.djt_spider.service.IProcessService;
import com.dajiangtai.djt_spider.service.impl.HttpClientDownLoadService;
import com.dajiangtai.djt_spider.service.impl.YOUKUProcessService;

/**
* 电视剧爬虫入口类
* @author Administrator
*
*/
public class StartDSJCount {

//页面下载接口
private IDownLoadService downLoadService;
//页面解析接口
private IProcessService processService;

public static void main(String[] args) {
StartDSJCount dsj = new StartDSJCount();
dsj.setDownLoadService(new HttpClientDownLoadService());
dsj.setProcessService(new YOUKUProcessService());
String url = "http://list.youku.com/show/id_z9cd2277647d311e5b692.html?spm=a2h0j.8191423.sMain.5~5~A!2.iCUyO9";
//下载页面
Page page = dsj.downloadPage(url);
// System.out.println(page.getContent());
dsj.processPage(page);

}

//下载页面方法
public Page downloadPage(String url){
return this.downLoadService.download(url);
}

//解析页面方法
public void processPage(Page page){
this.processService.process(page);
}

public IDownLoadService getDownLoadService() {
return downLoadService;
}

public void setDownLoadService(IDownLoadService downLoadService) {
this.downLoadService = downLoadService;
}

public IProcessService getProcessService() {
return processService;
}

public void setProcessService(IProcessService processService) {
this.processService = processService;
}

}

控制台输出为:



总结:XPath具体如何取,请参考

优酷电视剧爬虫代码实现一:下载解析视频网站页面(3)补充知识点:怎样获取XPath

如果XPath无效,请参考

优酷电视剧爬虫代码实现一:下载解析视频网站页面(3)补充知识点:XPath无效怎么办?

这里控制台输出的结果,和网页上的一模一样。因此,XPath读取成功。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐