乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Python:金九銀十,Python高頻面試題(第二彈)

       千鋒Python學(xué)堂 2019-09-11

      Python高頻面試題目總結(jié)第二彈來(lái)了,正在金九銀十的伙伴可以看過(guò)來(lái)了!

      一. 簡(jiǎn)述一下scrapy的基本流程?

      scrapy分為9個(gè)步驟:

      1. Spiders需要初始的start_url或則函數(shù)stsrt_requests,會(huì)在內(nèi)部生成Requests給Engine;

      2. Engine將requests發(fā)送給Scheduler;

      3. Engine從Scheduler那獲取requests,交給Download下載;

      4. 在交給Dowmload過(guò)程中會(huì)經(jīng)過(guò)Downloader Middlewares(經(jīng)過(guò)process_request函數(shù));

      5. Dowmloader下載頁(yè)面后生成一個(gè)response,這個(gè)response會(huì)傳給Engine,這個(gè)過(guò)程中又經(jīng)過(guò)了Downloader Middlerwares(經(jīng)過(guò)process_request函數(shù)),在傳送中出錯(cuò)的話(huà)經(jīng)過(guò)process_exception函數(shù);

      6. Engine將從Downloader那傳送過(guò)來(lái)的response發(fā)送給Spiders處理,這個(gè)過(guò)程經(jīng)過(guò)Spiders Middlerwares(經(jīng)過(guò)process_spider_input函數(shù));

      7. Spiders處理這個(gè)response,返回Requests或者Item兩個(gè)類(lèi)型,傳給Engine,這個(gè)過(guò)程又經(jīng)過(guò)Spiders Middlewares(經(jīng)過(guò)porcess_spider_output函數(shù));

      8. Engine接收返回的信息,如果使Item,將它傳給Items Pipeline中;如果是Requests,將它傳給Scheduler,繼續(xù)爬蟲(chóng);

      9. 重復(fù)第三步,直至沒(méi)有任何需要爬取的數(shù)據(jù)

      Python:金九銀十,Python高頻面試題(第二彈)

      二. python3.5語(yǔ)言中enumerate的意思是

      對(duì)于一個(gè)可迭代的(iterable)/可遍歷的對(duì)象(如列表、字符串),enumerate將其組成一個(gè)索引序列,利用它可以同時(shí)獲得索引和值

      enumerate多用于在for循環(huán)中得到計(jì)數(shù)

      三. 你是否了解谷歌的無(wú)頭瀏覽器?

      無(wú)頭瀏覽器即headless browser,是一種沒(méi)有界面的瀏覽器。既然是瀏覽器那么瀏覽器該有的東西它都應(yīng)該有,只是看不到界面而已。

      Python中selenium模塊中的PhantomJS即為無(wú)界面瀏覽器(無(wú)頭瀏覽器):是基于QtWebkit的無(wú)頭瀏覽器。

      四. scrapy和scrapy-redis的區(qū)別?

      scrapy是一個(gè)爬蟲(chóng)通用框架,但不支持分布式,scrapy-redis是為了更方便的實(shí)現(xiàn)scrapy分布式爬蟲(chóng),而提供了一些以redis為基礎(chǔ)的組件

      為什么會(huì)選擇redis數(shù)據(jù)庫(kù)?

      因?yàn)閞edis支持主從同步,而且數(shù)據(jù)都是緩存在內(nèi)存中,所以基于redis的分布式爬蟲(chóng),對(duì)請(qǐng)求和數(shù)據(jù)的高頻讀取效率非常高

      什么是主從同步?

      在Redis中,用戶(hù)可以通過(guò)執(zhí)行SLAVEOF命令或者設(shè)置slaveof選項(xiàng),讓一個(gè)服務(wù)器去復(fù)制(replicate)另一個(gè)服務(wù)器,我們稱(chēng)呼被復(fù)制的服務(wù)器為主服務(wù)器(master),而對(duì)主服務(wù)器進(jìn)行復(fù)制的服務(wù)器則被稱(chēng)為從服務(wù)器(slave),當(dāng)客戶(hù)端向從服務(wù)器發(fā)送SLAVEOF命令,要求從服務(wù)器復(fù)制主服務(wù)器時(shí),從服務(wù)器首先需要執(zhí)行同步操作,也即是,將從服務(wù)器的數(shù)據(jù)庫(kù)狀態(tài)更新至主服務(wù)器當(dāng)前所處的數(shù)據(jù)庫(kù)狀態(tài)

      五. scrapy的優(yōu)缺點(diǎn)?為什么要選擇scrapy框架?

      優(yōu)點(diǎn):

      采取可讀性更強(qiáng)的xpath代替正則 強(qiáng)大的統(tǒng)計(jì)和log系統(tǒng) 同時(shí)在不同的url上爬行 支持shell方式,方便獨(dú)立調(diào)試 寫(xiě)middleware,方便寫(xiě)一些統(tǒng)一的過(guò)濾器 通過(guò)管道的方式存入數(shù)據(jù)庫(kù)

      缺點(diǎn):

      基于python爬蟲(chóng)框架,擴(kuò)展性比較差,基于twisted框架,運(yùn)行中exception是不會(huì)干掉reactor,并且異步框架出錯(cuò)后是不會(huì)停掉其他任務(wù)的,數(shù)據(jù)出錯(cuò)后難以察覺(jué)

      六. scrapy和requests的使用情況?

      requests 是 polling 方式的,會(huì)被網(wǎng)絡(luò)阻塞,不適合爬取大量數(shù)據(jù)

      scapy 底層是異步框架 twisted ,并發(fā)是最大優(yōu)勢(shì)

      七. 描述一下scrapy框架的運(yùn)行機(jī)制?

      從start_urls里面獲取第一批url發(fā)送請(qǐng)求,請(qǐng)求由請(qǐng)求引擎給調(diào)度器入請(qǐng)求對(duì)列,獲取完畢后,調(diào)度器將請(qǐng)求對(duì)列交給下載器去獲取請(qǐng)求對(duì)應(yīng)的響應(yīng)資源,并將響應(yīng)交給自己編寫(xiě)的解析方法做提取處理,如果提取出需要的數(shù)據(jù),則交給管道處理,如果提取出url,則繼續(xù)執(zhí)行之前的步驟,直到多列里沒(méi)有請(qǐng)求,程序結(jié)束。

      八. 寫(xiě)爬蟲(chóng)使用多進(jìn)程好,還是用多線(xiàn)程好?

      IO密集型代碼(文件處理、網(wǎng)絡(luò)爬蟲(chóng)等),多線(xiàn)程能夠有效提升效率(單線(xiàn)程下有IO操作會(huì)進(jìn)行IO等待,造成不必要的時(shí)間浪費(fèi),而開(kāi)啟多線(xiàn)程能在線(xiàn)程A等待時(shí),自動(dòng)切換到線(xiàn)程B,可以不浪費(fèi)CPU的資源,從而能提升程序執(zhí)行效率)。在實(shí)際的數(shù)據(jù)采集過(guò)程中,既考慮網(wǎng)速和響應(yīng)的問(wèn)題,也需要考慮自身機(jī)器的硬件情況,來(lái)設(shè)置多進(jìn)程或多線(xiàn)程

      九. 常見(jiàn)的反爬蟲(chóng)和應(yīng)對(duì)方法?

      1. 基于用戶(hù)行為,同一個(gè)ip段時(shí)間多次訪(fǎng)問(wèn)同一頁(yè)面 利用代理ip,構(gòu)建ip池

      2. 請(qǐng)求頭里的user-agent 構(gòu)建user-agent池(操作系統(tǒng)、瀏覽器不同,模擬不同用戶(hù))

      3. 動(dòng)態(tài)加載(抓到的數(shù)據(jù)和瀏覽器顯示的不一樣),js渲染 模擬ajax請(qǐng)求,返回json形式的數(shù)據(jù)

      4. selenium / webdriver 模擬瀏覽器加載

      5. 對(duì)抓到的數(shù)據(jù)進(jìn)行分析

      6. 加密參數(shù)字段 會(huì)話(huà)跟蹤【cookie】 防盜鏈設(shè)置【Referer

      十. 分布式爬蟲(chóng)主要解決什么問(wèn)題?

      面對(duì)海量待抓取網(wǎng)頁(yè),只有采用分布式架構(gòu),才有可能在較短時(shí)間內(nèi)完成一輪抓取工作。

      它的開(kāi)發(fā)效率是比較快而且簡(jiǎn)單的。

      后面的高頻Python面試題也在繼續(xù)為大家總結(jié)中??衫^續(xù)關(guān)注!

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀(guān)點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶(hù) 評(píng)論公約

        類(lèi)似文章 更多