最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

go?colly?爬蟲(chóng)實(shí)現(xiàn)示例

 更新時(shí)間:2022年09月30日 15:30:03   作者:如此風(fēng)景  
這篇文章主要為大家介紹了go?colly?爬蟲(chóng)實(shí)現(xiàn)示例,效果是根據(jù)輸入的瀏覽器cookie及excel必要行列號(hào),從excel中讀取公司名稱,查詢公司法人及電話號(hào)碼。并寫(xiě)回到excel中指定行

正文

貢獻(xiàn)某CC,go源碼爬蟲(chóng)一個(gè),基于colly,效果是根據(jù)輸入的瀏覽器cookie及excel必要行列號(hào),從excel中讀取公司名稱,查詢公司法人及電話號(hào)碼。并寫(xiě)回到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
   //開(kāi)始行號(hào)
   var startNum int
   //結(jié)束行號(hào)
   var endNum int
   var personLie string
   var phoneLie string
   fmt.Println("請(qǐng)輸入瀏覽器cookies 在瀏覽器 開(kāi)發(fā)者模式F12,情況下找到控制臺(tái)(consol) 輸入(注意,Cookie中如果有 HttpOnly的需要在開(kāi)發(fā)工具中將HttpOnly取消掉,然后再執(zhí)行后面命令):document.cookie  即可,然后復(fù)制出來(lái)! 右擊,復(fù)制字符串內(nèi)容")
   //fmt.Scan(&cookies)  //此行遇到空格會(huì) 默認(rèn)輸入完畢了,所以不能用它
   reader := bufio.NewReader(os.Stdin)
   res, _, err := reader.ReadLine()
   if nil == err {
      cookies=string(res)
   }else{
      fmt.Println("讀取cookie錯(cuò)誤 error:", err)
      return
   }
   //fmt.Println("輸入的cookie是:"+cookies)
   fmt.Println("請(qǐng)輸入文件全路徑:(字符串類型)")
   fmt.Scan(&fileName)
   fmt.Println("請(qǐng)輸入Excel要查詢公司名稱列的字母(字母大寫(xiě)):")
   fmt.Scan(&namelie)
   fmt.Println("請(qǐng)輸入Excel指定列的第一個(gè)行號(hào)(數(shù)字類型):")
   fmt.Scan(&startNum)
   fmt.Println("請(qǐng)輸入Excel指定列的最后一個(gè)行號(hào)(數(shù)字類型):")
   fmt.Scan(&endNum)
   fmt.Println("請(qǐng)輸入Excel聯(lián)系人的所在列的字母(字母大寫(xiě)):")
   fmt.Scan(&personLie)
   fmt.Println("請(qǐng)輸入Excel聯(lián)系電話所在列的字母(字母大寫(xiě)):")
   fmt.Scan(&phoneLie)
   //輸出所有輸入的信息,驗(yàn)證正確
   //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)
   //上面打開(kāi)的工作簿記得關(guān)閉吆。
   defer func() {
      // 關(guān)閉工作簿
      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)+"行出錯(cuò)!")
         return
      }else{
         fmt.Println("開(kāi)始抓?。?+cell+"  數(shù)據(jù)")
         tempGongSiName = cell
         tempI = i
         visitUrl(c)
         time.Sleep(1*time.Second)
      }
   }
   fmt.Println("-------------親愛(ài)的,程序成功執(zhí)行完畢。--------我要喝咖啡,我要吃肉肉------!")
}
///初始化收集器
func initCollector(f *excelize.File,personLie string,phoneLie string,) *colly.Collector {
   c := colly.NewCollector(colly.MaxDepth(1), colly.Debugger(&debug.LogDebugger{}))
   extensions.RandomUserAgent(c)                              // 使用隨機(jī)的UserAgent,最好能使用代理。這樣就不容易被ban
   c.SetProxy("socks5://127.0.0.1:7890")
   c.OnError(func(response *colly.Response, err error) {
      fmt.Println("---->onError  --------爬取出錯(cuò)了"+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) {//拿到查詢的第一條數(shù)據(jù)。
      fmt.Println("---->onHtml---獲取成功!")
      //拿到第一條的公司主要信息。
      //fmt.Println("---->"+e.DOM.Find(".relate-info").Text())
      sellectEle := e.DOM.Find(".relate-info")
      //最終查詢出來(lái)的人
      name:=sellectEle.Find("div:nth-child(1)").Find("div>span").First().Find("a").Text()
      //最終查詢出來(lái)的電話
      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+") 寫(xiě)入  "+personLie+strconv.Itoa(tempI))
      f.SetCellValue("Sheet1", phoneLie+strconv.Itoa(tempI), phone)
      fmt.Println("將"+tempGongSiName+"電話 ("+phone+") 寫(xiě)入  "+phoneLie+strconv.Itoa(tempI))
      f.Save()
   })
   c.OnScraped(func(response *colly.Response) {
      fmt.Println("onScraped")
   })
   return c
}
//訪問(wèn)給定名稱
func visitUrl(c *colly.Collector){
   tempUrl:="https://www.xxx.com/web/search?key="+url.QueryEscape(tempGongSiName)
   c.Visit(tempUrl)
}

