Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 精品久久久久亚洲,欧美亚洲激情,成人激情在线

          整合營銷服務商

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

          免費咨詢熱線:

          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的生產。


          主站蜘蛛池模板: 一区二区3区免费视频| 日韩精品成人一区二区三区| 日韩一区二区久久久久久| 精品一区狼人国产在线| 国产一区二区三区播放心情潘金莲| 无码人妻AⅤ一区二区三区| 大屁股熟女一区二区三区| 国产精品无圣光一区二区 | 国产区精品一区二区不卡中文| 国产一区二区三区乱码网站| 国产成人无码一区二区三区 | 一区二区三区免费电影| 国产经典一区二区三区蜜芽| 人妻无码一区二区不卡无码av| 亚洲熟妇av一区二区三区下载| 国产午夜精品一区理论片| 国产aⅴ一区二区| 中文字幕一区二区日产乱码| 国产亚洲一区二区三区在线不卡| 一区二区三区免费高清视频| 丰满人妻一区二区三区视频53| 精品人妻少妇一区二区| 台湾无码一区二区| 欧美日韩精品一区二区在线视频 | 国产精品福利一区二区久久| 国产对白精品刺激一区二区| 中文激情在线一区二区| 无码丰满熟妇浪潮一区二区AV | 亚洲Aⅴ无码一区二区二三区软件| 久久国产高清一区二区三区| 国产在线一区二区三区| 狠狠综合久久av一区二区| 久久精品一区二区三区日韩| 国内精品一区二区三区最新| 国产成人AV一区二区三区无码| 精品国产福利一区二区| 亚洲一区无码精品色| 亚洲国产情侣一区二区三区| 无码中文字幕人妻在线一区二区三区 | 中文乱码字幕高清一区二区| 亚洲日韩中文字幕一区|