2020十大Python面試題,你會幾個?

2020十大Python面試題,你會幾個?

0 遇到過得反爬蟲策略以及解決方法?

  1. 1.通過headers反爬蟲
  2. 基於用戶行為的發爬蟲:(同一IP短時間內訪問的頻率)
  3. 動態網頁反爬蟲(通過ajax請求數據,或者通過JavaScript生成)
  4. 對部分數據進行加密處理的(數據是亂碼)


解決方法:

對於基本網頁的抓取可以自定義headers,添加headers的數據 使用多個代理ip進行抓取或者設置抓取的頻率降低一些, 動態網頁的可以使用selenium + phantomjs 進行抓取 對部分數據進行加密的,可以使用selenium進行截圖,使用python自帶的pytesseract庫進行識別,但是比較慢最直接的方法是找到加密的方法進行逆向推理。

1 urllib 和 urllib2 的區別?

  • urllib 和urllib2都是接受URL請求的相關模塊,但是urllib2可以接受一個Request類的實例來設置URL請求的headers,urllib僅可以接受URL。urllib不可以偽裝你的User-Agent字符串。
  • urllib提供urlencode()方法用來GET查詢字符串的產生,而urllib2沒有。這是為何urllib常和urllib2一起使用的原因。

2 列舉網絡爬蟲所用到的網絡數據包,解析包?

  • 網絡數據包 urllib、urllib2、requests
  • 解析包 re、xpath、beautiful soup、lxml

3 簡述一下爬蟲的步驟?

  1. 確定需求;
  2. 確定資源;
  3. 通過url獲取網站的返回數據;
  4. 定位數據;
  5. 存儲數據。

4 遇到反爬機制怎麼處理?

反爬機制:

headers方向 判斷User-Agent、判斷Referer、判斷Cookie。 將瀏覽器的headers信息全部添加進去 注意:Accept-Encoding;gzip,deflate需要註釋掉

5 常見的HTTP方法有哪些?

  • GET:請求指定的頁面信息,返回實體主體;
  • HEAD:類似於get請求,只不過返回的響應中沒有具體的內容,用於捕獲報頭;
  • POST:向指定資源提交數據進行處理請求(比如表單提交或者上傳文件),。數據被包含在請求體中。
  • PUT:從客戶端向服務端傳送數據取代指定的文檔的內容;
  • DELETE:請求刪除指定的頁面;
  • CONNNECT:HTTP1.1協議中預留給能夠將連接方式改為管道方式的代理服務器;
  • OPTIONS:允許客戶端查看服務器的性能; TRACE:回顯服務器的請求,主要用於測試或者診斷。
2020十大Python面試題,你會幾個?

6 說一說redis-scrapy中redis的作用?

它是將scrapy框架中Scheduler替換為redis數據庫,實現隊列管理共享。

優點:

  1. 可以充分利用多臺機器的帶寬;
  2. 可以充分利用多臺機器的IP地址。

7 遇到的反爬蟲策略以及解決方法?

  1. 通過headers反爬蟲:自定義headers,添加網頁中的headers數據。
  2. 基於用戶行為的反爬蟲(封IP):可以使用多個代理IP爬取或者將爬取的頻率降低。
  3. 動態網頁反爬蟲(JS或者Ajax請求數據):動態網頁可以使用 selenium + phantomjs 抓取。
  4. 對部分數據加密處理(數據亂碼):找到加密方法進行逆向推理。

8 如果讓你來防範網站爬蟲,你應該怎麼來提高爬取的難度 ?

  1. 判斷headers的User-Agent;
  2. 檢測同一個IP的訪問頻率;
  3. 數據通過Ajax獲取;
  4. 爬取行為是對頁面的源文件爬取,如果要爬取靜態網頁的html代碼,可以使用jquery去模仿寫html。

9 scrapy分為幾個組成部分?分別有什麼作用?

分為5個部分;Spiders(爬蟲類),Scrapy Engine(引擎),Scheduler(調度器),Downloader(下載器),Item Pipeline(處理管道)。

  • Spiders:開發者自定義的一個類,用來解析網頁並抓取指定url返回的內容。
  • Scrapy Engine:控制整個系統的數據處理流程,並進行事務處理的觸發。
  • Scheduler:接收Engine發出的requests,並將這些requests放入到處理列隊中,以便之後engine需要時再提供。
  • Download:抓取網頁信息提供給engine,進而轉發至Spiders。
  • Item Pipeline:負責處理Spiders類提取之後的數據。 比如清理HTML數據、驗證爬取的數據(檢查item包含某些字段)、查重(並丟棄)、將爬取結果保存到數據庫中

10 簡述一下scrapy的基本流程?

2020十大Python面試題,你會幾個?

scrapy分為9個步驟:

  1. Spiders需要初始的start_url或則函數stsrt_requests,會在內部生成Requests給Engine;
  2. Engine將requests發送給Scheduler;
  3. Engine從Scheduler那獲取requests,交給Download下載;
  4. 在交給Dowmload過程中會經過Downloader Middlewares(經過process_request函數);
  5. Dowmloader下載頁面後生成一個response,這個response會傳給Engine,這個過程中又經過了Downloader Middlerwares(經過process_request函數),在傳送中出錯的話經過process_exception函數;
  6. Engine將從Downloader那傳送過來的response發送給Spiders處理,這個過程經過Spiders Middlerwares(經過process_spider_input函數);
  7. Spiders處理這個response,返回Requests或者Item兩個類型,傳給Engine,這個過程又經過Spiders Middlewares(經過porcess_spider_output函數);
  8. Engine接收返回的信息,如果使Item,將它傳給Items Pipeline中;如果是Requests,將它傳給Scheduler,繼續爬蟲;
  9. 重複第三步,直至沒有任何需要爬取的數據

結尾

最後多說一句,小編是一名python開發工程師,這裡有我自己整理了一套最新的python系統學習教程,包括從基礎的python腳本到web開發、爬蟲、數據分析、數據可視化、機器學習等。想要這些資料的可以關注小編,並在後臺私信小編:“01”即可領取。


分享到:


相關文章: