一些經典的Python爬蟲和網絡編程面試題,很是實用的,給你們介紹一下!css
(1)iphtml
(2)帶寬python
(3)cpureact
(4)ioweb
URL,即統一資源定位符,也就是咱們說的網址,統一資源定位符是對能夠從互聯網上獲得的資源的位置和訪問方法的一種簡潔的表示,是互聯網上標準資源的地址。互聯網上的每一個文件都有一個惟一的 URL,它包含的信息指出文件的位置以及瀏覽器應該怎麼處理它。面試
Scrapy,Beautiful Soup, urllib,urllib2,requestsredis
scrapy 是一個快速(fast)、高層次(high-level)的基於 python 的 web 爬蟲構架。算法
用來下載、並解析 web 頁面, 其 parse->yield item->pipeline 流程是全部爬蟲的固有模式。shell
構造形式主要分spider.pypipeline.py item.py decorator.py middlewares.py setting.py。數據庫
(1)優勢:scrapy 是異步的
採起可讀性更強的 xpath 代替正則強大的統計和 log 系統,同時在不一樣的 url 上爬行支持 shell 方式,方便獨立調試寫 middleware,方便寫一些統一的過濾器,經過管道的方式存入數據庫
(2)缺點:基於 python 的爬蟲框架,擴展性比較差
基於 twisted 框架,運行中的 exception 是不會幹掉 reactor,而且異步框架出錯後是不會停掉其餘任務的,數據出錯後難以察覺。
(1)scrapy 是封裝起來的框架,他包含了下載器,解析器,日誌及異常處理,基於多線程, twisted 的方式處理,對於固定單個網站的爬取開發,有優點,可是對於多網站爬取 100 個網站,併發及分佈式處理方面,不夠靈活,不便調整與括展。
(2)request 是一個 HTTP 庫, 它只是用來,進行請求,對於 HTTP 請求,他是一個強大的庫,下載,解析所有本身處理,靈活性更高,高併發與分佈式部署也很是靈活,對於功能能夠更好實現.
應用層—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
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 時間結束再使用此端口。
1.socket 建立一個套接字
2.bind 綁定 ip 和 port
3.listen 使套接字變爲能夠被動連接
4.accept 等待客戶端的連接
5.recv/send 接收發送數據
(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受網絡傳輸擁塞程序的變化而變化。
1.添加代理
2.下降訪問頻率
User-Agent動態 HTML 數據加載驗證碼處理Cookie
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 應該用於任何場景!
優勢:
一、使用 HTTPS 協議可認證用戶和服務器,確保數據發送到正確的客戶機和服務器;
二、HTTPS 協議是由 SSL+HTTP 協議構建的可進行加密傳輸、身份認證的網絡協議,要比 http 協議安全,可防止數據在傳輸過程當中不被竊取、改變,確保數據的完整性。
三、HTTPS 是現行架構下最安全的解決方案,雖然不是絕對安全,但它大幅增長了中間人攻擊的成本
缺點:
1.HTTPS 協議的加密範圍也比較有限,在黑客攻擊、拒絕服務攻擊、服務器劫持等方面幾乎起不到什麼做用
2.HTTPS 協議還會影響緩存,增長數據開銷和功耗,甚至已有安全措施也會受到影響也會所以而受到影響。
3.SSL 證書須要錢。功能越強大的證書費用越高。我的網站、小網站沒有必要通常不會用。
4.HTTPS 鏈接服務器端資源佔用高不少,握手階段比較費時對網站的相應速度有負面影響。
5.HTTPS 鏈接緩存不如 HTTP 高效。
HTTPS 其實就是在 HTTP 跟 TCP 中間加多了一層加密層 TLS/SSL。SSL 是個加密套件,負責對 HTTP 的數據進行加密。TLS 是 SSL 的升級版。如今提到 HTTPS,加密套件基本指的是 TLS。原先是應用層將數據直接給到 TCP 進行傳輸,如今改爲應用層將數據給到TLS/SSL,將數據加密後,再給到 TCP 進行傳輸。
如何申請,國內和國外有哪些第三方機構提供安全證書認證。
國內:
國外:
(1)從 start_urls 裏獲取第一批 url 併發送請求,請求由引擎交給調度器入請求隊列,獲取完畢後,調度器將請求隊列裏的請求交給下載器去獲取請求對應的響應資源,並將響應交給本身編寫的解析方法作提取處理:1. 若是提取出須要的數據,則交給管道文件處理;
(2)若是提取出 url,則繼續執行以前的步驟(發送 url 請求,並由引擎將請求交給調度器入隊列…),直到請求隊列裏沒有請求,程序結束。
1) scrapy 是一個 Python 爬蟲框架,爬取效率極高,具備高度定製性,可是不支持分佈式。而 scrapy-redis 一套基於 redis 數據庫、運行在 scrapy 框架之上的組件,可讓scrapy 支持分佈式策略,Slaver 端共享 Master 端 redis 數據庫裏的 item 隊列、請求隊列和請求指紋集合。
2) 爲何選擇 redis 數據庫,由於 redis 支持主從同步,並且數據都是緩存在內存中的,因此基於 redis 的分佈式爬蟲,對請求和數據的高頻讀取效率很是高
1) 使用一個具備登陸狀態的 cookie,結合請求報頭一塊兒發送,能夠直接發送 get 請求,訪問登陸後才能訪問的頁面。
2) 先發送登陸界面的 get 請求,在登陸頁面 HTML 裏獲取登陸須要的數據(若是須要的話),而後結合帳戶密碼,再發送 post 請求,便可登陸成功。而後根據獲取的 cookie信息,繼續訪問以後的頁面。
scrapy 框架的異步機制是基於 twisted 異步網絡框架處理的,在 settings.py 文件裏能夠設置具體的併發量數值(默認是併發量 16)。