整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          GoQuery - Go語言的jQuery

          GoQuery - Go語言的jQuery

          慣了使用 jQuery 的 $(...) 語法來查詢和操作 DOM 元素,那換種語言,用 Go 語言該怎么實現呢?來看看 goquery 吧!

          HTML網頁DOM樹

          簡介

          goquery,是 github 上 PuerkitoBio 開源的 Go 語言庫,代碼倉庫在 https://github.com/PuerkitoBio/goquery。goquery 是一個用于查詢和操作 DOM 元素的庫,并采用了盡可能與 jQuery 相似的語法,以降低學習難度和使用門檻。

          Go語言

          安裝

          goquery 需要 Go 1.1 以上版本,使用 go get 直接安裝:

          go get github.com/PuerkitoBio/goquery


          目前的版本為 v1.5.1,依賴包括 net/html 和 CSS 選擇器 cascadia。


          示例

          goquery 主要使用了兩個結構體 Document (文檔) 和 Selection (選擇)。Document 代表了一個解析之后的 HTML 文檔,而 Selection 則代表了進行查詢后得到的 DOM 結點集合。Document 的定義中嵌入了 Selection,故而 Document 可使用 Selection 的方法。

          下面給出一個 goquery 的使用例子:

          package main
          
          import (
              "fmt"
              "log"
              "net/http"
          
              "github.com/PuerkitoBio/goquery"
          )
          
          func ExampleScrape() {
              // 請求HTML頁面.
              res, err :=http.Get("http://metalsucks.net")
              if err !=nil {
                  log.Fatal(err)
              }
              defer res.Body.Close()
              if res.StatusCode !=200 {
                  log.Fatalf("status code error: %d %s", res.StatusCode, res.Status)
              }
          
              // 解析HTML生成goquery文檔.
              doc, err :=goquery.NewDocumentFromReader(res.Body)
              if err !=nil {
                  log.Fatal(err)
              }
          
              // 在文檔中進行查找.
              doc.Find(".sidebar-reviews article .content-block").Each(func(i int, s *goquery.Selection) {
                  // 對于查找到的每一項,進一步獲取目標文本內容.
                  band :=s.Find("a").Text()
                  title :=s.Find("i").Text()
                  fmt.Printf("Review %d: %s - %s\n", i, band, title)
              })
          }
          
          func main() {
              ExampleScrape()
          }

          該例子對一個新聞類網站進行了解析,并獲取每一條新聞的標題等文本信息。

          我們首先使用 net/http 進行 HTTP 請求,得到目標網站的響應。然后,使用了goquery 的 NewDocumentFromReader 來從響應讀取并解析得到一個 HTML 文檔。NewDocumentFromReader 是這樣定義的:

          func NewDocumentFromReader(r io.Reader) (*Document, error)

          然后,使用 Selection 的 Find 方法進行查找,返回查詢結果,對應 jQuery 中的 find 函數:

          func (s *Selection) Find(selector string) *Selection

          對于結果集合,使用 Selection 的 Each 方法進行遍歷,對應 jQuery 中的 each 函數:

          func (s *Selection) Each(f func(int, *Selection)) *Selection

          對于遍歷的每一項,再次使用 Find 查找子元素,并利用 Text 方法獲得元素的文本,對應 jQuery 的 text 函數:

          func (s *Selection) Text() string


          總結

          goquery 使用 Go 語言實現了與 jQuery 盡可能相似的查詢和操作語法,包括 CSS 選擇語法和絕大部分的操作函數,方便熟悉 jQuery 的 Go 語言開發人員快速完成 HTML 文檔的解析和查詢操作。

          goquery庫方便了 Go 語言進行網頁抓取和解析的工作,使得Go語言在該領域有了門檻較低、使用方便的工具。

          goquery庫目前已經歷了數年的開發,代碼質量較高,注釋豐富,值得研究學習。

          JavaScript中,有時您需要訪問HTML元素。querySelector方法是一個Web API,它選擇與傳入的指定CSS選擇器匹配的第一個元素。

          但是,更詳細地說,這是如何工作的呢?在本文中,我們將看一些如何使用querySelector方法以及querySelectorAll方法的示例。

          (本文內容參考:java567.com)

          提:

          用python寫了一個簡單的log分析,主要也就是查詢一些key,value出來,后面也可以根據需求增加。查詢出來后,為了好看,搞個html 表格來顯示。

          需要的組件: jinja2 flask 的模板。

          先說下設計思路,主要是練習python代碼玩,高手略過

          模擬scrapy,搞個管線


          每個管線分預處理,分析器,和后處理。預處理的話,可以篩選下數據,分析器提取關鍵信息,然后把結果丟給后處理。html報表就是在后處理生成。

          再搞個manger類,管理很多個管線,雖然現在單路pipeLine就完成了,說不定以后還能擴展呢。



          我們可以定義預處理,比如過濾一些不關注的關鍵字,或者關注一些特定關鍵字的行


          預處理的話,只處理QtiDCT-C關鍵字的日志行。

          然后把經過預處理后的數據丟給分析器

          主要查詢行數據行里面是否有keyword,然后根據分隔符,和結束符來提取內容

          keyword delimiter xxxxxendwith 這樣個模式

          獲取最終結果存儲到字典里面 result[keyword]=xxxx。這里會trim,去掉 \r\n.

          這樣就有了結果集result.最后丟給posthandler 后處理。完成報表輸出。


          后處理主要是用jinja2的模板,然后傳遞參數,生成最終的html文件。

          這里的jinja_template.temple, 內容如下



          有了模板,就可以在渲染模板的時候提供字典,變量,在模板里面顯示。最終完成報表的輸出。


          最終使用


          最終在main 方法中,通過-d參數傳入log所在目錄,然后迭代所有的文件,使用input 把文本文件轉換成行數據的list,丟給管線,最后把管線丟給manager,調用process ,完成txt日志的分析,到最后html的生產。


          主站蜘蛛池模板: 青青青国产精品一区二区| av在线亚洲欧洲日产一区二区| 亚洲乱码一区二区三区在线观看| 日本免费一区二区三区 | 在线观看精品一区| 国内国外日产一区二区| 日本一区午夜爱爱| 国产精品成人99一区无码 | 色系一区二区三区四区五区| 国产高清在线精品一区| 久久久国产精品一区二区18禁| 欧洲精品一区二区三区在线观看 | 精品免费AV一区二区三区| 在线播放国产一区二区三区 | 无码中文字幕人妻在线一区二区三区 | 一区二区三区在线观看| 日韩精品无码一区二区中文字幕| 亚洲一区二区三区四区在线观看| 无码国产精品一区二区免费式芒果| 久久精品国产一区二区三区日韩| 亚洲av乱码中文一区二区三区| 久久精品国产第一区二区| 色窝窝无码一区二区三区| 久久精品国产亚洲一区二区| 久久精品亚洲一区二区| 一区五十路在线中出| 国产精品成人国产乱一区| 国产精品亚洲一区二区三区在线观看| 日本一区二区三区免费高清| 国内精自品线一区91| 欧洲精品码一区二区三区免费看| 国产av夜夜欢一区二区三区| 国产天堂在线一区二区三区| 精彩视频一区二区三区| 成人免费av一区二区三区| 波多野结衣免费一区视频| 无码免费一区二区三区免费播放| 精品人妻一区二区三区浪潮在线| 国产乱人伦精品一区二区| 国产日本亚洲一区二区三区| 国产美女av在线一区|