以上就是go colly 爬蟲(chóng)實(shí)現(xiàn)示例的詳細(xì)內(nèi)容,更多關(guān)于go colly 爬蟲(chóng)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 淺析Go 字符串指紋

    淺析Go 字符串指紋

    這篇文章主要介紹了Go 字符串指紋的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)go語(yǔ)言,感興趣的朋友可以了解下
    2020-09-09
  • Golang監(jiān)聽(tīng)日志文件并發(fā)送到kafka中

    Golang監(jiān)聽(tīng)日志文件并發(fā)送到kafka中

    這篇文章主要介紹了Golang監(jiān)聽(tīng)日志文件并發(fā)送到kafka中,日志收集項(xiàng)目的準(zhǔn)備中,本文主要講的是利用golang的tail庫(kù),監(jiān)聽(tīng)日志文件的變動(dòng),將日志信息發(fā)送到kafka中?,需要的朋友可以參考一下
    2022-04-04
  • Golang實(shí)現(xiàn)可重入鎖的示例代碼

    Golang實(shí)現(xiàn)可重入鎖的示例代碼

    可重入鎖指的是同一個(gè)線程外層函數(shù)獲得鎖之后,內(nèi)層遞歸函數(shù)仍然能獲取該鎖的代碼,在同一個(gè)線程在外層方法獲取鎖的時(shí)候,在進(jìn)入內(nèi)層方法會(huì)自動(dòng)獲取鎖。本文將用Golang實(shí)現(xiàn)可重入鎖,需要的可以參考一下
    2022-05-05
  • 一文詳解如何使用Go語(yǔ)言生成二維碼

    一文詳解如何使用Go語(yǔ)言生成二維碼

    使用Go語(yǔ)言編程時(shí),生成任意內(nèi)容的二維碼是非常方便的,下面這篇文章主要給大家介紹了關(guān)于如何使用Go語(yǔ)言生成二維碼的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • Go實(shí)現(xiàn)MD5加密的三種方法小結(jié)

    Go實(shí)現(xiàn)MD5加密的三種方法小結(jié)

    本文主要介紹了Go實(shí)現(xiàn)MD5加密的三種方法小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • golang http請(qǐng)求封裝代碼

    golang http請(qǐng)求封裝代碼

    這篇文章主要介紹了golang http請(qǐng)求封裝代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • 淺析Go語(yǔ)言中包的介紹與初始化

    淺析Go語(yǔ)言中包的介紹與初始化

    這篇文章主要為大家詳細(xì)介紹了Go語(yǔ)言中包的介紹與初始化,從而搞清Go程序的執(zhí)行次序,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解下
    2023-10-10
  • Golang實(shí)現(xiàn)四種負(fù)載均衡的算法(隨機(jī),輪詢等)

    Golang實(shí)現(xiàn)四種負(fù)載均衡的算法(隨機(jī),輪詢等)

    本文介紹了示例介紹了Golang 負(fù)載均衡的四種實(shí)現(xiàn),主要包括了隨機(jī),輪詢,加權(quán)輪詢負(fù)載,一致性hash,感興趣的小伙伴們可以參考一下
    2021-06-06
  • GoFrame錯(cuò)誤處理常用方法及錯(cuò)誤碼使用示例

    GoFrame錯(cuò)誤處理常用方法及錯(cuò)誤碼使用示例

    這篇文章主要為大家介紹了GoFrame錯(cuò)誤處理常用方法及錯(cuò)誤碼使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • golang實(shí)現(xiàn)簡(jiǎn)單rpc調(diào)用過(guò)程解析

    golang實(shí)現(xiàn)簡(jiǎn)單rpc調(diào)用過(guò)程解析

    這篇文章主要介紹了golang實(shí)現(xiàn)簡(jiǎn)單rpc調(diào)用,包括RPC具體實(shí)現(xiàn)結(jié)合實(shí)例代碼給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05

最新評(píng)論

肇州县| 景洪市| 屯昌县| 荃湾区| 绥中县| 武义县| 财经| 广饶县| 平塘县| 奉贤区| 大关县| 凌源市| 扶沟县| 文登市| 长汀县| 栖霞市| 孟州市| 扎赉特旗| 扶余县| 晋中市| 桦甸市| 平阳县| 错那县| 墨江| 淮滨县| 米易县| 柳州市| 博野县| 津南区| 三原县| 宁晋县| 青海省| 姚安县| 郴州市| 宾阳县| 昌平区| 成都市| 麦盖提县| 娄底市| 水富县| 香河县|