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="https://www.cnblogs.com/microdream2/archive/2022/01/26/10000"/>
<createTactics isCache="true"/>
</config>
<swc id="getHtml">
<parentInterface />
<url name="getHtml" 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" 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>
</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="https://www.cnblogs.com/microdream2/archive/2022/01/26/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="true"/>
</config>
<!--具體的某個爬蟲類
inPutType:傳入的數值型別(可以為空)
id 獲取的方式
下面使用傳入值時使用的識別符號(可以為空)-->
<swc id="getHtml">
<!--區域爬蟲使用的cookies文本
格式 鍵:值;···
-->
<cookies>
uuid_tt_dd=4646545646-1642571061362-956268; UserName=xmdymcsheepsir;
</cookies>
<!--父類介面,爬蟲通過介面調-->
<parentInterface />
<!--請求配置
一個配置對應一個方法
-->
<url name="getHtml" 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="https://www.cnblogs.com/>-->
#main>div.slist>ul>li>a
解讀
SWCJ
這是獲取的根標簽,是程式識別的視窗,這是必要的
config
這是全域配置,其中都可以省略,不過作業空間推薦選擇
constructionSpace
作業空間,位元組碼的生成的檔案夾
isAbsolute--是否是相對路徑,相對路徑是相對于當前專案的路徑
workSpace--路徑,具體的檔案夾路徑
timeout
超時時間,默認是1000毫秒,可自定義或省略
userAgent
模擬瀏覽器,繞過檢驗
createTactics
創建策略:isCache是否有快取
swc
具體的一個介面,
id獲取爬蟲類的識別符號
cookies
可攜帶cookie進行爬蟲
parentInterface
父介面,通過介面調方法
class 介面的類全名
url
具體的一個爬蟲方法
id 方法的注解標識
inPutName(傳入值的呼叫名(呼叫用#{inputname}),順序需與介面一致
type
type:獲取型別,有get和POST(暫不完善)供選擇
url
path 具體的一個超鏈接
parseProgram
爬蟲策略,有jsoup和正則運算式(不推薦)兩種
策略選擇見xml注釋
全篇完,歡迎大佬提出意見,目前優化思路見鏈接
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/421610.html
標籤:其他
