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

author author     2022-08-20     205

关键词:

XPath无效怎么办?明明XPath是通过定位子节点,copy xpath得到的,理论上是正确的

XPath无效怎么办?明明XPath是通过按F12定位符再copy XPath得到的,可是放在代码里就是不对呢?

前提:优酷电视剧爬虫代码实现一:下载解析视频网站页面(2)工作量已经完成。基于这个基础,进一步完善代码

1.新建页面解析接口。

package com.dajiangtai.djt_spider.service;

import com.dajiangtai.djt_spider.entity.Page;

/**
* 页面解析接口
* @author Administrator
*
*/
public interface IProcessService {

public void process(Page page);
}

2.新建页面解析实现类

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;
import com.dajiangtai.djt_spider.util.HtmlUtil;
import com.dajiangtai.djt_spider.util.LoadPropertyUtil;
import com.dajiangtai.djt_spider.util.RegexUtil;

/**
* 优酷页面解析实现类
* @author Administrator
*
*/
public class YOUKUProcessService implements IProcessService{

//总播放量:
private String parseAllNumber = "/html/body/div[4]/div/div[1]/div[2]/div[2]/ul/li[11]";

public void process(Page page) {

String content = page.getContent();
HtmlCleaner htmlCleaner = new HtmlCleaner();
//利用htmlCleaner对网页进行解析,得到根节点
TagNode rootNode = htmlCleaner.clean(content);
try {
Object[] evaluateXPath = rootNode.evaluateXPath(parseAllNumber);
if(evaluateXPath.length>0){

//通过xpath,定位到该子节点,输出子节点信息
TagNode node = (TagNode)evaluateXPath[0];
System.out.println(node.getText().toString());
}
} catch (XPatherException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

 

3.新建电视剧爬虫入口类StartDSJCount,定义downLoadService、processService并生成get/set方法,同时,通过set方法对这两个接口进行实例化。利用之前的工作,封装页面下载和解析方法。再对页面解析进行测试。

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.IStoreService;
import com.dajiangtai.djt_spider.service.impl.ConsoleStoreService;
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();

//HttpClientDownLoadService实现DownLoadService接口
dsj.setDownLoadService(new HttpClientDownLoadService());

//YOUKUProcessService实现ProcessService接口
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);
//解析页面
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;
}


}

4.测试该main方法,若正确,则应该输出红色字段即:  总播放数:16,960,061,208 

技术分享

然而,控制台为空:

技术分享

也就是,该xpath无效,解析失败。这里可以使用debug进行调试,一步步测试,最后发现,Object[] evaluateXPath = rootNode.evaluateXPath(parseAllNumber);的evaluateXPath 值为[],是什么原因导致解析失败呢?红色部分的xpath为"/html/body/div[4]/div/div[1]/div[2]/div[2]/ul/li[11]";,很明显,是绝对路径,具体为什么失败,目前我将它归结为绝对路径。自我总结,目前有两种解决方案:

1.若xpath解析不对,则最简单的解决方法,保留最后一个标签下标,其余全部删除掉,从body开始。

技术分享

2.自己改写成相对路径:"//div[@class=\"p-base\"]/ul/li[11]",这里是参考了http://www.cnblogs.com/miercler/p/5599465.html博客中xpath的写法。

技术分享

 

 以上两种方法都可以解决xpath无效的问题!


















































































爬虫代码实现五:解析所有分页url并优化解析实现类

  如图,我们进入优酷首页,可以看到电视剧列表,我们称这个页面为电视剧列表页,而点击进入某个电视剧,则称为电视剧详情页。那么如何获取所有分页以及对应的详情页呢,通过下面的分页得到。因此,首先,我们... 查看详情

爬虫记一次某视频网站的加密解密(代码片段)

...不用手动复制黏贴,畅快的看视频 2、首先我们抓取电视剧的所有剧集链接https://so.iqiyi.com/so/ 反正输入视频链接搜索就完了,然后拿到页面的url 然后使用selenium和xpath去抓取即可 3、获取解析地址由于要money,那么... 查看详情

安卓手机优酷下载好的视频文件在哪里 ?

参考技术A手机优酷具有缓存功能,将电视剧、电影等视频缓存完毕之后就可以离线观看,那么手机优酷缓存在哪里呢?很多朋友不知道手机优酷缓存的视频文件在哪里,看了下面这篇文章就会明白了。  法一、  1、打开你想... 查看详情

dede使用心得(代码片段)

Questionone:最近做了一些视频教程传到优酷网站上,但我想引入这些视频教程到我的网站,在发表时我发现织梦CMS自带的编辑器又不直接支持优酷等视频网站的引用。所以为了方便教程的发布,特意在网站搜索到本篇教程,详细讲... 查看详情

解决猫眼网反爬虫策略的爬虫(代码片段)

