极光自定义站源教程
前段时间上线了自定义站源功能,不过因为比较粗糙,就没有公布教程,然后经过一段时间打磨后,感觉比之前版本要好用很多,于是整理了下使用教程,帮助大家快速上手。
原理:基于对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)//设置需解析的内容Objectjava.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,蛮好用的,有兴趣的也可以学习一下。
先写这么些,更详细的随后陆续更新。
