之前一直都是再用python寫爬蟲,最近想體驗下golang寫爬蟲的感覺,所以就有了這個系列。我想要抓取的頁面是豆瓣top250頁面,選擇它的理由有3個:
豆瓣頁面**相對規範
豆瓣對爬蟲愛好者相對更寬容
top250頁面簡潔,很適合拿來練手
我們先看第一版的**。
按邏輯我把抓取**分成2個部分:
http請求
解析頁面中的內容
我們先看http請求,golang語言的http請求庫不需要使用第三方的庫,標準庫就內建了足夠好的支援:
}我把url請求的邏輯都放在了fetch函式中,裡面做了一些異常處理。值得說的有2點:
在header中設定了user-agent,讓訪問看起來更像搜尋引擎bot。如果乙個**希望自己的內容被google收錄那麼他就不會拒絕這樣的ua的訪問。
需要通過ioutil.readall 讀取resp的body內容,最後用string(body)把它轉化成字串
接著就是解析頁面的部分:
import (
"regexp"
"strings"
)func parseurls(url string)
elapsed := time.since(start)
fmt.printf("took %s", elapsed)
}
在golang中把數字轉成字串需要使用strconv.itoa
(嘿嘿,本部落格網域名稱就是這個模組),這樣就可以根據start的引數的不通拼出正確的頁面路徑。用乙個for迴圈完成翻頁。
執行起來非常快:
❯ go run crawler/doubancrawler1.go
... # 省略輸出
took 1.454627547s
通過終端輸出可以看到我們拿到了對應電影條目的id和電影標題! 用python的for迴圈寫氣泡排序
題目 利用for迴圈,完成a 1,7,4,89,34,2 的氣泡排序 氣泡排序 小的排前面,大的排後面。第一種 可以看到每次排序的結果 1 a 100,97,4,89,34,2 2 n 0 3for n in range 0,5 4for i in range 0,len a 1 5if a i a...
怎麼用php寫乙個日誌功能的函式
我們要寫乙個寫日誌的函式,首先需要了解需求,我們一般怎麼用日誌函式呢?例如,程式執行到某一步,我希望把這個變數 位址 user address的值列印到日誌,我們希望日誌裡是這麼寫的 xx xx xx xx xx user address 上海市楊浦區 xx 然後每一條日誌都要換行,都有日期時間,假...
怎麼用Python寫乙個三體的氣候模擬程式
所謂三體氣候模擬,就是將太陽出現的情況進行分類討論,然後將其呈現出來。比如說一顆太陽就是恆紀元,兩顆太陽可能是二日凌空或二日連珠,三顆太陽也可能是三日凌空或三日連珠。只要明白了這一點,這個三體氣候模擬的程式就很好寫了。在寫程式前,得先導入乙個庫。由於三體問題的複雜性,我們姑且將三顆太陽出現的概率定位...