golang:Goquery簡單爬蟲執行個體

來源:互聯網
上載者:User

Selection類型提供的方法,這些方法是頁面解析最重要,最核心的方法

1)類似函數的位置操作

-Eq(index int) *Selection     //根據索引擷取某個節點集

  -  First() *Selection          //擷取第一個子節點集

  -  Last() *Selection         //擷取最後一個子節點集

  -  Next() *Selection         //擷取下一個兄弟節點集

  -  NextAll() *Selection      //擷取後面所有兄弟節點集

  -  Prev() *Selection         //前一個兄弟節點集

  - Get(index int) *html.Node  //根據索引擷取一個節點

  - Index() int                //返回選擇對象中第一個元素的位置

- Slice(start, end int) *Selection  //根據起始位置擷取子節點集


2)擴大 Selection 集合(增加選擇的節點)

-  Add(selector string) *Selection //將匹配到的節點添加當前節點集合中

-   AndSelf() *Selection    //將堆棧上的前一組元素添加到當前的

     -    Union() *Selection    //which is an alias for AddSelection()


3)過濾方法,減少節點集合

   -  End() *Selection

- Filter…()     //過濾

- Has…()

- Intersection()   //which is an alias of FilterSelection()

- Not…()


4)迴圈遍曆選擇的節點

-  Each(f func(int, *Selection)) *Selection //遍曆

- EachWithBreak(f func(int, *Selection) bool) *Selection  //可中斷遍曆

- Map(f func(int, *Selection) string) (result []string)  //返回字串數組


5)修改文檔

- After…()            //在匹配元素之後追加元素

- Append…()         //將選取器指定的元素添加到匹配元素集合的每個元素的末尾

- Before…()          //在匹配元素之前追加元素

- Clone()             //建立匹配節點的副本

- Empty()            //清空子節點

- Prepend…()

- Remove…()

- ReplaceWith…()

- Unwrap()

- Wrap…()

- WrapAll…()

- WrapInner…()


6)檢測或擷取節點屬性值

- Attr(), RemoveAttr(), SetAttr()  //擷取,移除,設定屬性的值

- AddClass(), HasClass(), RemoveClass(), ToggleClass()

- Html()  //擷取該節點的html

- Length() //返回該Selection的元素個數

- Size(), which is an alias for Length()

- Text()  //擷取該節點的文本值


7)查詢或顯示一個節點的身份

- Contains() //包含

- Is…()


8)在文檔樹之間來回跳轉(常用的尋找節點方法)

- Children…()

- Contents()

- Find…()

- Next…()

- Parent[s]…()

- Prev…()

- Siblings…()


操作執行個體:

func main(){

    client := http.Client{}

    req,_ := http.NewRequest("GET","http://www.xicidaili.com/wn/1",nil)

    req.Header.Add("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79     Safari/537.36 Maxthon/5.2.3.1000")

    resp,_ := client.Do(req)

    doc,_ := goquery.NewDocumentFromReader(resp.Body)

    log.Print(doc.Html())

    doc.Find("tbody tr").Each(func(iint, selection *goquery.Selection) {

        proxy := models.TbSpiderProxyIp{}

        selection.Children().Each(func(iint, selection *goquery.Selection) {

            switch i {

            case 1:

            proxy.Ip = selection.Text()

            case 2:

            port, _ :=strconv.ParseInt(selection.Text(), 10, 64)

            proxy.Port = port

            case 3:

            proxy.Address = selection.Text()

            case 9:

            proxy.Check_date = selection.Text()

            default:

            }

    })

    proxy.Https =1

    proxy.Status =1

   proxy.Createdate = time.Now().Format("2006-01-02 15:04:05")

    models.InsertTbSpiderProxy(&proxy)

})

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.