有問有答丨點評字體反爬蟲中混淆定位暗坑

事情很直接,我來分享一下。在技術羣裏有朋友提出了這麼一個問題和需求:函數

上面的一連串截圖就是事情的大體通過,我來整理一下。羣友 Ares 遇到的問題是在面對大衆點評字體爬時不知道如何肯定被混淆文字的位置,且混淆位置是隨機的。當你遇到下圖的代碼時:測試

被混淆的是後面 3 位,前 2 位數字沒被混淆。但換一個頁面情形又不同了,這就是困擾他的緣由。羣友 Rua 提出的正則是一個解決的辦法,我以爲思路很好。這裏我嘗試了另外一種解決的辦法,和正則一樣有效且效果穩定。我捋出了這些狀況:字體

  1. 這個 id 爲 reviewCount 的 span 標籤下有不定長的字符串
  2. 字符串會被混淆,且混淆的個數不定
  3. 混淆字符在字符串中的位置不定
  4. 最後幾個字是固定的—— 條評論
  5. 混淆字符被 d 標籤包裹着

若是我在工做中面對這個問題,我來編寫代碼會怎麼處理呢?編碼

  1. 我認爲要定位到 id 爲 reviewCount 的 span 標籤
  2. 而後想辦法拿到 span 標籤下的文字
  3. 接着去除 HTML 標籤、空格和換行符獲得純文本

假設用 x 來代替被混淆的字符,以上圖爲例,這時候我獲得的應該是 11xxx。如今我須要在字符串 11xxx 中找到 xxx 的位置便可。按照羣友 Ares 的理解,獲得的 11xxx 有多是 1xx1x 或者 x1x1x,遂很難判斷位置在哪。spa

這裏我用一個取巧的方式:強制類型轉換3d

既然 11xxx 的原身是數字,那麼我是否是能夠用強制轉換的方式判斷字符是否爲數字呢?cdn

即能轉換的就是數字,不能轉換的就是其它字符,這樣我只須要記錄下不能轉換字符的下標就能夠了。離成功只有一步,那就是編碼。如今咱們來整理一下用到的知識點或者技術點xml

  1. 解析文本 —— 文本解析器,例如 Parsel
  2. 定位 —— 路徑查找語法,XPATH 或者 CSS 選擇器語法
  3. 抽取文字 —— XPATH 或者 CSS 選擇器語法中的 text 函數
  4. 去除噪聲(HTML 標籤、空格和換行符)—— DOM 操做器,例如 lxml;stirp 函數;
  5. 強制類型轉換 —— 內置類型轉換,例如 int
  6. 錯誤處理 —— 異常捕獲和處理,try except
  7. 判斷位置且記錄 —— for 循環和容器(例如列表)

我就不一步步分析了,伸手黨是不存在的,請用手敲,完整代碼以下:blog

通過幾個頁面的測試,確認沒有問題。字符串

若是你喜歡這樣的文章,請在評論區留言告訴我。同時爲韋世東的新書 《Python3 反爬蟲原理與繞過實戰》 加油打 Call,圖靈 5 折活動 現價 44.5

相關文章
相關標籤/搜索