Python爬蟲工程師面試問題總結,python爬蟲

來源:互聯網
上載者:User

Python爬蟲工程師面試問題總結,python爬蟲

註:答案一般在網上都能夠找到。

1.對if __name__ == 'main'的理解陳述

2.python是如何進行記憶體管理的?

3.請寫出一段Python代碼實現刪除一個list裡面的重複元素

4.Python裡面如何拷貝一個對象?(賦值,淺拷貝,深拷貝的區別)

5.介紹一下except的用法和作用?

6.Python中__new__與__init__方法的區別

7.常用的網路資料爬取方法

8.遇到過得反爬蟲策略以及解決方案

9.urllib 和 urllib2 的區別

10.設計一個基於session登入驗證的爬蟲方案

11.列舉網路爬蟲所用到的網路資料包,解析包

12.熟悉的爬蟲架構

13.Python在伺服器的部署流程,以及環境隔離

14.Django 和 Flask 的相同點與不同點,如何進行選擇?

15.寫一個Python中的單例模式

16.Linux部署服務指令碼命令(包括啟動和停止的shell指令碼)

17.你用過多線程和非同步嘛?除此之外你還用過什麼方法來提高爬蟲效率?

18.POST 與 GET的區別

1)對if __name__ == 'main'的理解陳述

__name__是當前模組名,當模組被直接運行時模組名為__main__,也就是當前的模組,當模組被匯入時,模組名就不是__main__,即代碼將不會執行。

2)python是如何進行記憶體管理的?

a、對象的引用計數機制
python內部使用引用計數,來保持追蹤記憶體中的對象,Python內部記錄了對象有多少個引用,即引用計數,當對象被建立時就建立了一個引用計數,當對象不再需要時,這個對象的引用計數為0時,它被記憶體回收。

b、記憶體回收

1>當一個對象的引用計數歸零時,它將被垃圾收集機制處理掉。

2>當兩個對象a和b相互引用時,del語句可以減少a和b的引用計數,並銷毀用於引用底層對象 的名稱。然而由於每個對象都包含一個對其他對象的應用,因此引用計數不會歸零,對象也不會銷毀。(從而導致記憶體泄露)。為解決這一問題,解譯器會定期執行一個迴圈檢測器,搜尋不可訪問對象的迴圈並刪除它們。

c、記憶體池機制

Python提供了對記憶體的垃圾收集機制,但是它將不用的記憶體放到記憶體池而不是返回給作業系統。

1>Pymalloc機制。為了加速Python的執行效率,Python引入了一個記憶體池機制,用於管理 對小塊記憶體的申請和釋放。

2>Python中所有小於256個位元組的對象都使用pymalloc實現的分配器,而大的對象則使用 系統的malloc。

3>對於Python對象,如整數,浮點數和List,都有其獨立的私人記憶體池,對象間不共用他們的記憶體池。也就是說如果你分配又釋放了大量的整數,用於緩衝這些整數的記憶體就不能再分配給浮點數。

3)請寫出一段Python代碼實現刪除一個list裡面的重複元素

# 1.使用set函數list = [1, 3, 4, 5, 51, 2, 3]set(list)# 2.使用字典函數,>>> a = [1, 2, 4, 2, 4, 5, 6, 5, 7, 8, 9, 0]>>> b = {}>>> b = b.fromkeys(a)>>> c = list(b.keys())>>> c

4)Python裡面如何拷貝一個對象?(賦值,淺拷貝,深拷貝的區別)

賦值(=),就是建立了對象的一個新的引用,修改其中任意一個變數都會影響到另一個。

淺拷貝:建立一個新的對象,但它包含的是對原始對象中包含項的引用(如果用引用的方式修改其中一個對象,另外一個也會修改改變){1,完全切片方法;2,工廠函數,如list();3,copy模組的copy()函數}

深拷貝:建立一個新的對象,並且遞迴的複製它所包含的對象(修改其中一個,另外一個不會改變){copy模組的deep.deepcopy()函數}

