整合營銷服務商

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

          免費咨詢熱線:

          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无码一区二区三区人| 红杏亚洲影院一区二区三区| 国产一区在线mmai| 亚洲第一区精品日韩在线播放| 精品人妻码一区二区三区| 在线不卡一区二区三区日韩| 国产在线第一区二区三区| 风间由美在线亚洲一区| 性色AV一区二区三区| 亚洲国产综合无码一区| 日本片免费观看一区二区| 精品无人区一区二区三区在线| 国产伦精品一区二区三区免费下载| 日美欧韩一区二去三区| 国产在线精品一区在线观看| 在线观看国产一区二区三区| 精品久久久久久中文字幕一区| 99久久无码一区人妻a黑| 波多野结衣的AV一区二区三区| 色国产在线视频一区| 中文字幕av无码一区二区三区电影 | 日本精品一区二区三本中文| 亚洲色精品VR一区区三区| 熟妇人妻AV无码一区二区三区| 亚洲一区二区三区高清视频| 日韩最新视频一区二区三| 精品日韩一区二区| 亚洲一区二区视频在线观看| 中文字幕精品一区二区三区视频| 久夜色精品国产一区二区三区 | 无码一区二区三区免费| 成人精品一区二区激情| 一区二区三区四区精品| 91亚洲一区二区在线观看不卡| 国产精品第一区揄拍无码| 无码av免费一区二区三区| 日韩精品无码Av一区二区| 97久久精品无码一区二区| 色妞AV永久一区二区国产AV| 日韩最新视频一区二区三| 中文字幕人妻无码一区二区三区|