国产睡熟迷奷白丝护士系列精品,中文色字幕网站,免费h网站在线观看的,亚洲开心激情在线

      <sup id="hb9fh"></sup>
          1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機構(gòu)

            手機站
            千鋒教育

            千鋒學習站 | 隨時隨地免費學

            千鋒教育

            掃一掃進入千鋒手機站

            領(lǐng)取全套視頻
            千鋒教育

            關(guān)注千鋒學習站小程序
            隨時隨地免費學習課程

            當前位置:首頁  >  技術(shù)干貨  > 反爬蟲之簡單爬蟲

            反爬蟲之簡單爬蟲

            來源:千鋒教育
            發(fā)布人:qyf
            時間: 2022-09-13 17:41:25 1663062085

              要想做反爬蟲,我們首先需要知道如何寫個簡單的爬蟲。

              通常編寫爬蟲需要經(jīng)過這么幾個過程:

              • 分析頁面請求格式

              • 創(chuàng)建合適的http請求

              • 批量發(fā)送http請求,獲取數(shù)據(jù)

              舉個例子,直接查看攜程生產(chǎn)url。在詳情頁點擊“確定”按鈕,會加載價格。假設(shè)價格是你想要的,那么抓出網(wǎng)絡請求之后,哪個請求才是你想要的結(jié)果呢? 你只需要用根據(jù)網(wǎng)絡傳輸數(shù)據(jù)量進行倒序排列即可。因為其他的迷惑性的url再多再復雜,開發(fā)人員也不會舍得加數(shù)據(jù)量給他。

            圖片1

              代碼:

              import requests

              def download_page(url):

              headers={

              'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36'

              }

              data = requests.get(url,headers=headers)

              return data

              if __name__ == '__main__':

              url = 'https://m.ctrip.com/restapi/soa2/21881/json/HotelSearch?testab=5b9a651b08c1069815c5af78f8b2bf6df9dd42a6129be5784bb096315494619a'

              download_page(url)

              高級爬蟲

              那么爬蟲進階應該如何做呢?通常所謂的進階有以下幾種:

              分布式爬蟲

              Python默認情況下,我們使用scrapy框架進行爬蟲時使用的是單機爬蟲,就是說它只能在一臺電腦上運行,因為爬蟲調(diào)度器當中的隊列queue去重和set集合都只能在本機上創(chuàng)建的,其他電腦無法訪問另外一臺電腦上的內(nèi)存和內(nèi)容。

              分布式爬蟲實現(xiàn)了多臺電腦使用一個共同的爬蟲程序,它可以同時將爬蟲任務部署到多臺電腦上運行,這樣可以提高爬蟲速度,實現(xiàn)分布式爬蟲。

              首先就需要配置安裝redis和scrapy-redis,而scrapy-redis是一個基于redis數(shù)據(jù)庫的scrapy組件,它提供了四種組件,通過它,可以快速實現(xiàn)簡單分布式爬蟲程序。

              四種scrapy-redis組件:

              Scheduler(調(diào)度):Scrapy改造了python本來的collection.deque(雙向隊列)形成了自己Scrapy queue,而scrapy-redis 的解決是把這個Scrapy queue換成redis數(shù)據(jù)庫,從同一個redis-server存放要爬取的request,便能讓多個spider去同一個數(shù)據(jù)庫里讀取。Scheduler負責對新的request進行入列操作(加入Scrapy queue),取出下一個要爬取的request(從Scrapy queue中取出)等操作。

              Duplication Filter(去重):Scrapy中用集合實現(xiàn)這個request去重功能,Scrapy中把已經(jīng)發(fā)送的request指紋放入到一個集合中,把下一個request的指紋拿到集合中比對,如果該指紋存在于集合中,說明這個request發(fā)送過了,如果沒有則繼續(xù)操作。

              Item Pipline(管道):引擎將(Spider返回的)爬取到的Item給Item Pipeline,scrapy-redis 的Item Pipeline將爬取到的 Item 存?redis的 items queue

              Base Spider(爬蟲):不再使用scrapy原有的Spider類,重寫的RedisSpider繼承了Spider和RedisMixin這兩個類,RedisMixin是用來從redis讀取url的類。

              工作原理:

            圖片2

              1、首先Slaver端從Master端拿任務(Request、url)進行數(shù)據(jù)抓取,Slaver抓取數(shù)據(jù)的同時,產(chǎn)生新任務的Request便提交給 Master 處理;

              2、Master端只有一個Redis數(shù)據(jù)庫,負責將未處理的Request去重和任務分配,將處理后的Request加入待爬隊列,并且存儲爬取的數(shù)據(jù)。

              模擬JavaScript

              模擬javascript,抓取動態(tài)網(wǎng)頁,是進階技巧。但是其實這只是個很簡單的功能。因為,如果對方?jīng)]有反爬蟲,你完全可以直接抓ajax本身,而無需關(guān)心js怎么處理的。如果對方有反爬蟲,那么javascript必然十分復雜,重點在于分析,而不僅僅是簡單的模擬。

              PhantomJs或者selenium

              以上的用來做自動測試的,結(jié)果因為效果很好,很多人拿來做爬蟲。但是這個東西有個硬傷,就是:效率。占用資源比較多,但是爬取效果很好。

              總結(jié):越是低級的爬蟲,越容易被封鎖,但是性能好,成本低。越是高級的爬蟲,越難被封鎖,但是性能低,成本也越高。

              當成本高到一定程度,我們就可以無需再對爬蟲進行封鎖。經(jīng)濟學上有個詞叫邊際效應。付出成本高到一定程度,收益就不是很多了。

            tags:
            聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
            10年以上業(yè)內(nèi)強師集結(jié),手把手帶你蛻變精英
            請您保持通訊暢通,專屬學習老師24小時內(nèi)將與您1V1溝通
            免費領(lǐng)取
            今日已有369人領(lǐng)取成功
            劉同學 138****2860 剛剛成功領(lǐng)取
            王同學 131****2015 剛剛成功領(lǐng)取
            張同學 133****4652 剛剛成功領(lǐng)取
            李同學 135****8607 剛剛成功領(lǐng)取
            楊同學 132****5667 剛剛成功領(lǐng)取
            岳同學 134****6652 剛剛成功領(lǐng)取
            梁同學 157****2950 剛剛成功領(lǐng)取
            劉同學 189****1015 剛剛成功領(lǐng)取
            張同學 155****4678 剛剛成功領(lǐng)取
            鄒同學 139****2907 剛剛成功領(lǐng)取
            董同學 138****2867 剛剛成功領(lǐng)取
            周同學 136****3602 剛剛成功領(lǐng)取
            相關(guān)推薦HOT
            軟件定制開發(fā)中的敏捷開發(fā)是什么?

            軟件定制開發(fā)中的敏捷開發(fā)是什么軟件定制開發(fā)中的敏捷開發(fā),從宏觀上看,是一個高度關(guān)注人員交互,持續(xù)開發(fā)與交付,接受需求變更并適應環(huán)境變化...詳情>>

            2023-10-14 13:24:57
            什么是PlatformIo?

            PlatformIO是什么PlatformIO是一個全面的物聯(lián)網(wǎng)開發(fā)平臺,它為眾多硬件平臺和開發(fā)環(huán)境提供了統(tǒng)一的工作流程,有效簡化了開發(fā)過程,并能兼容各種...詳情>>

            2023-10-14 12:55:06
            云快照與自動備份有什么區(qū)別?

            1、定義和目標不同云快照的主要目標是提供一種快速恢復數(shù)據(jù)的方法,它只記錄在快照時間點后的數(shù)據(jù)變化,而不是所有的數(shù)據(jù)。自動備份的主要目標...詳情>>

            2023-10-14 12:48:59
            服務器為什么要用Linux?

            服務器為什么要用Linux作為服務器操作系統(tǒng)的優(yōu)選,Linux在眾多選擇中脫穎而出。Linux作為服務器操作系統(tǒng)的優(yōu)選,有其獨特的優(yōu)勢和特點。包括其...詳情>>

            2023-10-14 12:34:11
            ORM解決的主要問題是什么?

            ORM(對象關(guān)系映射)解決的主要問題是將關(guān)系數(shù)據(jù)庫與面向?qū)ο缶幊讨g的映射困境。在傳統(tǒng)的關(guān)系數(shù)據(jù)庫中,數(shù)據(jù)以表格的形式存儲,而在面向?qū)ο?..詳情>>

            2023-10-14 12:26:19