优酷电视剧爬虫代码实现一:下载解析视频网站页面(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;
}
}
控制台输出为:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/13/53eaa7c83549f5e4e5c140f91c94408b.png)
总结:XPath具体如何取,请参考
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;
}
}
控制台输出为:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/13/53eaa7c83549f5e4e5c140f91c94408b.png)
总结:XPath具体如何取,请参考
优酷电视剧爬虫代码实现一:下载解析视频网站页面(3)补充知识点:怎样获取XPath
如果XPath无效,请参考优酷电视剧爬虫代码实现一:下载解析视频网站页面(3)补充知识点:XPath无效怎么办?
这里控制台输出的结果,和网页上的一模一样。因此,XPath读取成功。![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/13/d341a9602322d901e7b2b702ecce51b8.png)
相关文章推荐
- 优酷电视剧爬虫代码实现一:下载解析视频网站页面(4)补充正则:java Pattern和Matcher详解
- 优酷电视剧爬虫代码实现一:下载解析视频网站页面(3)补充知识点:XPath无效怎么办?
- 优酷电视剧爬虫代码实现一:下载解析视频网站页面(1)
- 优酷电视剧爬虫代码实现一:下载解析视频网站页面(2)
- 优酷电视剧爬虫代码实现一:下载解析视频网站页面(3)补充知识点:htmlcleaner使用案例
- 优酷电视剧爬虫代码实现一:下载解析视频网站页面(3)补充知识点:怎样获取XPath
- 优酷电视剧爬虫代码实现一:下载解析视频网站页面(4)补充: Java正则表达式Matcher.group(int group)相关类解析
- 优酷电视剧爬虫代码实现一:下载解析视频网站页面(4)
- 爬虫代码实现三:打通爬虫项目的下载、解析、存储流程
- 爬虫代码实现二:抽取网站规则模板,优化解析代码(2)
- java实现优酷视频地址解析示例代码分享
- .NET 实现解析全国各大视频网站真实视频下载地址
- 爬虫代码实现二:抽取网站规则模板,优化解析代码(1)
- java 实现视频网站视频地址解析
- (转)用.net实现远程获取其他网站页面内容!(核心代码分析)
- 视频播放网站CDN内容分发网络简单代码实现
- asp.net网站下载功能页面代码
- 用.net实现远程获取其他网站页面内容!(核心代码分析)
- 视频播放网站CDN内容分发网络简单代码实现
- 分享一个在线解析提取网页视频的网站 不用另外下载工具 绝非广告