极光自定义站源教程
前段时间上线了自定义站源功能,不过因为比较粗糙,就没有公布教程,然后经过一段时间打磨后,感觉比之前版本要好用很多,于是整理了下使用教程,帮助大家快速上手。
原理:基于对html文档元素的解析,采用jsoup,jsoupXpath等框架,调用其提供的获取html元素的API,来解析网页元素,为我们所用。当我们编写完这段规则,其实我们已经写出一个完整的爬虫了。
自定义片源功能模块借鉴于开源项目“阅读”,大部分语法可以通用,也可能遇到相同的问题。
相关资料链接:
相关语法及坑点:https://github.com/mabDc/cartoon-rule/blob/master/RuleSupport.md
语法规则测试:
jsoup语法测试 https://try.jsoup.org
JSonPath语法测试 http://jsonpath.herokuapp.com
- 支持jsoup select语法,以@css:开头,语法见http://www.open-open.com/jsoup/selector-syntax.htm
- 支持XPath语法,采用的这个库https://github.com/zhegexiaohuozi/JsoupXpath, 语法兼容方面请看自己查看
- 支持JSonPath语法,以@JSon:开头,语法见 https://blog.csdn.net/koflance/article/details/63262484
- JsonPath获取字符支持此种写法xxx{$._id}yyy{$.chapter}zzz
- 支持用js处理结果,以<js>开头</js>结尾,结果变量为result,网址变量为bastPath,位置任意,按顺序执行
如 @JSon:$.link<js>'http://chapterup.zhuishushenqi.com/chapter/' + encodeURIComponent(result)'</js>
如 <js>result=result.replace(/[\\w\\W]*url:'(.*?)'[\\w\\W]*/,\'$1\');
java.ajax(result)</js>class.panel-body content-body content-ext.0@html
- ##替换内容##替换为,支持正则
- 可以用@put:{key:rule, key:ruel}保存变量其它地方使用,key为变量名, rule为完整的规则
- 可以用@get:{key}获取变量,key为变量名
- 解析规则时会先@put变量,然后,@get变量,替换@get:{key}
- 可以使用@Header:{key:value,key:value}定义访问头,添加在Url规则头部,或尾部
- 除去封面地址,其它地址都支持搜索地址的表达方式
- 自定义js方法
//获取网页内容,url支持搜索url规则
java.ajax(url)
//base64解码
java.base64Decoder(string)
//设置需解析的内容Object
java.setContent(html)
//输入规则String获取文本列表List<String>
java.getStringList(rule)
//输入规则String获取文本
java.getString(rule)
//输入规则获取节点列表List<Object>
java.getElements(ruleStr)
简单片源规则说明
片源规则基于HTML标记,如class,id,tag等
想要写规则先要打开网页源代码,在里面找到想要获取内容对应的标签,
Chrome可以在网页上右击点击检查可以方便的查看标签
极光影院规则示范及字段说明:
{
'searchActor': 'class.detail@tag.p.1@text',
'searchArea': 'class.detail@tag.p.2@text##地区:(.*)年份:##$1###',
'searchDesc': 'class.detail@tag.p.3@text',
'searchDirector': 'class.detail@tag.p.0@text',
'searchImg': 'tag.a.0@data-original',
'searchList': 'class.container@class.col-lg-wide-75@class.stui-pannel_bd@tag.ul@tag.li',
'searchName': 'class.detail@tag.h3@tag.a@text',
'searchNoteUrl': 'tag.a.0@href',
'searchRemark': 'tag.a.0@tag.span.1@text',
'searchUrl': 'https://www.wuguiyy.com/search/searchKey----------searchPage---',
'searchYear': 'class.detail@tag.p.2@text##年份:(.*)##$1###',
'httpHeader': '',
'httpUserAgent': '',
'loginUrl': '',
'detailActor': '',
'detailArea': '',
'detailDesc': 'class.detail-sketch@text',
'detailDirector': '',
'detailRemark': '',
'detailYear': '',
'enable': false,
'enableFind': false,
'exclude': 'https://g.shumafen.cn/api/file/3e10b917f6921065/',
'findActor': '',
'findArea': '',
'findDesc': '',
'findDirector': '',
'findImg': '',
'findList': '',
'findName': '',
'findNoteUrl': '',
'findRemark': '',
'findUrl': '',
'findYear': '',
'parserType': '4',
'parserUrl': '',
'play': '',
'playList': 'tag.li',
'playName': 'tag.a@text',
'playUrl': 'tag.a@href<js>'https://www.wuguiyy.com' + result<\/js>',
'serialNumber': 0,
'sortName': 'tag.h3@text',
'sortNameList': 'class.playlist@class.stui-pannel__head',
'sortUrlList': 'class.stui-content__playlist',
'sourceGroup': '',
'sourceName': '乌龟影院',
'sourceType': '',
'sourceUrl': 'https://www.wuguiyy.com',
'weight': 0
}
以上是乌龟影院的完整规则代码,目前极光只支持用规则来搜索影片,暂时不支持规则来显示影片分类列表,不过以后会逐步添加支持。
这里,我们参考乌龟影院的规则,简单介绍一下。
sourceUrl是片源网站的域名,必填,用于识别片源和解析播放时用。
sourceName 是片源网站的名称,必填,且不要与已有片源名称重复。
sourceGroup预留字段,可不填,今后可用于对资源分组整理用。
weight 权重,预留字段,可不填,今后可用于搜索结果排序,靠前显示权重大的片源。
exclude 过滤地址,一些资源播放解析后第一个地址是不能要的,要在这个字段过滤掉。
parserType 解析类型,目前内置4种解析类型:
类型通过下拉菜单选择即可。
目前的规则只支持搜索,主要流程为:搜索影片关键词->获取搜索结果->获取每个搜索结果的详情页面,下面对主要字段说明一下。
以search开头的字段,均是与搜索流程相关的字段。
例如:搜索关键词需要先有搜索接口地址:
'searchUrl': 'https://www.wuguiyy.com/search/searchKey----------searchPage---',
以detail开头为详情页解析,就点击搜索结果进入的详情页面。
例如:detail_desc,影片简介。其中,class定位元素所在位置,@text为获取文本。
'detailDesc': 'class.detail-sketch@text',
以play开头为播放地址解析,playList获取播放列表。playName获取播放剧集的名称,playUrl获取播放剧集的播放地址。sortName是播放线路名称,sortNameList是播放线路列表。sortUrlList是播放线路地址。
在编辑器页面,我们可以选择对单条规则执行结果进行调试:
在规则文本不为空的时候会显示调试按钮,点击调试:
输入搜索关键词,点击run按钮,可以看到规则执行日志,上图是乌龟影院完整规则的调试日志,可以执行到底,并显示各个规则获取的结果,如果你只写了一半,那也可以查看执行到所写规则的位置。下面的编辑框可以修改当前规则,并支持实时更新到调试器里。点击重置可以恢复第一次打开调试窗口时的内容。
其他不再一一列举了,主要步骤就是,用class、id、tag这类定位符找到元素所在位置,提取元素文本。由于算法部分直接改编自阅读项目,所以阅读的规则大部分特性都是支持的,例如支持js,还有支持jsoup和xpath混合解析,就是说,如果你对jsoup的解析不太满意,也可以使用xpath的语法,软件内部可以自动识别并解析,之前我写scrapy爬虫时用的就是xpath,蛮好用的,有兴趣的也可以学习一下。
先写这么些,更详细的随后陆续更新。