正则表达式加golang爬虫爬取经典案例豆瓣top250
生活随笔
收集整理的這篇文章主要介紹了
正则表达式加golang爬虫爬取经典案例豆瓣top250
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
代碼如下,引入了正則表達式的使用:
package mainimport ("fmt""io""net/http""os""regexp""strconv" )func savToFile(index int, filmName, filmScore [][]string) {f, err := os.Create("第" + strconv.Itoa(index) + "頁.txt")if err != nil {fmt.Println("os create err", err)return}defer f.Close()// 查出有多少條n := len(filmName)// 先寫抬頭 名稱 評分f.WriteString("電影名稱" + "\t\t\t" + "評分" + "\n")for i := 0; i < n; i++ {f.WriteString(filmName[i][1] + "\t\t\t" + filmScore[i][1] + "\n")} }func main() {var start, end intfmt.Print("請輸入要爬取的起始頁")fmt.Scan(&start)fmt.Print("請輸入要爬取的終止頁")fmt.Scan(&end)working(start, end) }func working(start int, end int) {fmt.Printf("正在爬取%d到%d頁", start, end)for i := start; i <= end; i++ {SpiderPage(i)} }// 爬取一個豆瓣頁面數據信息保存到文檔 func SpiderPage(index int) {// 獲取urlurl := "https://movie.douban.com/top250?start=" + strconv.Itoa((index-1)*25) + "&filter="// 爬取url對應頁面result, err := HttpGet(url)if err != nil {fmt.Println("httpget err", err)return}//fmt.Println("result=", result)// 解析,編譯正則表達式 ---電影名稱ret := regexp.MustCompile(`<img width="100" alt="(?s:(.*?))"`)filmName := ret.FindAllStringSubmatch(result, -1)for _, name := range filmName {fmt.Println("name", name[1])}ret2 := regexp.MustCompile(`<span class="rating_num" property="v:average">(?s:(.*?))<`)filmScore := ret2.FindAllStringSubmatch(result, -1)for _, score := range filmScore {fmt.Println("score", score[1])}savToFile(index, filmName, filmScore)}// 爬取指定url頁面,返回result func HttpGet(url string) (result string, err error) {req, _ := http.NewRequest("GET", url, nil)// 設置頭部信息req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36 OPR/66.0.3515.115")resp, err1 := (&http.Client{}).Do(req)//resp, err1 := http.Get(url) //此方法已經被豆瓣視為爬蟲,返回狀態嗎為418,所以必須偽裝頭部用上述辦法if err1 != nil {err = err1return}defer resp.Body.Close()buf := make([]byte, 4096)//循環爬取整頁數據for {n, err2 := resp.Body.Read(buf)if n == 0 {break}if err2 != nil && err2 != io.EOF {err = err2return}result += string(buf[:n])}return}總結
以上是生活随笔為你收集整理的正则表达式加golang爬虫爬取经典案例豆瓣top250的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 巧妙利用channel进行golang并
- 下一篇: leetcode(1)---两数之和