網站抓取通常會因為使用標準或不適當的使用者代理而導致被封鎖。 本文示範了一種簡單的方法,透過在 Go Colly 抓取工具中使用隨機的虛假用戶代理來緩解此問題。
了解假用戶代理
用戶代理程式是標識發出 Web 請求的客戶端的字串。 它們傳達有關應用程式、作業系統(Windows、macOS、Linux)和瀏覽器(Chrome、Firefox、Safari)的資訊。 網站將此資訊用於各種目的,包括安全性和分析。
典型的用戶代理字串可能如下所示(Android 上的 Chrome):
<code>'User-Agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Mobile Safari/537.36'</code>
Go Colly 的預設用戶代理:
<code>"User-Agent": "colly - https://www.php.cn/link/953bd83cb0b9c9f9dc4b3ba0bfc1b236",</code>
輕鬆辨識您的抓取工具,增加被封鎖的風險。 因此,採用自訂的、隨機的用戶代理至關重要。
使用 Go Colly 實作假用戶代理
修改請求標頭以包含自訂使用者代理程式是使用 OnRequest()
回呼實現的。 這確保每個請求使用不同的用戶代理字串。
<code class="language-go">package main import ( "bytes" "log" "github.com/gocolly/colly" ) func main() { c := colly.NewCollector(colly.AllowURLRevisit()) c.OnRequest(func(r *colly.Request) { r.Headers.Set("User-Agent", "Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148") }) c.OnResponse(func(r *colly.Response) { log.Printf("%s\n", bytes.Replace(r.Body, []byte("\n"), nil, -1)) }) for i := 0; i < 5; i++ { c.Visit("httpbin.org/headers") } }</code>
這為所有請求設定一個用戶代理。 為了更穩健的抓取,請使用隨機方法。
透過隨機使用者代理程式輪替
github.com/lib4u/fake-useragent
套件簡化了隨機用戶代理選擇。
<code class="language-go">package main import ( "bytes" "fmt" "log" "github.com/gocolly/colly" uaFake "github.com/lib4u/fake-useragent" ) func main() { ua, err := uaFake.New() if err != nil { fmt.Println(err) } c := colly.NewCollector(colly.AllowURLRevisit()) c.OnRequest(func(r *colly.Request) { r.Headers.Set("User-Agent", ua.Filter().GetRandom()) }) c.OnResponse(func(r *colly.Response) { log.Printf("%s\n", bytes.Replace(r.Body, []byte("\n"), nil, -1)) }) for i := 0; i < 5; i++ { c.Visit("httpbin.org/headers") } }</code>
此程式碼片段為每個請求檢索一個隨機使用者代理程式。
使用特定的假用戶代理
github.com/lib4u/fake-useragent
提供過濾選項。 例如,要使用隨機桌面 Chrome 使用者代理程式:
<code class="language-go">r.Headers.Set("User-Agent", ua.Filter().Chrome().Platform(uaFake.Desktop).Get())</code>
記得在抓取時始終尊重網站的robots.txt
和服務條款。 使用隨機用戶代理是負責任的網路抓取的眾多技術之一; 也考慮使用代理和其他標頭管理策略。
參考資料:
以上是Golang 與 Colly:抓取時使用隨機假用戶代理的詳細內容。更多資訊請關注PHP中文網其他相關文章!