国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁 > 營銷資訊 > 網站運營 > 手把手教你如何獲取全網可訪問的所有網站網址和網站信息

手把手教你如何獲取全網可訪問的所有網站網址和網站信息

時間:2022-08-06 22:12:01 | 來源:網站運營

時間:2022-08-06 22:12:01 來源:網站運營

如何獲取全網可訪問的所有網站網址和網站信息呢

今天由于有一個小程序項目,是專門給織夢dedecms網站、WordPress網站做小程序制作免費小程序的。但是手上織夢網站和WordPress網站用戶數量都不是很多,很好的項目卻沒有觸及到用戶,沒有能給網站帶來好處,于是就想,能不能收集現(xiàn)在網上所有的織夢網站和WordPress網站,并且獲取他們的郵箱、QQ、微信、電話等有用信息呢?

帶著疑問百度了一番,沒有發(fā)現(xiàn)現(xiàn)成的可用數據,可是小程序項目還得往前推呢,等著用戶來使用呢?既然網上沒有現(xiàn)成的,要不就自己寫一個吧。于是就有了這個cobweb全網網址采集器。

全網網址采集器是什么?

這是一個由golang編寫的全網網址采集器,可用自動爬取可觸及的所有網站信息。該網址采集器會自動采集并分析網站的標題、站點描述、微信、QQ、聯(lián)系電話、網站所用的運行環(huán)境、ip信息等,甚至是網站所用的框架。

為什么會有這個全網網址采集器

全網網址采集器能采集哪些內容

本采集器可以采集到的的內容有:文章標題、文章關鍵詞、文章描述、文章詳情內容、文章作者、文章發(fā)布時間、文章瀏覽量。

全網網址采集器可用在哪里運行

本采集器可用運行在 Windows系統(tǒng)、Mac 系統(tǒng)、Linux系統(tǒng)(Centos、Ubuntu等),可用下載編譯好的程序直接執(zhí)行,也可以下載源碼自己編譯。

如何安裝使用

