前言
前段時間需要通過搜索引擎采集一些目標站,找了以前自己收集的一些工具,發現大多都失效了,沒失效的也不怎么好用,思考了一下,還是決定自己來弄一個,這里借鑒的是法克論壇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可視化生成,懶狗必備
關於我與易語言之間
易語言是我學的第一門”編程語言“,想起來還是我高一高二的事情,易語言帶我進入的編程的世界(菜狗不會英語),我很感謝她,雖說她的名聲並不好聽,但在我看來,易語言亦如一把寶劍,能殺人亦能救人。不管黑貓白貓,能抓到老鼠的貓就是好貓,易語言有精益模塊等非常優秀的第三方模塊,以及日活量挺高且求助區活躍大佬多的精益社區,這么看起來也並非完全不推薦學習。
