您好,登錄后才能下訂單哦!
這篇文章主要介紹“Python有哪些高頻的面試題”,在日常操作中,相信很多人在Python有哪些高頻的面試題問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Python有哪些高頻的面試題”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
一. 簡述一下scrapy的基本流程?
scrapy分為9個步驟:
Spiders需要初始的start_url或則函數stsrt_requests,會在內部生成Requests給Engine;
Engine將requests發送給Scheduler;
Engine從Scheduler那獲取requests,交給Download下載;
在交給Dowmload過程中會經過Downloader Middlewares(經過process_request函數);
Dowmloader下載頁面后生成一個response,這個response會傳給Engine,這個過程中又經過了Downloader Middlerwares(經過process_request函數),在傳送中出錯的話經過process_exception函數;
Engine將從Downloader那傳送過來的response發送給Spiders處理,這個過程經過Spiders Middlerwares(經過process_spider_input函數);
Spiders處理這個response,返回Requests或者Item兩個類型,傳給Engine,這個過程又經過Spiders Middlewares(經過porcess_spider_output函數);
Engine接收返回的信息,如果使Item,將它傳給Items Pipeline中;如果是Requests,將它傳給Scheduler,繼續爬蟲;
重復第三步,直至沒有任何需要爬取的數據
二. python3.5語言中enumerate的意思是
對于一個可迭代的(iterable)/可遍歷的對象(如列表、字符串),enumerate將其組成一個索引序列,利用它可以同時獲得索引和值
enumerate多用于在for循環中得到計數
三. 你是否了解谷歌的無頭瀏覽器?
無頭瀏覽器即headless browser,是一種沒有界面的瀏覽器。既然是瀏覽器那么瀏覽器該有的東西它都應該有,只是看不到界面而已。
Python中selenium模塊中的PhantomJS即為無界面瀏覽器(無頭瀏覽器):是基于QtWebkit的無頭瀏覽器。
四. scrapy和scrapy-redis的區別?
scrapy是一個爬蟲通用框架,但不支持分布式,scrapy-redis是為了更方便的實現scrapy分布式爬蟲,而提供了一些以redis為基礎的組件
為什么會選擇redis數據庫?
因為redis支持主從同步,而且數據都是緩存在內存中,所以基于redis的分布式爬蟲,對請求和數據的高頻讀取效率非常高
什么是主從同步?
在Redis中,用戶可以通過執行SLAVEOF命令或者設置slaveof選項,讓一個服務器去復制(replicate)另一個服務器,我們稱呼被復制的服務器為主服務器(master),而對主服務器進行復制的服務器則被稱為從服務器(slave),當客戶端向從服務器發送SLAVEOF命令,要求從服務器復制主服務器時,從服務器首先需要執行同步操作,也即是,將從服務器的數據庫狀態更新至主服務器當前所處的數據庫狀態
五. scrapy的優缺點?為什么要選擇scrapy框架?
優點:
采取可讀性更強的xpath代替正則 強大的統計和log系統 同時在不同的url上爬行 支持shell方式,方便獨立調試 寫middleware,方便寫一些統一的過濾器 通過管道的方式存入數據庫
缺點:
基于python爬蟲框架,擴展性比較差,基于twisted框架,運行中exception是不會干掉reactor,并且異步框架出錯后是不會停掉其他任務的,數據出錯后難以察覺
六. scrapy和requests的使用情況?
requests 是 polling 方式的,會被網絡阻塞,不適合爬取大量數據
scapy 底層是異步框架 twisted ,并發是最大優勢
七. 描述一下scrapy框架的運行機制?
從start_urls里面獲取第一批url發送請求,請求由請求引擎給調度器入請求對列,獲取完畢后,調度器將請求對列交給下載器去獲取請求對應的響應資源,并將響應交給自己編寫的解析方法做提取處理,如果提取出需要的數據,則交給管道處理,如果提取出url,則繼續執行之前的步驟,直到多列里沒有請求,程序結束。
八. 寫爬蟲使用多進程好,還是用多線程好?
IO密集型代碼(文件處理、網絡爬蟲等),多線程能夠有效提升效率(單線程下有IO操作會進行IO等待,造成不必要的時間浪費,而開啟多線程能在線程A等待時,自動切換到線程B,可以不浪費CPU的資源,從而能提升程序執行效率)。在實際的數據采集過程中,既考慮網速和響應的問題,也需要考慮自身機器的硬件情況,來設置多進程或多線程
九. 常見的反爬蟲和應對方法?
基于用戶行為,同一個ip段時間多次訪問同一頁面 利用代理ip,構建ip池
請求頭里的user-agent 構建user-agent池(操作系統、瀏覽器不同,模擬不同用戶)
動態加載(抓到的數據和瀏覽器顯示的不一樣),js渲染 模擬ajax請求,返回json形式的數據
selenium / webdriver 模擬瀏覽器加載
對抓到的數據進行分析
加密參數字段 會話跟蹤【cookie】 防盜鏈設置【Referer
十. 分布式爬蟲主要解決什么問題?
面對海量待抓取網頁,只有采用分布式架構,才有可能在較短時間內完成一輪抓取工作。
它的開發效率是比較快而且簡單的。
到此,關于“Python有哪些高頻的面試題”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。