久久精品国产亚洲高清|精品日韩中文乱码在线|亚洲va中文字幕无码久|伊人久久综合狼伊人久久|亚洲不卡av不卡一区二区|精品久久久久久久蜜臀AV|国产精品19久久久久久不卡|国产男女猛烈视频在线观看麻豆

    1. <style id="76ofp"></style>

      <style id="76ofp"></style>
      <rt id="76ofp"></rt>
      <form id="76ofp"><optgroup id="76ofp"></optgroup></form>
      1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

        手機(jī)站
        千鋒教育

        千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

        千鋒教育

        掃一掃進(jìn)入千鋒手機(jī)站

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

        關(guān)注千鋒學(xué)習(xí)站小程序
        隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

        當(dāng)前位置:首頁(yè)  >  技術(shù)干貨  > 反爬蟲之簡(jiǎn)單爬蟲

        反爬蟲之簡(jiǎn)單爬蟲

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

          要想做反爬蟲,我們首先需要知道如何寫個(gè)簡(jiǎn)單的爬蟲。

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

          • 分析頁(yè)面請(qǐng)求格式

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

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

          舉個(gè)例子,直接查看攜程生產(chǎn)url。在詳情頁(yè)點(diǎn)擊“確定”按鈕,會(huì)加載價(jià)格。假設(shè)價(jià)格是你想要的,那么抓出網(wǎng)絡(luò)請(qǐng)求之后,哪個(gè)請(qǐng)求才是你想要的結(jié)果呢? 你只需要用根據(jù)網(wǎng)絡(luò)傳輸數(shù)據(jù)量進(jìn)行倒序排列即可。因?yàn)槠渌拿曰笮缘膗rl再多再?gòu)?fù)雜,開發(fā)人員也不會(huì)舍得加數(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)

          高級(jí)爬蟲

          那么爬蟲進(jìn)階應(yīng)該如何做呢?通常所謂的進(jìn)階有以下幾種:

          分布式爬蟲

          Python默認(rèn)情況下,我們使用scrapy框架進(jìn)行爬蟲時(shí)使用的是單機(jī)爬蟲,就是說(shuō)它只能在一臺(tái)電腦上運(yùn)行,因?yàn)榕老x調(diào)度器當(dāng)中的隊(duì)列queue去重和set集合都只能在本機(jī)上創(chuàng)建的,其他電腦無(wú)法訪問(wèn)另外一臺(tái)電腦上的內(nèi)存和內(nèi)容。

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

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

          四種scrapy-redis組件:

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

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

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

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

          工作原理:

        圖片2

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

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

          模擬JavaScript

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

          PhantomJs或者selenium

          以上的用來(lái)做自動(dòng)測(cè)試的,結(jié)果因?yàn)樾Ч芎?,很多人拿?lái)做爬蟲。但是這個(gè)東西有個(gè)硬傷,就是:效率。占用資源比較多,但是爬取效果很好。

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

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

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

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

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

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

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

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

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

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

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

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

        2023-10-14 12:26:19
        快速通道
        专栏| 寿阳县| 扶余县| 开原市| 通榆县| 察隅县| 巫溪县| 卓资县| 阿尔山市| 察雅县| 桃园县| 额敏县| 车致| 金华市| 莱阳市| 阳原县| 齐齐哈尔市| 莆田市| 堆龙德庆县| 广南县| 常宁市| 介休市| 尤溪县| 竹溪县| 阳信县| 灯塔市| 汉阴县| 甘孜| 清丰县| 玛多县| 永新县| 留坝县| 抚顺市| 陆良县| 平南县| 象山县| 安西县| 同仁县| 邵阳市| 汝南县| 通许县|