第一部分 必答題
注意:第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
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/182418.html
標籤:Python
