1、動態加載又對及時性要求很高怎么處理?
- Selenium+Phantomjs
- 盡量不使用 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 請求有什么區別
- 區別:
- get:
- 從指定的服務器中獲取數據。
- GET 請求能夠被緩存
- GET 請求會保存在瀏覽器的瀏覽記錄中
- 以 GET 請求的 URL 能夠保存為瀏覽器書簽
- GET 請求有長度限制
- GET 請求主要用以獲取數據
- post:
- POST 請求不能被緩存下來
- POST 請求不會保存在瀏覽器瀏覽記錄中
- 以 POST 請求的 URL 無法保存為瀏覽器書簽
- POST 請求沒有長度限制
- POST 請求會把請求的數據放置在 HTTP 請求包的包體中,POST 的安全性比 GET的高.可能修改變服務器上的資源的請求.
- 應用場合:
- post:
- 請求的結果有持續性的副作用(數據庫內添加新的數據行)
- 若使用 GET 方法,則表單上收集的數據可能讓 URL 過長。
- 要傳送的數據不是采用 7 位的 ASCII 編碼。
- get:
- 請求是為了查找資源,HTML 表單數據僅用來幫助搜索。
- 請求結果無持續性的副作用。
- 收集的數據及 HTML 表單內的輸入字段名稱的總長不超過 1024 個字符
- HTTP 請求會有哪些信息發送到后台服務器。
- 請求行 (請求方式、資源路徑和 HTTP 協議版本)POST /demo/login HTTP/1.1
- 請求消息頭
- 消息正文(也叫實體內容) username=xxxx&password=1234
- 更多Python視頻、源碼、資料加群683380553免費獲取
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)。