SWCJ爬虫框架 – MD&One

SWCJ爬虫框架 - MD&One

SWSJ

什么是SWSJ

SWSJ是一个基于jsoup和正则表达式的java爬虫框架,能够使你的爬虫与代码分离开,降低解耦性,同时

你的爬虫不是通过代码,而是通过配置文件来配置,这意味这当你的某些需求更改时,能直接修改配置文件而不必去修改你的代码

他能干什么

它能使你的配置地狱更加地狱(呸

他能使你通过几个简单的爬虫来实现一个爬虫的具体实施

关于作者与不完善之处,求生欲极强

这只是一个14的少年的不成熟作品,我完成他仅用了三天,他可能有大量不完美之处,我正在不断的完善,目前已经勉强能用,所以先发出来, SWSJ爬虫框架: 一个通过配置文件实现爬虫的框架 (gitee.com) (开源)

优化目标:优化异常,优化传入参数,优化返回值获取,优化额外方法处理……

jar包见https://download.csdn.net/download/xmdymcsheepsir/77950929
(注:可免费下载)

使用详解

首先你需要一个配置文件,里面有部分不是必要的

具体实例(解析见下方)

1.导入jar包(废话),暂不完善,并未上传maven

2.定义一个接口

import com.midream.sheep.swsj.Annotation.WebSpider;

public interface test {
    @WebSpider("getHtml")//url的id,返回值与传参需要与配置文件一致
    String[] getData(int count);
    @WebSpider("getli")//支持多方法,非传参
    String[] getLi();
}

3.配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<SWCL>
    <config>
        <constructionSpace isAbsolute="false" workSpace="E:临时文件"/>
        <timeout value="10000"/>
        <createTactics isCache="true"/>
    </config>
    <swc id="getHtml">
        <cookies>
        </cookies>
        <parentInterface class="com.midream.sheep.test"/>
        <url name="getHtml" inPutType="int" inPutName="count">
            <type type="GET"/>
            <url path="https://pic.netbian.com/index_#{count}.html"/>
            <parseProgram  isHtml="true">
                <jsoup>
                    <pa>
                        #main>div.slist>ul.clearfix>li>a
                    </pa>
                </jsoup>
            </parseProgram>
            <returnType type="String[]"/>
        </url>
        <url name="getli" inPutType="" inPutName="">
            <type type="GET"/>
            <url path="https://pic.netbian.com/index_5.html"/>
            <parseProgram  isHtml="true">
                <jsoup>
                    <pa>
                        #main>div.slist>ul.clearfix>li
                    </pa>
                </jsoup>
            </parseProgram>
            <returnType type="String[]"/>
        </url>
    </swc>
</SWCL>

一个是有传参,一个是不传参,传参可传参改变值

4.调方法

XmlFactory xf = null;
        try {
            xf = new XmlFactory(XmlFactory.class.getClassLoader().getResource("").getPath()+"com/midream/sheep/test.xml");
            test getHtml = (test)xf.getWebSpider("getHtml");
            String[] li = getHtml.getLi();
            for (String s : li) {
                System.out.println(s);
            }

调XmlFactory获取配置,通过工厂获取类(注:需要强转)

5.直接通过接口调

xml

<?xml version="1.0" encoding="UTF-8" ?>
<SWCL>
    <!--全局配置-->
    <config>
        <!--工作空间,生成的字节码会存储到里面
        isAbsolute->是否是相对路径
        workplace->文件夹路径
        -->
        <constructionSpace isAbsolute="false" workSpace="E:临时文件"/>
        <!--超时时间,请求超过这个时间报异常
        value->超时具体时间
        -->
        <timeout value="10000"/>
        <!--userAgrnt数据
        value->具体的userAgent文本
        -->
        <userAgent>
            <value>Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36 Edg/97.0.1072.62</value>
            <value>User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler 4.0)</value>
            <value>User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)</value>
        </userAgent>
        <!--爬虫策略
        cache缓存,将生成的类直接转为字节码加载
        非缓存,将生成的类输出到本地class在加载
        -->
        <createTactics isCache="false"/>
    </config>
    <!--具体的某个爬虫类
         inPutType:传入的数值类型(可以为空)
         id 获取的方式
        下面使用传入值时使用的标识符(可以为空)-->
    <swc id="getHtml">
        <!--局部爬虫使用的cookies文本
        格式 键:值;···
        -->
        <cookies>
            uuid_tt_dd=4646545646-1642571061362-956268; UserName=xmdymcsheepsir;
        </cookies>
        <!--父类接口,爬虫通过接口调-->
        <parentInterface class="com.midream.sheep.TestWeb"/>
        <!--请求配置
        一个配置对应一个方法
        -->
        <url name="getHtml" inPutType="" inPutName="">
            <!--请求类型
            当前仅支持POST和GET请求
            type="POST||GET"
            -->
            <type type="GET"/>
            <!--url链接-->
            <url path="https://pic.netbian.com/index_#{count}.html"/>
            <!--解析html方案
            并不支持同时使用
            <regular>正则表达式 正则特殊值 ALL 即为返回所有文本
            <jsoup>jsoup配置-->
            <parseProgram  isHtml="false">
<!--                <regular reg="href="/>-->
                <!--jsoup可以分为多层解析
                即一次<pa>就是一次解析
                -->
                <jsoup>
                    <!--pa可配置属性来选取目标Document
					#id 通过id选择
					htmlName 通过标签名选择
					name.class 通过类选择
-->
                    <pa>
                        #main>div.slist>ul>li>a
                    </pa>
                </jsoup>
            </parseProgram>
            <!--返回值类型
            基本数据类型直接用,
            引用类型必须全类名如:java.lang.String
            -->
            <returnType type="String[]"/>
        </url>
    </swc>
</SWCL>

解读

SWCJ

这是获取的根标签,是程序识别的窗口,这是必要的

config

这是全局配置,其中都可以省略,不过工作空间推荐选择

constructionSpace

工作空间,字节码的生成的文件夹

isAbsolute–是否是相对路径,相对路径是相对于当前项目的路径

workSpace–路径,具体的文件夹路径

timeout

超时时间,默认是1000毫秒,可自定义或省略

userAgent

模拟浏览器,绕过检验是具体的单个userAgent,默认配置有一个,可省略

createTactics

创建策略:isCache是否有缓存

swc

具体的一个接口,

id获取爬虫类的标识符

cookies

可携带cookie进行爬虫

parentInterface

父接口,通过接口调方法

class 接口的类全名

url

具体的一个爬虫方法

id 方法的注解标识

inPutType,inPutName(传入值,传入值的调用名(调用用#{inputname}),需与接口一致

type

type:获取类型,有get和POST(暂不完善)供选择

url

path 具体的一个超链接

parseProgram

爬虫策略,有jsoup和正则表达式(不推荐)两种

策略选择见xml注释

returnType

返回值类型,暂只支持String和String[]


全篇完,欢迎大佬提出意见,目前优化思路见链接

hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » SWCJ爬虫框架 – MD&One