项目代码:Github[目录]一.引入问题二.分步实现1.页面爬取2.woff下载3.字体解析规则一.引入问题可以看到,猫眼网电影评分,票房等的数据在响应的html中并不是直接提供给你的。这里的xefcf,xef87等数据,是以‘特殊符号’的形式显示出... 查看详情

爬虫概念与编程学习之如何爬取视频网站页面(用httpclient)

...     先看,前一期博客,理清好思路。爬虫概念与编程学习之如何爬取网页源代码(一)   不多说,直接上代码。  编写代码    运行<!DOCTYPEhtml><html><head><metahttp- 查看详情

爬虫代码实现三:打通爬虫项目的下载解析存储流程

1.新建一个存储接口IStoreServicepackagecom.dajiangtai.djt_spider.service;importcom.dajiangtai.djt_spider.entity.Page;/***数据存储接口*@authorAdministrator**/publicinterfaceIStoreService{ publicvoidstore(Pagepage);}2 查看详情

优酷视频下载|优酷播放器下载

优酷网从上周开始,全站视频已经开始完美支持iPad和iPhone4的在线视频播放服务。采用HTML5和HTTPLiveStreaming技术,对苹果iOS系统实现全面的支持,并达到和PC上一样流畅而清晰的体验。这个举动势必掀起国内各大视频网站对HTML5支... 查看详情

爬虫实现:根据ip地址反查域名(代码片段)

...不会开放?);另外一种方式就是接下来我要分享的——爬虫实现:根据IP地址反查域名。实现原理实现原理其实很简单,现在已有网站提供了根据IP地址查询域名的功能,但是需要人为登录网站输入IP地址查询,我想要实现程序... 查看详情

在线视频解析网站合集,主流视频网站不用会员也能看电影

...考技术A国内的一些视频播放网站,没有会员很多电影和电视剧都不能看,就是不要会员的,那你也要一分钟的广告,这让很多人都非常的不爽,不过有些大神总有办法解决这些问题,说一些视频解析网站分享给大家。知了堂网... 查看详情

基于python爬虫下载网站在线视频(代码片段)

运行展示程序运行后的结果如下所示: 系统可以对mp4和m3u8的视频进行下载,具体的下载方法见下文描述。流程分析对于下载网站的在线视频,首先需要找到视频对应的url,我们知道浏览器在线播放的视频肯定是... 查看详情

基于python爬虫下载网站在线视频(代码片段)

运行展示程序运行后的结果如下所示: 系统可以对mp4和m3u8的视频进行下载,具体的下载方法见下文描述。流程分析对于下载网站的在线视频,首先需要找到视频对应的url,我们知道浏览器在线播放的视频肯定是... 查看详情

爬虫实战selenium解析淘宝宝贝-获取多个页面

作为全民购物网站的淘宝是在学习爬虫过程中不可避免要打交道的一个网站,而是淘宝上的数据真的很多,只要我们指定关键字,将会出现成千上万条数据。今天我们来讲一下如何从淘宝上获取某一类宝贝的信息,比如今天我们... 查看详情

框架基础_爬虫demo(代码片段)

爬虫固定套路  1.提取数据(1.找到需要爬取的url,通过http请求获取html页面)  2.解析数据(1.数据筛选,2.数据过滤,3.获取有效数据)最难搞的就是这一步,因为你要去分析解析人家前端页面Html的格式,这里也就是爬虫功放战的主要战... 查看详情

爬虫之初识爬虫

...数据源,并且这些数据源考科一根据我们的目的进行采集优酷的火星情报局就是基于网络爬虫和数据分析制作完成的,其中每期的节目话题都是从相关热门的互动平台进行相关数据的爬取,然后对爬取的数据进行数据分析而得来的,... 查看详情

深入浅出爬虫之道:pythongolang与graphquery的对比(代码片段)

...了一些曲折。通过这个页面的解析过程,深入浅出的了解爬虫的解析思想与这些语言之间的异同。深入浅出爬虫之道:Python、Golang与GraphQuery的对比一、前言1.语义化的DOM结构2.稳定的 查看详情

记录一个不同的流媒体网站实现方法,和用python爬虫爬它的坑(代码片段)

今天找到一片电影,想把它下载下来。先开Networks工具分析一下:初步分析发现,视频加载时会拉取TS格式的文件,推测这是一个m3u8的索引,记录着几百段TS文件,这样方便快进时加载。  但是实际分析m3u8文件时,发现这... 查看详情

不充值,如何免费观看vip视频独播资源?

...下载视频很火的一个网站,里面不光有电影,还有很多的电视剧资源,并且这里提供下载的视频清晰度还是很高的,至于怎么下载,当然是安装好迅雷,点击下载链接即可自动下载,这个就不多说了。  二、VIP视频解析  这... 查看详情