您好,登錄后才能下訂單哦!
這篇文章主要講解了“Python隱式Style–CSS在反爬蟲中有什么作用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Python隱式Style–CSS在反爬蟲中有什么作用”吧!
先來嘮嘮什么是 隱式 Style–CSS
:
CSS中,::before 創建一個偽元素,其將成為匹配選中的元素的第一個子元素。常通過 content 屬性來為一個元素添加修飾性的內容
源自:https://developer.mozilla.org
上面的這段引用,看著有點難懂,沒關系我們用下面這個例子簡單演示一下。
我們新建一個 HTML 文件輸入下面這樣的內容:
<q>大家好,我是咸魚</q>,<q>我是 NightTeam 的一員</q> 源自:https://developer.mozilla.org
并在這個 HTML 中引用下面這個樣式文件:
q::before { content: "?"; color: blue; } q::after { content: "?"; color: red; } 源自:https://developer.mozilla.org
最后在瀏覽器中展示的內容是這樣的:
<<大家好,我是咸魚>>,<<我是 NightTeam 的一員>> 源自:https://developer.mozilla.org
可以看到在上面的例子里,我在源碼里隱藏了文字前后的符號,但是在瀏覽器顯示的時候卻是正常的。
目前很多小說網站都使用了類似這樣的反爬技術保護自己的內容不被爬蟲爬取。
那么類似這樣的反爬技術應該怎么處理?
咸魚準備了一個例子簡單實戰一下,用實例講講我遇到這類反爬是如何處理的。
這個例子運行在本地,所以就沒有分析請求的步驟,直接分析下瀏覽器顯示與源碼分別什么樣,找找有沒有什么突破口。
瀏覽器展示:
源碼顯示:
可以在源碼中看到部分內容被<span class="context_kwx"></span>
替換。
打開 開發者模式,看看隱藏的文字是什么樣子的。【圖2-1】
可以看到在【圖2-1】里方框 2 中 content 的內容正是 方框 1 在源碼頁面里隱藏的內容。
這符合我們在第一部分關于 隱式 style-css
的舉例。
那么為了能夠拿到全部的內容,我們只需要把替換掉的span
標簽替換回【圖2-1】中方框 2 里的 content 的值就可以了。
按照正常的頁面結構,可以通過點擊【圖2-2】中框選的地方直接跳轉到 CSS 文件的位置。
但是在我們這個頁面結構里沒有這樣可以點擊的位置,所以我們只能通過分析 span
標簽的規律找找突破口。
所有的 span
標簽的類名都是 context_kw
加上一個數字拼接的,我們試著搜索 context_kw
找找。
可以看到在文件里找到了與 context_kw 相關的 JS 代碼。【圖2-3】
大致瀏覽了整段 JS 代碼,這段 JS 通過功能分為兩個部分。【圖2-4】
第一部分:CryptoJS
的加解密的邏輯內容,可以忽略
第二部分:經過變量名混淆的內容,第二部分的 JS 對數組中的密文進行解密,并操作了 DOM ,完成了將 JS 與 CSS 結合完成了反爬最主要的邏輯。
根據第二部分中操作 DOM 的代碼,我們找到關鍵 變量word
。
for (var i = 0x0; i < words[_0xea12('0x18')]; i++) { try { document[_0xea12('0x2a')][0x0][_0xea12('0x2b')]('.context_kw' + i + _0xea12('0x2c'), 'content:\x20\x22' + words[i] + '\x22'); } catch (_0x527f83) { document['styleSheets'][0x0]['insertRule'](_0xea12('0x2d') + i + _0xea12('0x2e') + words[i] + '\x22}', document[_0xea12('0x2a')][0x0][_0xea12('0x2f')][_0xea12('0x18')]); } }
再繼續找到 word
的變量聲明的地方。
var secWords = decrypted[_0xea12('0x16')](CryptoJS['enc']['Utf8'])[_0xea12('0x17')](','); var words = new Array(secWords[_0xea12('0x18')]);
按照這個方法,我們最后發現 CSS 的 content 的內容都是數組 _0xa12e
中一個經過加密的元素用 AES
解密后經過一定處理得到的值。
有了這樣的一個邏輯框架之后我們就可以直接開始扣取我們需要的 JS 代碼了。
這個代碼比較簡單,具體的扣取步驟就不演示了,這里演示兩個在扣取代碼之后兩個需要改寫的點。
第一個是【圖2-5】中的異常捕獲,這里判斷了當前的 URL 是否相等,但是我們在 Node 環境下執行是沒有 window 屬性的,如果不做修改會出現異常,所以需要把這里的 if 判斷語句注釋。
第二個是【圖2-6】中在返回中的判斷語句,同樣是對 Node 中不存在的屬性進行判斷,所以同樣需要在這里進行相應的修改。
例如:
_0x1532b6[_0xea12('0x26')](_0x490c80, 0x3 * +!('object' === _0xea12('0x27')))
以上兩點修改完后就可以獲取到所有被替換過的字符了。
感謝各位的閱讀,以上就是“Python隱式Style–CSS在反爬蟲中有什么作用”的內容了,經過本文的學習后,相信大家對Python隱式Style–CSS在反爬蟲中有什么作用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。