SWCJ爬蟲框架

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="//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="//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="//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[]


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