5)介紹一下except的用法和作用?

try…except…except…else…

執行try下的語句,如果引發異常,則執行過程會跳到except語句。對每個except分支順序嘗試執行,如果引發的異常與except中的異常組匹配,執行相應的語句。如果所有的except都不匹配,則異常會傳遞到下一個調用本代碼的最高層try代碼中。

try下的語句正常執行,則執行else塊代碼。如果發生異常,就不會執行如果存在finally語句,最後總是會執行。

6)Python中__new__與__init__方法的區別

__new__:它是建立對象時調用,會返回當前對象的一個執行個體,可以用__new__來實現單例

__init__:它是建立對象後調用,對當前對象的一些執行個體初始化,無傳回值

7)常用的網路資料爬取方法

  • Regex
  • Beautiful Soup
  • Lxml

8)遇到過得反爬蟲策略以及解決方案

1.通過headers反爬蟲

2.基於使用者行為的發爬蟲:(同一IP短時間內訪問的頻率)

3.動態網頁反爬蟲(通過ajax請求資料,或者通過JavaScript產生)

4.對部分資料進行加密處理的(資料是亂碼)

解決方案:

對於基本網頁的抓取可以自訂headers,添加headers的資料

使用多個代理ip進行抓取或者設定抓取的頻率降低一些,動態網頁的可以使用selenium + phantomjs 進行抓取

對部分資料進行加密的,可以使用selenium進行,使用python內建的pytesseract庫進行識別,但是比較慢最直接的方法是找到加密的方法進行逆向推理。

9)urllib 和 urllib2 的區別

urllib 和urllib2都是接受URL請求的相關模組,但是urllib2可以接受一個Request類的執行個體來設定URL請求的headers,urllib僅可以接受URL。urllib不可以偽裝你的User-Agent字串。

urllib提供urlencode()方法用來GET查詢字串的產生,而urllib2沒有。這是為何urllib常和urllib2一起使用的原因。

10)設計一個基於session登入驗證的爬蟲方案

11)列舉網路爬蟲所用到的網路資料包,解析包

網路資料包 urllib、urllib2、requests

解析包 re、xpath、beautiful soup、lxml

12)熟悉的爬蟲架構

Scrapy架構 根據自己的實際情況回答

13)Python在伺服器的部署流程,以及環境隔離

14)Django 和 Flask 的相同點與不同點,如何進行選擇?

15)寫一個Python中的單例模式

class Singleton(object):_instance = Nonedef __new__(cls, *args, **kw):if not cls._instance:cls._instance = super(Singleton, cls).__new__(cls, *args, **kw) return cls._instanceclass MyClass(Singleton): a = 1one = MyClass()two = MyClass()id(one) = id(two)>>> True

16)Linux部署服務指令碼命令(包括啟動和停止的shell指令碼)

17)你用過多線程和非同步嘛?除此之外你還用過什麼方法來提高爬蟲效率?

  • scrapy-redis 分布式爬取
  • 對於定向爬取可以用正則取代xpath

18)POST與 GET的區別

  • GET資料轉送安全性低,POST傳輸資料安全性高,因為參數不會被儲存在瀏覽器曆史或web伺服器日誌中;
  • 在做資料查詢時,建議用GET方式;而在做資料添加、修改或刪除時,建議用POST方式;
  • GET在url中傳遞資料,資料資訊放在要求標頭中;而POST請求資訊放在請求體中進行傳遞資料;
  • GET傳輸資料的資料量較小,只能在要求標頭中發送資料,而POST傳輸資料資訊比較大,一般不受限制;
  • 在執行效率來說,GET比POST好

19)什麼是lambda函數?它有什麼好處?

lambda 運算式,通常是在需要一個函數,但是又不想費神去命名一個函數的場合下使用,也就是指匿名函數

lambda函數:首要用途是指點短小的回呼函數

lambda [arguments]:expression>>> a=lambdax,y:x+y>>> a(3,11)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.