Python程序員關於爬蟲的一些常見面試題,有了他還怕面試不通過!

Python程序員關於爬蟲的一些常見面試題,有了他還怕面試不通過!

一些經典的Python爬蟲和網絡編程面試題,非常實用的,給大家介紹一下!

1、動態加載又對及時性要求很高怎麼處理?

  1. Selenium+Phantomjs
  2. 儘量不使用 sleep 而使用 WebDriverWait

2、分佈式爬蟲主要解決什麼問題?

(1)ip

(2)帶寬

(3)cpu

(4)io

3、什麼是 URL?

URL,即統一資源定位符,也就是我們說的網址,統一資源定位符是對可以從互聯網上得到的資源的位置和訪問方法的一種簡潔的表示,是互聯網上標準資源的地址。互聯網上的每個文件都有一個唯一的 URL,它包含的信息指出文件的位置以及瀏覽器應該怎麼處理它。

4、python 爬蟲有哪些常用技術?

Scrapy,Beautiful Soup, urllib,urllib2,requests

5、簡單說一下你對 scrapy 的瞭解?

scrapy 是一個快速(fast)、高層次(high-level)的基於 python 的 web 爬蟲構架。

用來下載、並解析 web 頁面, 其 parse->yield item->pipeline 流程是所有爬蟲的固有模式。

構造形式主要分spider.pypipeline.py item.py decorator.py middlewares.py setting.py。

6、Scrapy 的優缺點?

(1)優點:scrapy 是異步的

採取可讀性更強的 xpath 代替正則強大的統計和 log 系統,同時在不同的 url 上爬行支持 shell 方式,方便獨立調試寫 middleware,方便寫一些統一的過濾器,通過管道的方式存入數據庫

(2)缺點:基於 python 的爬蟲框架,擴展性比較差

基於 twisted 框架,運行中的 exception 是不會幹掉 reactor,並且異步框架出錯後是不會停掉其他任務的,數據出錯後難以察覺。

7、scrapy 和 request?

(1)scrapy 是封裝起來的框架,他包含了下載器,解析器,日誌及異常處理,基於多線程, twisted 的方式處理,對於固定單個網站的爬取開發,有優勢,但是對於多網站爬取 100 個網站,併發及分佈式處理方面,不夠靈活,不便調整與括展。

(2)request 是一個 HTTP 庫, 它只是用來,進行請求,對於 HTTP 請求,他是一個強大的庫,下載,解析全部自己處理,靈活性更高,高併發與分佈式部署也非常靈活,對於功能可以更好實現.

8、五層網絡模型?

應用層—http ftp dns nfs

傳輸層—tcp --udp

網絡層—ip icmp igmp

鏈路層—data link

物理層—media

設置 ip 和掩碼

	Ifconfig eth0 192.168.13.225 netmask 255.255.255.0

設置網關

route add default gw 192.168.5.1

9、什麼是 2MSL?

2MSL 即兩倍的 MSL,TCP 的 TIME_WAIT 狀態也稱為 2MSL 等待狀態,當 TCP 的一端發起主動關閉,在發出最後一個 ACK 包後,即第 3 次握手完成後發送了第四次握手的 ACK包後就進入了 TIME_WAIT 狀態,必須在此狀態上停留兩倍的 MSL 時間,等待 2MSL 時間主要目的是怕最後一個 ACK 包對方沒收到,那麼對方在超時後將重發第三次握手的 FIN包,主動關閉端接到重發的 FIN 包後可以再發一個 ACK 應答包。在 TIME_WAIT 狀態時兩端的端口不能使用,要等到 2MSL 時間結束才可繼續使用。當連接處於 2MSL 等待階段時任何遲到的報文段都將被丟棄。不過在實際應用中可以通過設置 SO_REUSEADDR 選項達到不必等待 2MSL 時間結束再使用此端口。

10、創建一個簡單 tcp 服務器需要的流程?

1.socket 創建一個套接字

2.bind 綁定 ip 和 port

3.listen 使套接字變為可以被動鏈接

