go語言爬蟲一例

2021-08-22 06:19:54 字數 1443 閱讀 4974

最近在學go,以前都是用python爬蟲,這次試一下用go寫。

和第乙個程式要寫hello world一樣,我們來爬個豆瓣前250電影

首先上碼

package main

import (

"fmt"

"goquery"

"strconv"

)func main() )

}}

結果

1 肖申克的救贖

2 霸王別姬

3 這個殺手不太冷

4 阿甘正傳

5 美麗人生

6 鐵達尼號

7 千與千尋

8 辛德勒的名單

9 盜夢空間

10 機械人總動員

....

分析

opening,_ := goquery.newdocument(url)
goquery 需要指定乙個 html 文件才能繼續後續的操作,newdocument(url string) (*document, error): 傳入 url,內部用go自帶的http.get獲取網頁。

ele := opening.find("div.hd")
selection有一系列類似 jquery 的方法,document結構體內嵌了*selection,因此也能直接呼叫這些方法。主要的方法是selection.find(selector string),傳入乙個選擇器,返回乙個新的,匹配到的*selection,所以能夠鏈式呼叫。

ele.each(func(index int, content *goquery.selection) )
對於這種需要返回列表資料的問題,需要進行迭代操作。goquery 提供了三個用於迭代的方法,都接受乙個匿名函式作為引數,我們用到了each():

each(f func(int, *selection)) *selection: 其中函式f的第乙個引數是當前的下標,第二個引數是當前的節點

如果乙個選擇器對應多個結果,例如幾項的 class 是一樣的,可以使用first(),last(),eq(index int),slice(start, end int)這些方法進一步定位。

go使用fmt.println()進行列印,這裡配合迭代的索引index和頁數的索引page算出電影總索引。

由於使用了goquery,**比較簡單,也可以使用一些更底層的包,不過就比較麻煩了。

參考:

C語言陣列賦值一例

在移植核心時,發現乙個驅動使用陣列十分巧妙。一般地,操作cpu某一外設寄存,不是直接使用完整的位址,而是通過相對位址來訪問。比如,訪問定時器,首先參考手冊定義好定時器基位址,然後再定義暫存器 如控制暫存器 讀資料暫存器等 對於定時器基位址的偏移位址。在使用時,一般都是使用偏移位址的,這樣十分方便 快...

演算法優化一例

本文將以排序演算法中的插入排序為例,介紹優化演算法,編制高效程式的方法。人們通常用於排序手中橋牌的方法是一次考慮一張牌,將它插入到已經排序過的牌的適當位置中 時刻讓它們保持有序 在計算機實現中,我們需要將較大的元素移到右邊,為插入的元素準備空間,然後再在空位置上插入該元素。該演算法的通常的乙個實現如...

delegate 委託一例

using system using system.collections.generic using system.linq using system.text namespace consoletest public static void englishgreeting string snam...