最后執(zhí)行下面命令 ```shell scriptgo mod tidygo mod vendorgo build編譯結束后,配置config。重命名config.dist.json為config.json,打開config.json,修改mysql部分的配置,填寫為你的mysql地址、用戶名、密碼、數據庫信息,新建cobweb數據庫,導入mysql.sql到填寫的數據庫中,然后雙擊運行可執(zhí)行文件即可開始采集之旅。

config.json配置說明

{ "mysql": { //數據庫配置 "Database": "spider", "User": "root", "Password": "root", "Charset": "utf8mb4", "Host": "127.0.0.1", "TablePrefix": "", "Port": 3306, "MaxIdleConnections": 1000, "MaxOpenConnections": 100000 }}

全網網址采集器運行原理分析

多線程(多協(xié)程)同時執(zhí)行

全網網址采集器利用了golang得天獨厚的并行任務優(yōu)勢,同時開啟多個協(xié)程,可以做到比常規(guī)輕易得手的php采集代碼快10倍~100倍,甚至更快。當然更快的采集速度還需要依靠你本地的網速,你家開的是500M帶寬的話,開1000個協(xié)程都是可以的。

相關代碼部分

var MaxChan = 100var waitGroup sync.WaitGroupvar ch = make(chan string, MaxChan)func SingleSpider(){ var websites []Website var counter int DB.Model(&Website{}).Where("`status` = 0").Limit(MaxChan*10).Count(&counter).Find(&websites) if counter > 0 { for _, v := range websites { ch <- v.Domain waitGroup.Add(1) go SingleData2(v) } } else { log.Println("等待數據中,10秒后重試") time.Sleep(10 * time.Second) } SingleSpider()}

采集數據鎖,最大限度保證數據不被多次執(zhí)行

為了防止數據被多次執(zhí)行,采集過程中還采用了數據鎖,讓下一次采集的時候,不會讀到相同的數據。

相關代碼

//鎖定當前數據 DB.Model(&website).Where("`id` = ?", website.ID).Update("status", 2) log.Println(fmt.Sprintf("開始采集:%s://%s", website.Scheme, website.Domain)) err := website.GetWebsite() if err == nil { website.Status = 1 } else { website.Status = 3 } log.Println(fmt.Sprintf("入庫2:%d:%s",website.ID, website.Domain)) DB.Save(&website)

快速入庫,直接執(zhí)行原生sql語句

本來代碼中采用的是gorm的orm形式插入數據,結果發(fā)現(xiàn)使用orm的話,插入一條網址需要執(zhí)行3條sql 語句,這在并行執(zhí)行中,每多執(zhí)行一條sql都是浪費,因此,采用了原生sql來插入數據,每次只需要執(zhí)行一條數據即可。

相關源碼

DB.Exec("insert into website(`domain`, `scheme`,`title`) select ?,?,? from dual where not exists(select id from website where `domain` = ?)", v.Domain, v.Scheme, v.Title, v.Domain)

網站編碼自動識別并轉換為utf-8

由于是采集全網的網址,并且要從網站內容里面分析有用的數據,并且golang只支持utf-8,什么亂七八糟的編碼格式網站內容,都需要轉換為utf-8,因此編碼轉換這一步必不可少,全網網址采集器內置了功能強大的編碼轉換器,不用擔心編碼轉換問題,同時兼容多種編碼格式。

相關代碼

contentType := strings.ToLower(resp.Header.Get("Content-Type")) log.Println(contentType) var htmlEncode string if contentType == "" { //先嘗試讀取charset reg := regexp.MustCompile(`(?is)charset=["']?/s*([a-z0-9/-]+)`) match := reg.FindStringSubmatch(body) if len(match) > 1 { htmlEncode = strings.ToLower(match[1]) if htmlEncode != "utf-8" && htmlEncode != "utf8" { body = ConvertToString(body, "gbk", "utf-8") } } else { reg = regexp.MustCompile(`(?is)<title[^>]*>(.*?)<//title>`) match = reg.FindStringSubmatch(body) if len(match) > 1 { aa := match[1] _, htmlEncode, _ = charset.DetermineEncoding([]byte(aa), "") if htmlEncode != "utf-8" { body = ConvertToString(body, "gbk", "utf-8") } } } } else if !strings.Contains(contentType, "utf-8") { body = ConvertToString(body, "gbk", "utf-8") }

網站內容自動提取

網站信息抓取回來了,還是html狀態(tài),需要從中提取出有用的信息,才達到我們想要的最終目的,內置了qq采集、微信采集、電話采集等功能。

相關代碼

//嘗試獲取微信 reg := regexp.MustCompile(`(?i)(微信|微信客服|微信號|微信咨詢|微信服務)/s*(:|:|/s)/s*([a-z0-9/-_]{4,30})`) match := reg.FindStringSubmatch(contentText) if len(match) > 1 { website.WeChat = match[3] } //嘗試獲取QQ reg = regexp.MustCompile(`(?i)(QQ|QQ客服|QQ號|QQ號碼|QQ咨詢|QQ聯(lián)系|QQ交談)/s*(:|:|/s)/s*([0-9]{5,12})`) match = reg.FindStringSubmatch(contentText) if len(match) > 1 { website.QQ = match[3] } //嘗試獲取電話 reg = regexp.MustCompile(`([0148][1-9][0-9][0-9/-]{4,15})`) match = reg.FindStringSubmatch(contentText) if len(match) > 1 { website.Cellphone = match[1] }

使用了哪些開源項目

全網網址采集器采用了兩個非常有名的開源項目,一個是用于網站內容抓取的項目gorequest,另一個是用于網站內容分析的項目goquery。兩個項目共同組成了采集器的核心功能。

如果你對采集器的原理有更大的興趣,可以直接拜讀存放在GitHub上的源碼:https://github.com/fesiong/cobweb

關鍵詞:信息,訪問,獲取,把手

74
73
25
news

版權所有? 億企邦 1997-2025 保留一切法律許可權利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點擊下載Chrome瀏覽器
關閉