<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
貢獻某CC,go原始碼爬蟲一個,基於colly,效果是根據輸入的瀏覽器cookie及excel必要行列號,從excel中讀取公司名稱,查詢公司法人及電話號碼。並寫回到excel中指定行。
package main import ( "bufio" "fmt" "github.com/gocolly/colly/debug" "github.com/gocolly/colly/extensions" "github.com/xuri/excelize/v2" "net/url" "os" "runtime" "strconv" "time" ) import "github.com/gocolly/colly" var ( cookies string tempUrl string tempGongSiName string tempI int ) func main() { //要處理的檔案全名 var fileName string //列的名稱 var namelie string //開始行號 var startNum int //結束行號 var endNum int var personLie string var phoneLie string fmt.Println("請輸入瀏覽器cookies 在瀏覽器 開發者模式F12,情況下找到控制檯(consol) 輸入(注意,Cookie中如果有 HttpOnly的需要在開發工具中將HttpOnly取消掉,然後再執行後面命令):document.cookie 即可,然後複製出來! 右擊,複製字串內容") //fmt.Scan(&cookies) //此行遇到空格會 預設輸入完畢了,所以不能用它 reader := bufio.NewReader(os.Stdin) res, _, err := reader.ReadLine() if nil == err { cookies=string(res) }else{ fmt.Println("讀取cookie錯誤 error:", err) return } //fmt.Println("輸入的cookie是:"+cookies) fmt.Println("請輸入檔案全路徑:(字串型別)") fmt.Scan(&fileName) fmt.Println("請輸入Excel要查詢公司名稱列的字母(字母大寫):") fmt.Scan(&namelie) fmt.Println("請輸入Excel指定列的第一個行號(數位型別):") fmt.Scan(&startNum) fmt.Println("請輸入Excel指定列的最後一個行號(數位型別):") fmt.Scan(&endNum) fmt.Println("請輸入Excel聯絡人的所在列的字母(字母大寫):") fmt.Scan(&personLie) fmt.Println("請輸入Excel聯絡電話所在列的字母(字母大寫):") fmt.Scan(&phoneLie) //輸出所有輸入的資訊,驗證正確 //fmt.Println(fileName,namelie,startNum,endNum,personLie,phoneLie) f, err := excelize.OpenFile(fileName) if err!=nil { fmt.Println(err) return } c:=initCollector(f,personLie,phoneLie) //上面開啟的工作簿記得關閉吆。 defer func() { // 關閉工作簿 if err := f.Close(); err != nil { fmt.Println(err) } }() for i:=startNum;i<=endNum;i++{ // 獲取工作表中指定單元格的值 cell, err := f.GetCellValue("Sheet1", namelie+strconv.Itoa(i)) if err != nil { fmt.Println("讀取第"+strconv.Itoa(i)+"行出錯!") return }else{ fmt.Println("開始抓取:"+cell+" 資料") tempGongSiName = cell tempI = i visitUrl(c) time.Sleep(1*time.Second) } } fmt.Println("-------------親愛的,程式成功執行完畢。--------我要喝咖啡,我要吃肉肉------!") } ///初始化收集器 func initCollector(f *excelize.File,personLie string,phoneLie string,) *colly.Collector { c := colly.NewCollector(colly.MaxDepth(1), colly.Debugger(&debug.LogDebugger{})) extensions.RandomUserAgent(c) // 使用隨機的UserAgent,最好能使用代理。這樣就不容易被ban c.SetProxy("socks5://127.0.0.1:7890") c.OnError(func(response *colly.Response, err error) { fmt.Println("---->onError --------爬取出錯了"+err.Error()) runtime.Goexit() }) c.OnResponse(func(response *colly.Response) { fmt.Println("---->onResponse") }) c.OnXML("table", func(element *colly.XMLElement) { fmt.Println("---->onXML") }) c.OnRequest(func(r *colly.Request) { r.Headers.Set("Cookie",cookies) r.Headers.Add("referer", tempUrl) r.Headers.Add("sec-fetch-mode", "cors") r.Headers.Add("sec-fetch-site", "same-origin") r.Headers.Add("accept", "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01") r.Headers.Add("accept-encoding", "gzip, deflate, br") r.Headers.Add("accept-language", "en,zh-CN;q=0.9,zh;q=0.8") r.Headers.Add("X-Requested-With", "XMLHttpRequest") }) c.OnHTML("tr:first-child", func(e *colly.HTMLElement) {//拿到查詢的第一條資料。 fmt.Println("---->onHtml---獲取成功!") //拿到第一條的公司主要資訊。 //fmt.Println("---->"+e.DOM.Find(".relate-info").Text()) sellectEle := e.DOM.Find(".relate-info") //最終查詢出來的人 name:=sellectEle.Find("div:nth-child(1)").Find("div>span").First().Find("a").Text() //最終查詢出來的電話 phone:=sellectEle.Find("div:nth-child(2)").Find("div>span").First().Find("span>span").Find(":nth-child(2)").Text() //fmt.Println("--->>>"+name) //fmt.Println("--->>>"+phone) f.SetCellValue("Sheet1", personLie+strconv.Itoa(tempI), name) fmt.Println("將"+tempGongSiName+"人名 ("+name+") 寫入 "+personLie+strconv.Itoa(tempI)) f.SetCellValue("Sheet1", phoneLie+strconv.Itoa(tempI), phone) fmt.Println("將"+tempGongSiName+"電話 ("+phone+") 寫入 "+phoneLie+strconv.Itoa(tempI)) f.Save() }) c.OnScraped(func(response *colly.Response) { fmt.Println("onScraped") }) return c } //存取給定名稱 func visitUrl(c *colly.Collector){ tempUrl:="https://www.xxx.com/web/search?key="+url.QueryEscape(tempGongSiName) c.Visit(tempUrl) }
以上就是go colly 爬蟲實現範例的詳細內容,更多關於go colly 爬蟲的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45