正則表達式XPath 語法領域細解,初學階段的你,該怎么學?

      網友投稿 1092 2022-05-29

      在 Python 爬蟲采集領域,正則表達式到底要學多深?

      同理,XPath 表達式要學多少才夠用?

      這兩個問題是很多爬蟲新人的疑問,而且這兩個問題還沒有標準答案……

      本篇博客為你梳理,在初學爬蟲階段,二者你應該學到何種地步,給你定一個小目標,即初學的范圍。

      正則表達式

      正則表達式在 Python 中,主要配合 re 模塊使用,該模塊應用難度不大,但正則表達式編寫卻困擾很多朋友。

      正則難寫的原因如下:

      它也算是一門獨立的編程語言,有自己的規范;

      正則表達式獨立于任何編程語言,也表示它可以和任意編程語言結合;

      每個人寫出的表達式不一致,即“每題”的答案都不唯一;

      正則有語法,有修飾符,有元字符,有運算符的優先級,初學階段概念有點龐雜,無從下手。

      既然已經分析到正則難寫的原因,那接下來逐一克服即可。

      首先要明確第一個概念,正則是干什么的?

      簡單理解,正則表達式就是一種文本(字符串)的檢索模式,它可以從一個長字符串中,匹配出目標字符串。

      例如從 abc1234dfertg 中提取 1234。

      初學正則

      初學階段,上來要做的事情是了解正則的基本語法,從字符開始進行學習。

      普通字符

      這個是非常簡單的,例如 a,1 就是一個普通字符,應用到正則表達式里面,就可以去匹配指定字符串的 a 或者 1。

      順著字符就擴展出來正則的核心內容了,元字符。

      元字符

      元字符就是,在正則中有特殊的含義的一些語法表述。

      常見的元字符如下:

      \d:匹配一個數字;

      \w:匹配字母、數字、下劃線;

      這里就會出現一個學習階段的門檻,記憶元字符。

      在初學階段,尤其是初學 Python 爬蟲采集階段,那按照如下順序記憶即可(必須掌握)。

      .:匹配除換行符(\n、\r)之外的任何單個字符,一般比較簡單的正則用 . 能匹配大多數內容了;

      *:匹配前面的表達式 0 次~無限次;

      +:匹配前面的表達式 1 次~無限次;

      ?:匹配前面的子表達式 0 次或 1 次,這個 ? 還有一個用途為【當該字符緊跟在任何一個其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面時,匹配模式是非貪婪的,非貪婪模式表示盡可能少的匹配所搜索的字符串】,這個有點繞,后文有參考案例;

      \:轉義符,例如你想要匹配 .,需要用 \.;

      \s:注意是小寫 s,匹配任何空白字符,包括空格、制表符、換頁符等等,在解析 HTML 的時候,很常用,因為網頁源碼中經常出現換行情況;

      [xyz]:匹配中框好中的任意一個字符;

      (pattern):分組,并匹配出 pattern;

      掌握并熟練的使用以上 8 個元字符,在初學爬蟲階段,一般的網頁就能暢通無阻的進行解析了。

      解釋一下貪婪模式。

      如果存在一個字符串為 www.csdn.com,你編寫了正則如下:w+,此時能匹配到 www,該正則會盡可能多的去匹配 w 字符,當修改正則為:w+? 時,匹配到的結果為 w,即盡可能少的匹配,也就是 元字符 ? 使得正則變為了非貪婪模式。

      初學正則在爬蟲中的落地

      正則表達式 與 XPath 語法領域細解,初學階段的你,該怎么學?

      有了上述元字符概念,你在去復盤爬蟲 120 例之前的正則部分文章,會發現出現過很多次如下正則: (.*?),此時就能理解其含義,并且你也能知道,這是最普通的正則表達式,只能算是偷懶之作,但是寫起來確實方便。

      如果碰到的網頁出現了換行或者空格,那上述正則將演變為 (.|\s)*?,結合上文的必背元字符,你能理解其含義嗎?

      理解不了去學習就對了,畢竟我們又引入了一個元字符 |,.|\s 表示選擇,匹配 . 或 \s,即匹配任意字符在加上空格。

      基本的元字符熟悉之后,才能進行更多的擴展,學習其它元字符,使得你的正則表達式寫的標準與高效。

      除了元字符外,對于正則還需要學習的是修飾符,該內容不多,有如下幾種:

      i:忽略大小寫;

      g:全局匹配;

      m:多行匹配;

      s:. 圓點符號,支持匹配空格。

      這些內容不重點講解的原因是:不同的編程語言有其特殊的實現方式,具體需要依舊語言本身來實現,例如 Python 的 re 模塊,就有針對性的實現,你可以去檢索 re 模塊相關用法。

      其余進階內容,請重點圍繞正則分組進行學習,該部分將在后期總結篇展現。

      XPath 表達式

      XPath 即 XML Path,一種在 XML 文檔中查找節點元素的語言。

      如果深入研究,XPath 依舊有非常多的知識點需要補充,但是作為初學爬蟲采集,優先掌握如下內容即可。

      初學階段必會語法

      XPath 路徑表達式

      這個路徑與電腦硬盤路徑獲取基本一致。

      先區分好 / 與 //,它們分別表示從根節點選擇,或者從任意位置的某個節點進行選擇。

      例如存在如下 XML 文檔,根階段為 root,其它內容如下所示

      橡皮擦(擦姐) 橡皮擦(擦哥)

      例如 /root/book,表示從根節點開始選擇 book 節點,如果使用 /book,則無法匹配到任何數據。

      使用 //book,則可以匹配到所有 book 元素。

      直接使用 book 也可以匹配出所有的 book 節點。

      XPath 測試方法,可以創建一個 HTML 文件,在后在開發者工具中使用 Ctrl+F 換出搜索框,即可測試,如下圖所示。

      當然瀏覽器會自動生成 HTML ,HEAD,BODY 節點,正常讀取即可。

      有了根節點概念之后,就可以類別出 . 表示當前節點,.. 表示當前節點父節點。當然還有 @ 可以選擇某個屬性,例如下述 XPath 表示提取 book 節點中 bid=1 的節點,語法格式如下:

      /html/body/root/book[@bid=1]

      提煉一下語法格式如下:

      標簽名[@屬性=‘屬性值’] # 如果是屬性值為數字,去掉雙引號也是可以的

      如果直接使用 @屬性,表示提取具備該屬性的節點。

      其它選擇元素的方法

      選擇未知元素

      在 XPath 中,可以使用 * 選擇未知的節點,例如 /book/*/name,表示選擇 book 節點下所有節點的 name 節點。

      選擇謂語

      謂語表示查找某個特定的節點,或者包含某個指定的值的節點,謂語嵌套在 [] 中,例如:

      選擇第一個元素 /root/book[1],選擇最后一個元素 /root/book[last()],上文提及的屬性選擇,也屬于謂語的一種用法。

      提取屬性值或者標簽中的文本值

      在爬蟲采集的時候,經常會用到提取標簽的屬性值,或者提取標簽內部的文本值,提取標簽屬性值可參考如下案例:/book/@cid,提取標簽文本,可參考案例為://book/text()。

      以上內容即為初學階段需要掌握的 XPath 相關知識,當然多多益善,有的地方會告訴你可以直接從開發者工具復制 XPath,如下所示:

      上述辦法復制出來的 XPath 表達式,冗余內容非常多,建議還是自己編寫完成。

      下述內容為直接復制出的表達式。

      /html/body/div[2]/div[5]

      Python 正則表達式

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:把docker鏡像當作桌面系統來用
      下一篇:css基本概念學習篇【四】
      相關文章
      亚洲国产成人91精品| 全亚洲最新黄色特级网站 | 亚洲无码一区二区三区| 亚洲国产日韩在线成人蜜芽| 久久久久亚洲AV无码网站| 久久亚洲国产精品一区二区| 亚洲午夜无码AV毛片久久| 亚洲?v女人的天堂在线观看| 国产午夜亚洲精品不卡免下载| 久久亚洲AV成人无码国产最大| 亚洲国产欧洲综合997久久| 亚洲成a人无码亚洲成www牛牛| 亚洲AV无码一区二区三区网址| 亚洲爆乳成av人在线视菜奈实| 蜜桃传媒一区二区亚洲AV| 无码专区一va亚洲v专区在线| 亚洲AV电影天堂男人的天堂| 亚洲av成人中文无码专区| 含羞草国产亚洲精品岁国产精品| 国产亚洲视频在线观看| 亚洲国产成人VA在线观看| 精品亚洲视频在线观看| 中文字幕亚洲乱码熟女一区二区| 亚洲精品成人无限看| 亚洲日本在线看片| 亚洲沟沟美女亚洲沟沟| 国产亚洲精品VA片在线播放| 亚洲国产精品日韩av不卡在线| 精品亚洲视频在线| 亚洲综合精品网站| 亚洲gv猛男gv无码男同短文| 精品日韩亚洲AV无码一区二区三区| 亚洲精品国产手机| 亚洲小说图区综合在线| 精品亚洲福利一区二区| 激情综合色五月丁香六月亚洲| 久久久久亚洲AV成人无码网站| 亚洲欧洲国产综合| 亚洲精品无码不卡在线播放| www.亚洲色图.com| 国产亚洲AV夜间福利香蕉149|