Showing posts with label 爬蟲與反爬蟲. Show all posts
Showing posts with label 爬蟲與反爬蟲. Show all posts

Sunday, May 22, 2022

[反爬蟲原理與繞過實戰] 签名验证反爬虫的原理和绕过方法 (包含時間戳和 MD5 加密值)

 一个并发网络爬虫

Tornado web应用的结构

Python 建立簡單的 Tornado Web

page 121

[反爬蟲原理與繞過實戰] Cookie 與 JavaScript 結合

假设访问网站/verify/cookie/content.html必须携带一个符合规定的 cookie,如果cookie不符合规定,则会被重定向到/verify/cookie/index.html去设置一个cookie,有了cookie后才能继续访问content.html。

这种方法很常见,就好比淘宝,在访问其商品列表页面前,必须登录且信息无误后才能继续访问,这种方法不仅能增加用户数,还能实现反爬。

反爬

我起初猜测它可能是这样实现的:在content.html加入一段JavaScript代码,使其能获取请求头中的cookie并判断是否符合规定,如果不符合则重定向到index.html,然后在index.html内插入一些JavaScript算法来生成cookie。

content.html

========================================================================

<body>

    <h1>This is cookie/content.html</h1>

    <script>

        var reg = /auth=[0-9]{3}[A-Z]{5}[0-9]{6}[A-Z]{3}/

        // 如果Cookie不符合要求,则跳转到首页

        if (reg.test(document.cookie) != true) {

            location.href = './index.html';

        }

    </script>

</body>

========================================================================

用浏览器测试了一下,确实可以实现重定向的操作,但是还是会先访问content.html。这种做法只能起到增长用户的目的,并不能实现反爬虫,因为python是没有JavaScript解释器的,它不会解析js代码,对于这种页面还是照爬无误。

所以还是得靠nginx,继续修改一下配置

========================================================================

location /verify/cookie/index.html {

    root /home/pineapple/Code/WebProject/www;

    index index.html;

}


location /verify/cookie/content.html {

    if ($http_cookie !~* "auth=[0-9]{3}[A-Z]{5}[0-9]{6}[A-Z]{3}") {

        rewrite content.html ./index.html redirect;

    }

    root /home/pineapple/Code/WebProject/www;

    index content.html;

  }

========================================================================

為了在重定向后给客户端设置cookie,需要在index.html里加入JavaScript代码

進行測試會發現 Cookie 值是隨機變化的

========================================================================

<!--

 * @Date         : 2020-10-22 22:38:37

 * @LastEditors  : Pineapple

 * @LastEditTime : 2020-10-23 17:30:20

 * @FilePath     : /www/verify/cookie/index.html

 * @Blog         : https://blog.csdn.net/pineapple_C

 * @Github       : https://github.com/Pineapple666

-->

<!DOCTYPE html>

<html lang="en">


<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Document</title>

</head>


<body>

    <h1>This is cookie/index.html</h1>

    <h1><a href="./content.html">Go to cookie/content.html</a></h1>

    <script id="random cookie">

        function randcookie() {

            // 生成随机字符串用作cookie值

            var header = randints(9, 3, 0);

            var middle = randstrs(5);

            var footer = randints(9, 6, 0);

            var pp = randstrs(3);

            var res = header + middle + footer + pp

            return res;

        }

        function randints(r, n, tof) {

            /* 生成随机数字,tof决定返回number类型或者字符串类型

               r 代表数字范围 n 代表数量

            */


            var result = [];

            if (tof) {

                return Math.floor(Math.random() * r);

            }

            for (var i = 0; i < n; i++) {

                s = Math.floor(Math.random() * r);

                result.push(s);

            }

            return result.join('');

        }


        function randstrs(n) {

            // 生成随机字母,n为随机字母的数量

            var result = [];

            for (var i = 0; i < n; i++) {

                s = String.fromCharCode(65 + randints(25, 1, 1));

                result.push(s);

            }

            return result.join('');

        }

        // 设置Cookie

        document.cookie = 'auth=' + randcookie();

    </script>

</body>


</html>

========================================================================


Sunday, April 10, 2022

[python] 爬蟲

 爬蟲指的是按照一定規則自動抓取網絡信息的程序,分為通用爬蟲和聚焦爬蟲兩大類,前者的

目標是在保持一定內容質量的情況下爬取儘可能多的站點;而後者的目標則是在爬取少量站點的情況下儘可能保持精準的內容質量

