在上一篇Colly 安裝中,我們已經(jīng)成功安裝了 Colly,現(xiàn)在讓我們一起進(jìn)入 Colly 的奇妙世界,開啟網(wǎng)絡(luò)爬蟲之旅。編程獅(W3Cschool.cn)將繼續(xù)用通俗易懂的語言,結(jié)合實(shí)際案例,帶你輕松玩轉(zhuǎn) Colly。
安裝完 Colly 后,我們迫不及待地想讓它開始工作。最簡單的任務(wù)就是讓 Colly 去訪問一個網(wǎng)頁,并把網(wǎng)頁的標(biāo)題抓取回來,這就像是讓一個小朋友先學(xué)會和別人打招呼一樣。
創(chuàng)建一個名為 hello_crawler.go
的文件,然后寫入以下代碼:
package main
import (
"fmt"
"github.com/gocolly/colly"
)
func main() {
// 創(chuàng)建默認(rèn)收集器
c := colly.NewCollector()
// 當(dāng)訪問頁面時,輸出頁面標(biāo)題
c.OnHTML("title", func(e *colly.HTMLElement) {
fmt.Println("網(wǎng)頁標(biāo)題:", e.Text)
})
// 訪問頁面
c.Visit("http://eska-fuses.cn/")
}
colly.NewCollector()
:這是創(chuàng)建一個收集器,就像是給 Colly 準(zhǔn)備了一個小籃子,用來裝它從網(wǎng)頁上收集到的信息。c.OnHTML("title", ...)
:這個函數(shù)的意思是,當(dāng) Colly 在網(wǎng)頁上找到 <title>
標(biāo)簽時,就執(zhí)行后面的操作。這里我們讓它把標(biāo)題打印出來。c.Visit("http://eska-fuses.cn/")
:這個函數(shù)就是讓 Colly 去訪問指定的網(wǎng)頁,就像給它一個網(wǎng)址,讓它去敲別人的門。
在終端(Terminal)中,導(dǎo)航到包含 hello_crawler.go
文件的文件夾,然后運(yùn)行以下命令:
go run hello_crawler.go
如果一切順利,你會看到編程獅(W3Cschool.cn)網(wǎng)站的標(biāo)題打印在終端上。這就意味著你的第一個 Colly 爬蟲成功運(yùn)行啦!
網(wǎng)絡(luò)爬蟲不僅僅是要能抓取數(shù)據(jù),還要做到禮貌訪問,不能給目標(biāo)網(wǎng)站帶來負(fù)擔(dān)。這就像是去別人家做客,要遵守規(guī)矩一樣。
在爬取多個頁面時,頻繁的請求可能會對目標(biāo)網(wǎng)站的服務(wù)器造成壓力。為了避免這種情況,我們可以設(shè)置請求延遲,讓 Colly 在發(fā)送請求之間等待一段時間。代碼示例:
c.Limit(&colly.LimitRule{
DomainGlob: "*", // 對所有域名生效
Parallelism: 2, // 同時發(fā)送 2 個請求
Delay: 1 * time.Second, // 每個請求之間間隔 1 秒
})
有時候,目標(biāo)網(wǎng)站會檢查請求頭來判斷是否是真實(shí)的瀏覽器訪問。為了更好地模擬瀏覽器行為,我們可以設(shè)置請求頭。代碼示例:
c.SetRequestOptions(&colly.RequestOptions{
Headers: map[string]string{
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
},
})
這樣設(shè)置后,目標(biāo)網(wǎng)站就會認(rèn)為是常見的瀏覽器在訪問,而不是一個簡單的爬蟲程序。
除了抓取網(wǎng)頁標(biāo)題,我們還可以用 Colly 抓取網(wǎng)頁上的其他數(shù)據(jù)。比如抓取所有鏈接,這就像是在寶庫里尋找更多的線索,通向更多的寶藏。
c.OnHTML("a", ...)
:這個函數(shù)的意思是,當(dāng) Colly 在網(wǎng)頁上找到 <a>
標(biāo)簽(也就是超鏈接)時,就執(zhí)行后面的操作。e.Attr("href")
:這個函數(shù)是用來獲取 <a>
標(biāo)簽的 href
屬性值,也就是鏈接的地址。通過本篇文章,我們已經(jīng)成功創(chuàng)建并運(yùn)行了第一個 Colly 爬蟲,還學(xué)習(xí)了如何讓爬蟲更有禮貌地訪問網(wǎng)頁,以及如何抓取網(wǎng)頁上的更多數(shù)據(jù)。在編程獅(W3Cschool.cn)的后續(xù)教程中,我們會繼續(xù)深入學(xué)習(xí) Colly 的高級功能,比如處理 JavaScript 渲染的頁面、存儲抓取到的數(shù)據(jù)等等。希望你能持續(xù)關(guān)注,和我們一起在網(wǎng)絡(luò)爬蟲的世界里探索更多樂趣!
更多建議: