golang 多執行緒爬蟲

2021-08-14 17:40:20 字數 2000 閱讀 7310

這是乙個golang爬蟲demo 爬去乙個美女**的首頁所有

採用golang 多執行緒的方式爬取 將爬到的儲存到本地

乙個妹子** 請求的 header 必須帶著 referer 否則404 (比較簡單的一種反爬蟲策略)

用wireshark 抓取瀏覽器請求的資料就可以得到 referer

//**不複雜,適合新手學習var url = ""

var c chan int

func main()

func spider()

urls := imagerule(doc, match);

fmt.println("共解析到", len(urls), "位址")

c = make(chan int)

for _, s := range urls

//可以等待一會兒,留時間給子goroutine 執行

//但是這種方式不怎麼靠譜 //直接採用chan 的方式

for i := 0; i < len(urls); i++

}func testdownload()

func match(image string)

func getdata(url string) (eader io.reader, err error)

// 得到乙個網頁中所有 imageurl

func parseimageurl(reader io.reader) (res string, err error)

fmt.println(doc.url)

imagerule(doc, func(image string) )

return res, nil

}func imagerule(doc *goquery.document, f func(image string)) (urls string)

} })

return str

}//根據url 建立http 請求的 request

//**有反爬蟲策略 wireshark 不解釋

}// 判讀資料夾是否存在

func i***ist(dir string) bool

return os.i***ist(err)

}// 通過url 得到名字

func getnamefromurl(url string) string

goquery 傳送門

爬蟲多執行緒

多執行緒在之前的scrapy裡面已經接觸過了,就是裡面的yiled,開啟乙個新的執行緒。但是這是這是基於這個高階框架的,用的時候只知道這是開啟了乙個新的執行緒,並不是很清楚到底是怎麼執行的。而在python裡面有包 import threading引入這個包之後就可以寫自己的多執行緒了 寫多執行緒的...

多執行緒爬蟲

python標準庫是執行緒之間常見的資料交換形式 queue的使用可以確保python的執行緒安全 q queue.queue maxsize 建立佇列,並可以指定大小 q.empty 判斷佇列是否為空 q.full 判斷佇列是否滿 q.put data 向佇列中放入資料 q.get 從佇列中拿資料...

爬蟲多執行緒

執行緒程序 import requests import threading import json from queue import queue import time 寫子類 class thread crawl threading.thread def init self,name,page...