SWCJ爬蟲框架

AR 發表於 2022-01-26
爬蟲 框架

SWSJ

什麼是SWSJ

SWSJ是一個基於jsoup和正規表示式的java爬蟲框架,能夠使你的爬蟲與程式碼分離開,降低解耦性,同時

你的爬蟲不是通過程式碼,而是通過配置檔案來配置,這意味這當你的某些需求更改時,能直接修改配置檔案而不必去修改你的程式碼

他能幹什麼

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

他能使你通過幾個簡單的爬蟲來實現一個爬蟲的具體實施

關於作者與不完善之處,求生欲極強

這只是一個14的少年的不成熟作品,我完成他僅用了三天,他可能有大量不完美之處,我正在不斷的完善,目前已經勉強能用,所以先發出來, SWSJ爬蟲框架: 一個通過配置檔案實現爬蟲的框架 (gitee.com) (開源)

優化目標:優化異常,優化傳入引數,優化返回值獲取,優化額外方法處理......

jar包見連結

使用詳解

首先你需要一個配置檔案,裡面有部分不是必要的

具體例項(解析見下方)

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[]


全篇完,歡迎大佬提出意見,目前優化思路見連結