Python面試題爬蟲篇(附答案)


第一部分 必答題

注意:第31題1分,其他題均每題3分。

1,了解哪些基於爬蟲相關的模塊?

    - 網絡請求:urllib,requests,aiohttp
    - 數據解析:re,xpath,bs4,pyquery
    - selenium
    - js逆向:pyexcJs

2,常見的數據解析方式?

- re、lxml、bs4

3,列舉在爬蟲過程中遇到的哪些比較難的反爬機制?

- 動態加載的數據
    - 動態變化的請求參數
    - js加密
    - 代理
    - cookie

4,簡述如何抓取動態加載數據?

- 基於抓包工具進行全局搜索
- 如果動態加載的數據是密文,則全局搜索是搜索不到

5,移動端數據如何抓取?

    - fiddler,appnium,網絡配置

6,抓取過哪些類型的數據,量級多少?

- 電商,醫療器械,彩妝,新聞資訊,金融,體育賽事(參考hao123網站)
- 量級:
    - 最好不要超過100w。自己計算(頁數,一頁顯示多少數據)

7,了解哪些爬蟲框架?

- scrapy,pyspider

8,談談對scrapy的了解?

- 功能:數據解析,持久化存儲,深度爬取,分布式,關鍵件
    - 五大核心組件的作用和工作流程

9,如何解析出攜帶標簽的局部頁面數據?

- bs4

10,scrapy核心組件?

- spider,引擎,調度器,下載器,管道

11,scrapy中間件的應用?

    - 作用:攔截請求和響應
    - 攔截請求:設置代理

12,如何實現全站數據爬取?

- 基於手動請求發送+遞歸解析
- 基於CrwalSpider(LinkExtractor,Rule)

13,如何檢測網站數據更新?

- 增量式爬蟲

14,分布式爬蟲實現原理?

- 基於scrapy-redis實現的分布式。

15,如何提升爬取數據的效率(異步爬蟲)

    - 使用框架
    - 線程池,多任務的異步協程
    - 分布式

16,列舉你接觸的反爬機制?

ua檢測、封ip、js混淆、參數加密、數據加密,動態加載

17,什么是深度優先和廣度優先(優劣)

    - 默認情況下scrapy是深度優先。
    - 深度優先:占用空間大,但是運行速度快
    - 廣度優先:占用空間少,運行速度慢

18,scrapy如何實現持久化存儲

    - 解析數據
    - 將解析的數據封裝到item中
    - 將item提交管道
    - 在管道中持久化存儲
    - 開啟管道

19,談談對crawlspider的理解,如何使用其進行深度爬取

- 鏈接提取器&規則解析器

20,如何實現數據清洗?

    - 清洗空值(缺失值)
        - 將空對應的行數據刪除.dropna
        - 使用近鄰值填充空值.fillna
    - 清洗重復值
        - 重復的行數據刪除:drop_duplicates()
    - 清洗異常值
        - 一定要有一個判定異常值的條件

21,了解過機器學習嗎?

- 特征工程
        - 特征預處理
            - 歸一化,標准化
        - 特征值化
            - 將非數值型的數據轉換成數值型的數據
        - 降維
    - sklean框架
        - 線性回歸,KNN,貝葉斯
        - 補充:
            1.樹模型:決策樹
            2.集成模型:隨機森林
    - 深度學習框架:
        -  tensorflow

22,在爬蟲中為什么需要是用selenium?selenium和爬蟲之間的關聯么?

selenium和爬蟲之間的關聯是什么?
    - 爬取動態加載的數據
    - 模擬登錄

23,列舉你所熟知的selenium模塊中的常用方法及其作用

24,解釋在多任務異步協程中事件循環(loop)的作用是什么?

- 可以將注冊在其內部的任務對象表示的特定操作進行異步執行

25,多任務異步協程是如何實現異步的?

    - 一個任務對象就是一個協程也是一組特定的操作,將任務對象注冊到事件循環中,就可以異步的執行每一組特定的操作
    - wait方法,await關鍵字

26,驗證碼如何處理?

- 打碼平台

27,scrapy 和 scrapy-redis 有什么區別?

    - scrapy-redis這個組件可以給scrapy框架提供共享的管道和調度器實現分布式爬蟲

28,說一說打開瀏覽器訪問 www.baidu.com 獲取到結果,整個流程。

1.域名解析成IP

2.與目的主機進行TCP連接(三次握手)

3.發送和接收數據

29,列出你知道 header 的內容以及信息

    - User-Agent
    - Connection

30,簡述scrapy的去重原理?

需要將dont_filter設置為False開啟去重,默認是False;
對於每一個url的請求,調度器都會根據請求的相關信息加密得到一個指紋信息,並且將指紋信息和set()集合中得指紋信息進行比對,如果set()集合中已經存在這個數據,就不在將這個Request放入隊列中。如果set()集合中沒有,就將這個Request對象放入隊列中,等待被調度。

31,下列敘述中錯誤的是:(1分)

A.棧是線性結構 B.隊列是線性結構
C.線性列表是線性結構 D.二叉樹是線性結構

32,簡述前序、中序、后續遍歷?

跟左右

左跟右

左右跟

33,寫代碼:實現一個冒泡排序。

def sort(alist):
    length = len(alist)
    for j in range(length-1)
        for i in range(length-1-j):
            if alist[i] > alist[i+1]:
                alist[i],alist[i+1] = alist[i+1],alist[i]
    return alist
alist = [3,8,5,2,0,7,6]
print(sort(alist))

34,寫代碼:實現一個快速排序。

def sort(alist,left,right):
    low = left
    hight = right
    if low < high:
        return
    
    mid = alist[low]
    while low < high:
        while low < high:
            if alist[high] < mid:
                alist[low] = alist[high]
                break
            else:
                high -= 1
        while low < high:
            if alist[low] < mid:
                low += 1
            else:
                alist[high] = alist[low]
                break
    if low == high:
       alist[low] = mid
    sort(alist,left,low-1)
    sort(alist,high+1,right)
    return alist

第二部分 補充題

1,列舉常見用的git命令?

2,你們公司/團隊用怎么做的協同開發?

3,公司如何做代碼review?誰來做?

4,線上代碼如果出現bug如何解決?

5,git rebase的作用?

git實戰視頻地址:https://www.bilibili.com/video/av70772636

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM