1. 程式人生 > 實用技巧 >用易語言簡單編寫一款半自動URL採集工具

用易語言簡單編寫一款半自動URL採集工具

前言

前段時間需要通過搜尋引擎採集一些目標站,找了以前自己收集的一些工具,發現大多都失效了,沒失效的也不怎麼好用,思考了一下,還是決定自己來弄一個,這裡借鑑的是法克論壇URL採集工具,這款工具在我電腦上失效了,感謝前輩們的工具。

正文

準備

  • 易語言
  • 精益模組
  • 精益web瀏覽器支援庫
  • 精益web瀏覽器填表模組

編寫

首先是GUI部分,這裡我們簡單地規劃出了瀏覽器操作區、配置區以及我們的輸出區。

簡單地規劃出GUI之後開始編寫我們的核心程式碼:

這裡做了一些URL的處理,對於百度和搜狗這兩個搜尋引擎來說,他們的URL是經過處理的,不會直接顯示在HTML內,故我們需要進行單獨的訪問並提取出真實URL。百度是返回的302跳轉,真實URL在響應頭的Location中,而搜狗是返回的200狀態碼,真實URL在頁面內容中的script標籤內。

由於易語言對於雙引號的轉義不太方便,這裡我們為了方便選擇使用長文字常量儲存。

以及針對百度的特殊處理:

剩下就是一些把功能拼起來,這裡就略過不表。

完整程式碼

.版本 2
.支援庫 wke
.支援庫 spec

.程式集 視窗程式集_啟動視窗
.程式集變數 採集狀態, 邏輯型
.程式集變數 搜尋引擎取URL_正則, 文字型
.程式集變數 Ajax狀態, 邏輯型

.子程式 取URL
.引數 正則表示式, 文字型
.區域性變數 HTML原始碼, 文字型
.區域性變數 取URL正則, 正則表示式類
.區域性變數 計次, 整數型
.區域性變數 URL, 文字型
.區域性變數 標記URL, 文字型, 靜態
.區域性變數 miniblink填表, miniblink填表
.區域性變數 響應頭, 文字型


Ajax狀態 = 真
HTML原始碼 = wke_Utf8ToAnsi (精易Web瀏覽器1.取網頁原始碼 ())
取URL正則.建立 (正則表示式, HTML原始碼)

.計次迴圈首 (取URL正則.取匹配數量 (), 計次)

    URL = 取URL正則.取子匹配文字 (計次, 1)

    .如果真 (計次 = 1)
        .如果 (URL ≠ 標記URL)
            標記URL = URL
            miniblink填表.web_SetWebView (精易Web瀏覽器1.取WebView ())
            miniblink填表.web_SetScrollTop (99999)
        .否則
            跳出迴圈 ()
        .如果結束

    .如果真結束

    .如果真 (搜尋引擎_組合框.內容 = “百度”)
        網頁_訪問_物件 (URL, 2, , , , , 響應頭, , 真, , , , , , )
        URL = 文字_取右邊 (文字_取指定變數文字行 (響應頭, 8), “Location: ”)
    .如果真結束
    .如果真 (搜尋引擎_組合框.內容 = “搜狗”)
        除錯輸出 (URL)
        URL = 文字_取出中間文字 (到文字 (網頁_訪問_物件 (“https://www.sogou.com” + URL, 0)), “<a href=” + #引號, #引號 + “ id=”, 0, 假)
    .如果真結束

    URL輸出框.內容 = URL輸出框.內容 + URL + #換行符
.計次迴圈尾 ()


.子程式 搜尋引擎初始化, 文字型
.引數 所選引擎, 文字型
.引數 關鍵字, 文字型

.如果真 (所選引擎 = “Google”)
    搜尋引擎取URL_正則 = #取URL正則表示式_Google
    返回 (“https://www.google.com/search?q=” + 關鍵字)
.如果真結束
.如果真 (所選引擎 = “百度”)
    搜尋引擎取URL_正則 = #取URL正則表示式_百度
    返回 (“https://www.baidu.com/s?wd=” + 關鍵字)
.如果真結束
.如果真 (所選引擎 = “Bing”)
    搜尋引擎取URL_正則 = #取URL正則表示式_Bing
    返回 (“https://cn.bing.com/search?q=” + 關鍵字)
.如果真結束
.如果真 (所選引擎 = “360搜尋”)
    搜尋引擎取URL_正則 = #取URL正則表示式_360搜尋
    返回 (“https://www.so.com/s?j=1&q=” + 關鍵字)
.如果真結束

搜尋引擎取URL_正則 = #取URL正則表示式_搜狗
返回 (“https://www.sogou.com/web?query=” + 關鍵字)



.子程式 _開始採集_按鈕_被單擊

.如果 (採集狀態 = 假 且 關鍵字_編輯框.內容 ≠ “”)
    採集狀態 = 真
    精易Web瀏覽器1.瀏覽網頁 (搜尋引擎初始化 (搜尋引擎_組合框.內容, 關鍵字_編輯框.內容))
    開始採集_按鈕.標題 = “停止採集”
.否則
    採集狀態 = 假
    開始採集_按鈕.標題 = “開始採集”
.如果結束



.子程式 __啟動視窗_建立完畢
.區域性變數 輸出, 文字型


採集狀態 = 假
Ajax狀態 = 假
Initialize ()


.子程式 _精易Web瀏覽器1_文件就緒
.引數 就緒框架ID, 整數型

.如果真 (採集狀態 = 真)
    取URL (搜尋引擎取URL_正則)
.如果真結束


.子程式 _精易Web瀏覽器1_URL被改變
.引數 URL, 文字型
.引數 所屬框架ID, 整數型
.區域性變數 所選引擎, 文字型

所選引擎 = 搜尋引擎_組合框.內容
.如果真 (所選引擎 = “百度” 且 Ajax狀態 = 真)
    精易Web瀏覽器1.瀏覽網頁 (URL)
    Ajax狀態 = 假
.如果真結束

後記

為什麼要用易語言來編寫?

1、之前學過一點易語言,有基礎

2、第三方優秀模組多,類似功能實現起來應該不難

3、精益論壇日活量高,大佬多且熱心幫助他人

4、軟體GUI視覺化生成,懶狗必備

關於我與易語言之間

易語言是我學的第一門”程式語言“,想起來還是我高一高二的事情,易語言帶我進入的程式設計的世界(菜狗不會英語),我很感謝她,雖說她的名聲並不好聽,但在我看來,易語言亦如一把寶劍,能殺人亦能救人。不管黑貓白貓,能抓到老鼠的貓就是好貓,易語言有精益模組等非常優秀的第三方模組,以及日活量挺高且求助區活躍大佬多的精益社群,這麼看起來也並非完全不推薦學習。