<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    Html解析利器-goquery庫

    VSole2022-08-03 10:46:20

    簡介

    什么是goquery?

    goquery是由Go實現的基于Go的net/html包和CSS選擇器庫cascadia的HTML解析庫。

    由于net/html解析器需要UTF-8編碼,goquery也同樣需要,所以需要確保提供的html是UTF-8編碼。

    為什么用goquery?

    由于net/html解析器返回的是節點,而不是功能齊全的DOM樹,所以在使用的過程中goquery可以提供更便利的操作。

    快速上手 

    我們先對微博熱搜進行一個簡單的解析,打印當日的熱搜排名標題以及熱度。

    package main
    import (
     "fmt"
     "github.com/PuerkitoBio/goquery"
     "log"
     "net/http"
    )
    type Data struct {
     number string
     title  string
     heat   string
    }
    func main() {
     // 爬取微博熱搜網頁
     res, err := http.Get("https://s.weibo.com/top/summary")
     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的Document
     dom, err := goquery.NewDocumentFromReader(res.Body)
     if err != nil {
      log.Fatalln(err)
     }
     var data []Data
     // 篩選class為td-01的元素
     dom.Find(".td-01").Each(func(i int, selection *goquery.Selection) {
      data = append(data, Data{number: selection.Text()})
     })
     // 篩選class為td-02的元素下的a元素
     dom.Find(".td-02>a").Each(func(i int, selection *goquery.Selection) {
      data[i].title = selection.Text()
     })
     // 篩選class為td-02的元素下的span元素
     dom.Find(".td-02>span").Each(func(i int, selection *goquery.Selection) {
      data[i].heat = selection.Text()
     })
     fmt.Println(data)
    }
    

    打印結果為:

    [{ 網絡安全有你有我 3026574} {1 任豪道歉 1635306} {2 劉鑫方稱對江歌遇害不擔責 1398449} {3 小米折疊屏開售 977369} {4 姜素拉產女 952863} {5 17元吃海底撈 718468} {6 那英 我只配給沈騰楊洋伴唱 634544} {7 日本船東要求埃及打一折 575670} {8 癌癥早期幾乎無癥狀 547113} {9 央行稱要重視理工科教育 540756} {10 李寧回應天價鞋 540379} {11 任豪 外網 537050} {12 謝楠汪聰主持山河令演唱會 531075} {13 偶遇張小斐為李煥英掃墓 506813} {14 FBI
    每10小時啟動一項對中國的新調查 503616} {15 意大利海域遭水母入侵 495294} {16 山河令演唱會票價 486933} {17 劉以豪被娜扎親出口紅印 484077} {18 吳前 473968} {19 科學家成功捕獲黑洞多波段指紋 468128} {20 宋佳袁詠儀發海報裁掉對方 462762} {21 鄭州一中學通報女學生墜樓事件 453126} {22 72年前她身穿旗袍運送絕密情報 451299} {23 張雨綺李柄熹 娛樂圈姐弟戀甜寵文 414856} {24 多肉楊梅奶茶 397879} {25 創4總決賽繪畫撐腰大賽 380987} {26 中
    學小賣部承包3年拍出320萬 347615} {27 北京沙塵暴 325600} {28 羅永浩再回應被強制執行 313570} {29 在營P2P網貸機構全部停業 311420} {30 多名教師毆打幼兒被園方辭退 294579} {31 我國連續4年多未發生暴恐案事件 285303} {32 蜘蛛俠3中文片名 282589} {33 娜扎護士裝造型 278113} {34 王霜說在巴黎不被尊重 267191} {35 王佑碩鼻子 250443} {36 吳磊一鏡到底哭戲 249606} {37 秦嶺大熊貓上樹折櫻桃花 249071} {38 警方通報沈陽1死2傷持刀傷人案 248500
    } {39 2020年中國群眾安全感指數98.4% 246917} {40 你見過哪些海王操作 246148} {41 商務部回應日本處置福島核廢水 244992} {42 一組數據看平安中國 244345} {43 趙文瑄 243697} {44 內蒙古沙塵暴風沙夾雜雨雪 242044} {45 油價或迎年內首次擱淺 241157} {46 庫里的進攻能力在NBA排第幾 239944} {47 在家長群搶30個紅包被拘 239808} {48 明白做老師不易的瞬間 207204} {49 張哲瀚OK周年刊封面 206645} {50 輕混血濃顏泰妝 }]
    

    過濾器示例 

    基于HTML Element 元素的選擇器

    使用Element名稱作為選擇器,如dom.Find("div")。

    dom.Find("div").Each(func (i int, selection *goquery.Selection) {
    fmt.Println(selection.Text())
    })
    
    ID選擇器

    以#加id值作為選擇器

    dom.Find("#id").Each(func (i int, selection *goquery.Selection) {
    fmt.Println(selection.Text())
    })
    
    Class選擇器

    以.加class值為選擇器

    dom.Find(".class").Each(func (i int, selection *goquery.Selection) {
    fmt.Println(selection.Text())
    })
    

    由上面的示例可以看出,goquery的選擇器與jQuery的選擇器用法無異,在這里就不繼續贅述了,同學們可以自行探索。

    常用節點屬性值 

    Html() 獲取該節點的html
    dom.Find("table").Each(func (i int, selection *goquery.Selection) {
    fmt.Println(selection.Html())
    })
    
    Text() 獲取該節點的文本值
    dom.Find(".td-02>a").Each(func (i int, selection *goquery.Selection) {
    fmt.Println(selection.Text())
    })
    
    Attr() 返回節點的屬性值以及該屬性是否存在的布爾值
    dom.Find("#execution").Each(func (i int, selection *goquery.Selection) {
    value[i], ok = selection.Attr("value")
    })
    
    Length() 返回該Selection的元素個數
    dom.Find("td").Length()
    

    閑言

    這個庫用起來非常容易上手,尤其是對jQuery熟悉的同學,極大地提升了開發效率。

    之前都是用Python寫爬蟲,使用BeautifulSoup進行解析,十分方便。第一次用go的net/html嘗試解析的時候,花了很多不必要的時間,直到后來發現了goquery,才找回了用BeautifulSoup的感覺。

    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    Html解析利器-goquery
    2022-08-03 10:46:20
    goquery是由Go實現的基于Go的net/html包和CSS選擇器cascadia的HTML解析。由于net/html解析器需要UTF-8編碼,goquery也同樣需要,所以需要確保提供的html是UTF-8編碼。
    假如想在x86平臺運行arm程序,稱arm為source ISA, 而x86為target ISA, 在虛擬化的角度來說arm就是Guest, x86為Host。這種問題被稱為Code-Discovery Problem。每個體系結構對應的helper函數在target/xxx/helper.h頭文件中定義。
    筆者繼續帶大家炒Fastjson的冷飯。關于漏洞分析和利用鏈分析文章網上已有大量,但是關于如何自動化檢測的文章還是比較少見的,尤其是如何不使用Java對Fastjson做檢測。
    筆者片面的從多年乙方經驗(不涉及監管層面能拿到的數據)的技術層面來討論下大攻防演練多人運動下的溯源反制思路,以及作為反制團隊如何與藍隊其他成員之間進行配合反制相關的工作。 如有寫的不對的地方及遺漏的地方(肯定有的),請多多交流。
    DDOS攻擊的治理和緩解
    2021-09-27 08:24:52
    很推薦閱讀,并針對本書中的DDOS攻擊的治理和緩解做了總結。作為網絡犯罪的主要平臺之一,黑客利用僵尸網絡展開不同的攻擊,可以導致大量機密或個人隱私泄密,也可以通過DDOS攻擊使整個基礎信息網路癱瘓。因此,對僵尸網絡進行治理顯得十分迫切而重要。
    漏洞的產生在于WebWork 2.1 和Struts 2的’altSyntax’配置允許OGNL 表達式被插入到文本字符串中并被遞歸處理。
    經過我們團隊的持續研究,IBM Security X-Force 發現了證據,表明總部位于俄羅斯的網絡犯罪集團“Trickbot 組織”自俄羅斯入侵以來一直在系統地攻擊烏克蘭——這是前所未有的轉變,因為該組織以前沒有針對烏克蘭。
    本報告深度剖析基于微信小程序生態體系的黑灰產活動,并提出防護思路,期望以專業、全面的視角幫助企業認知產業、加強防御、避免損失。
    可以認為IAM分成兩類,一個是AWS提供的IAM,這是一個完整的身份管理系統,但AWS只提供了系統,基于該系統的配置及信息維護,由客戶完全負責。AWS 提供了虛擬網絡及其之上的VPC,子網,ACL,安全組等,客戶需要準確設計配置自己的網絡,以確保正確的隔離和防護。用戶控制權限的修改通常由特權用戶或者管理員組實現。
    用戶名:加密密碼:密碼最后一次修改日期:兩次密碼的修改時間間隔:密碼有效期:密碼修改到期到的警告天數:密碼過期之后的寬限天數:賬號失效時間:保留。查看下pid所對應的進程文件路徑,
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类