4.accept 等待客戶端的鏈接

5.recv/send 接收發送數據

11、TTL,MSL,RTT?

(1)MSL:報文最大生存時間”,他是任何報文在網絡上存在的最長時間,超過這個時間報文將被丟棄。

(2)TTL:TTL 是 time to live 的縮寫,中文可以譯為“生存時間”,這個生存時間是由源主機設置初始值但不是存的具體時間,而是存儲了一個 ip 數據報可以經過的最大路由數,每經過一個處理他的路由器此值就減 1,當此值為 0 則數據報將被丟棄,同時發送 ICMP 報文通知源主機。RFC 793 中規定 MSL 為 2 分鐘,實際應用中常用的是 30 秒,1 分鐘和 2 分鐘等。TTL 與 MSL 是有關係的但不是簡單的相等的關係,MSL要大於等於 TTL。

(3)RTT: RTT 是客戶到服務器往返所花時間(round-trip time,簡稱 RTT),TCP 含有動態估算 RTT 的算法。TCP 還持續估算一個給定連接的 RTT,這是因為 RTT受網絡傳輸擁塞程序的變化而變化。

12、常用的反爬蟲措施?

1.添加代理

2.降低訪問頻率

User-Agent動態 HTML 數據加載驗證碼處理Cookie

13、關於 HTTP/HTTPS 的區別

HTTPS 和 HTTP 的區別:

(1)https 協議需要到 ca 申請證書,一般免費證書很少,需要交費。

(2)http 是超文本傳輸協議,信息是明文傳輸,https 則是具有安全性的 ssl 加密傳輸協議

(3)http 和 https 使用的是完全不同的連接方式用的端口也不一樣,前者是 80,後者是 443。

(4)http 的連接很簡單,是無狀態的

(5)HTTPS 協議是由 SSL+HTTP 協議構建的可進行加密傳輸、身份認證的網絡協議 要比http 協議安全

應用場合:

(1)http:適合於對傳輸速度,安全性要求不是很高,且需要快速開發的應用。如 web 應用,小的手機遊戲等等.

(2)https:https 應該用於任何場景!

14、HTTPS 有什麼優點和缺點

優點:

1、使用 HTTPS 協議可認證用戶和服務器,確保數據發送到正確的客戶機和服務器;

2、HTTPS 協議是由 SSL+HTTP 協議構建的可進行加密傳輸、身份認證的網絡協議,要比 http 協議安全,可防止數據在傳輸過程中不被竊取、改變,確保數據的完整性。

3、HTTPS 是現行架構下最安全的解決方案,雖然不是絕對安全,但它大幅增加了中間人攻擊的成本

缺點:

1.HTTPS 協議的加密範圍也比較有限,在黑客攻擊、拒絕服務攻擊、服務器劫持等方面幾乎起不到什麼作用

2.HTTPS 協議還會影響緩存,增加數據開銷和功耗,甚至已有安全措施也會受到影響也會因此而受到影響。

3.SSL 證書需要錢。功能越強大的證書費用越高。個人網站、小網站沒有必要一般不會用。

4.HTTPS 連接服務器端資源佔用高很多,握手階段比較費時對網站的相應速度有負面影響。

5.HTTPS 連接緩存不如 HTTP 高效。

15、HTTPS 是如何實現安全傳輸數據的

HTTPS 其實就是在 HTTP 跟 TCP 中間加多了一層加密層 TLS/SSL。SSL 是個加密套件,負責對 HTTP 的數據進行加密。TLS 是 SSL 的升級版。現在提到 HTTPS,加密套件基本指的是 TLS。原先是應用層將數據直接給到 TCP 進行傳輸,現在改成應用層將數據給到TLS/SSL,將數據加密後,再給到 TCP 進行傳輸。

16、HTTPS 安全證書是怎麼來的

如何申請,國內和國外有哪些第三方機構提供安全證書認證。