爬蟲通常從一個或多個 URL 開始,在爬取的過程中不斷將新的並且符合要求的 URL 放人待爬隊列,直到滿足程序的停止條件。

爬蟲的的爬取過程可以分為下面3個步驟。

 1. 請求指定的 URL 以獲取響應正文。

 2. 解析響應正文內容並從中提取所需信息。

 3. 將上一步提取的信息保存到資料庫或文件中。


[python] 反爬蟲的概念與定義

限制爬蟲程序訪問服務器資源和獲取數據的行爲稱爲爬蟲。限制手段包括但不限於請求限制、拒絕響應、客戶端身份驗證、文本混淆和使用動態渲染技術。這些限制根據出發點可以分爲主動型反爬蟲和被動型反爬蟲。 

主動型反爬蟲

開發者有意識地使用技術手段區分正常用戶和爬蟲,並限制爬蟲對網站的訪問行爲,如驗證請求頭信息、限制訪問頻率、使用驗證碼等。

被動型反爬蟲

爲了提高用戶體驗或節約資源,用一些技術間接提高爬蟲訪問的行爲,比如數據分段加載、點擊切換標籤頁、鼠標懸停預覽數據等。

多類型爬蟲

除此之外,還可以從特點上對反爬蟲進行更細緻的劃分,如信息校驗型反爬蟲、動態渲染型反爬蟲、文本混淆型反爬蟲、特徵識別型反爬蟲等。需要注意的是,用一種限制現象可以被歸類到不同的反爬蟲類型中,比如通過JavaScript生成隨機字符串並將字符串放在請求頭中發送給服務器,由服務器校驗客戶端身份的這種限制手段即可以說是信息校驗型反爬蟲,又可以說是動態渲染反爬蟲。

網站反爬蟲常見方法

1.通過UA判定

UA即User Agent,它是請求瀏覽器的身份標誌。反爬蟲機制通過判定訪問請求的頭部中沒有帶UA來識別爬蟲,這種判定方法很低級,通常不會將其作爲唯一的判定標準,因爲反反爬蟲非常容易,隨機數UA即可針對。

2.通過Cookie判定

Cookie就是指會員制的帳號密碼登錄驗證,通過分辨這一個帳號在短期內內爬取頻次來判定。這種方法的反反爬蟲也很費勁,需選用多帳戶的方法來爬取。

3.通過訪問頻率判定

爬蟲往往會在短時間內多次訪問目標網站,反爬蟲機制可以通過單個IP訪問的頻率來判斷是否爲爬蟲。這種反爬方式很難反制,只能通過更換IP來解決。

4.通過驗證碼判定

驗證碼是反爬蟲性價比較高的實施方案,反反爬蟲通常需要接入OCR驗證碼識別平台或是利用Tesseract OCR識別,亦或是採用神經網絡訓練識別驗證碼等。

5.動態性頁面加載

採用動態加載的網站往往是爲了方便用戶點哪看哪兒,而爬蟲沒法和頁面進行交互,這就大大增加了爬蟲的難度。


一般說來,用戶去爬取網站信息,都會受到反爬蟲的制約,這樣使得用戶在獲取信息的時候會受到一定的阻礙,而使用代理ip軟體可以徹底解決這一問題。



Friday, December 31, 2021

[python 反爬蟲原理與繞過實戰] 第三方庫安裝

Requests (http 請求庫)

pip install requests

Selenium (web 應用程序測試工具)

pip install selenium

瀏覽器驅動

ChromeDriver

查詢版本 

版本 1.33.106 Chromium: 96.0.4664.110 (正式版本) (64 位元)

下載並執行

sudo mv chromedriver /usr/bin/

Firefox
geckodriver --version

Splash 異步 JavaScript 渲染服務

從 dockerHub 中拉取 Splash

sudo docker run -it -p 8050:8050 scrapinghub/splash

http://localhost:8050

Puppeteer (Google 出的 Node.js 庫)

pip install pyppeteer


安裝

https://ithelp.ithome.com.tw/articles/10233316

https://github.com/tesseract-ocr/tesseract

https://officeguide.cc/tesseract-open-source-ocr-engine-tutorial-examples/






cuDNN (深度神經網路庫)

[python 反爬蟲原理與繞過實戰] 安裝環境

安裝 python3

安裝 docker

架設 Streamboat

第三方庫安裝

n8n index

 【n8n免費本地端部署】Windows版|程式安裝x指令大補帖  【一鍵安裝 n8n】圖文教學,獲得無限額度自動化工具&限時免費升級企業版功能