國內:

  • 沃通(WoSign)
  • 中國人民銀行聯合 12 家銀行建立的金融 CFCA
  • 中國電信認證中心(CTCA)
  • 海關認證中心(SCCA)
  • 國家外貿部 EDI 中心建立的國富安 CA 安全認證中心
  • SHECA(上海 CA)為首的 UCA 協卡認證體系

國外:

  • StartSSL
  • GlobalSign
  • GoDaddy
  • Symantec

16、get 和 post 請求有什麼區別

  1. 區別:
  2. get:
  3. 從指定的服務器中獲取數據。
  4. GET 請求能夠被緩存
  5. GET 請求會保存在瀏覽器的瀏覽記錄中
  6. 以 GET 請求的 URL 能夠保存為瀏覽器書籤
  7. GET 請求有長度限制
  8. GET 請求主要用以獲取數據
  9. post:
  10. POST 請求不能被緩存下來
  11. POST 請求不會保存在瀏覽器瀏覽記錄中
  12. 以 POST 請求的 URL 無法保存為瀏覽器書籤
  13. POST 請求沒有長度限制
  14. POST 請求會把請求的數據放置在 HTTP 請求包的包體中,POST 的安全性比 GET的高.可能修改變服務器上的資源的請求.
  15. 應用場合:
  16. post:
  17. 請求的結果有持續性的副作用(數據庫內添加新的數據行)
  18. 若使用 GET 方法,則表單上收集的數據可能讓 URL 過長。
  19. 要傳送的數據不是採用 7 位的 ASCII 編碼。
  20. get:
  21. 請求是為了查找資源,HTML 表單數據僅用來幫助搜索。
  22. 請求結果無持續性的副作用。
  23. 收集的數據及 HTML 表單內的輸入字段名稱的總長不超過 1024 個字符
  24. HTTP 請求會有哪些信息發送到後臺服務器。
  25. 請求行 (請求方式、資源路徑和 HTTP 協議版本)POST /demo/login HTTP/1.1
  26. 請求消息頭
  27. 消息正文(也叫實體內容) username=xxxx&password=1234

17、描述下 scrapy 框架運行的機制?

(1)從 start_urls 裡獲取第一批 url 併發送請求,請求由引擎交給調度器入請求隊列,獲取完畢後,調度器將請求隊列裡的請求交給下載器去獲取請求對應的響應資源,並將響應交給自己編寫的解析方法做提取處理:1. 如果提取出需要的數據,則交給管道文件處理;

(2)如果提取出 url,則繼續執行之前的步驟(發送 url 請求,並由引擎將請求交給調度器入隊列…),直到請求隊列裡沒有請求,程序結束。

18、為什麼選擇redis 數據庫?

1) scrapy 是一個 Python 爬蟲框架,爬取效率極高,具有高度定製性,但是不支持分佈式。而 scrapy-redis 一套基於 redis 數據庫、運行在 scrapy 框架之上的組件,可以讓scrapy 支持分佈式策略,Slaver 端共享 Master 端 redis 數據庫裡的 item 隊列、請求隊列和請求指紋集合。

2) 為什麼選擇 redis 數據庫,因為 redis 支持主從同步,而且數據都是緩存在內存中的,所以基於 redis 的分佈式爬蟲,對請求和數據的高頻讀取效率非常高

19、實現模擬登錄的方式有哪些?

1) 使用一個具有登錄狀態的 cookie,結合請求報頭一起發送,可以直接發送 get 請求,訪問登錄後才能訪問的頁面。

2) 先發送登錄界面的 get 請求,在登錄頁面 HTML 裡獲取登錄需要的數據(如果需要的話),然後結合賬戶密碼,再發送 post 請求,即可登錄成功。然後根據獲取的 cookie信息,繼續訪問之後的頁面。

20、簡單介紹下 scrapy 的異步處理

scrapy 框架的異步機制是基於 twisted 異步網絡框架處理的,在 settings.py 文件裡可以設置具體的併發量數值(默認是併發量 16)。

本文福利:私信回覆【PDF】可獲取小編精心整理的電子書一套


分享到:


相關文章: