【2018】python面試題大全【爬蟲階段】
96. git常見命令作用
某個資料夾中的內容進行版本管理:
進入資料夾,右鍵git bash
- git init 初始化,當前所在的資料夾可以被管理且以後版本相關的資料都會儲存到.git檔案中
- git status 檢視當前資料夾以及子目錄中檔案是否發生變化:內容修改/新增檔案/刪除,已經變化的檔案會變成紅色,已經add的檔案會變成綠色
- git add . 給發生變化的檔案(貼上一個標籤)或 將發生變化的檔案放到某個地方,只寫一個句點符就代表把git status中紅色的檔案全部打上標籤
- git commit -m ‘新增使用者登入認證功能以及xxx功能’ 將“綠色”檔案新增到版本中
- git log 檢視所有版本提交記錄,可以獲取版本號
- git reset –hard 版本號 將最新的版本回退到更早的版本
- git reflog 回退到之前版本後悔了,再更新到最新或者最新之前的版本
- git reset –hard 版本 回退
97. 簡述以下git中stash命令作用以及相關其他命令。
stash用於將工作區發生變化的所有檔案獲取臨時儲存在“某個地方”,將工作區還原當前版本未操作前的狀態;stash還可以將臨時儲存在“某個地方”的檔案再次拿回到工作區。
- git stash 將當前工作區所有修改過的內容儲存到“某個地方”,將工作區還原到當前版本未修改過的狀態
- git stash list 檢視“某個地方”儲存的所有記錄
- git stash clear 清空“某個地方”
- git stash pop 將第一個記錄從“某個地方”重新拿到工作區(可能有衝突)
- git stash apply 編號, 將指定編號記錄從“某個地方”重新拿到工作區(可能有衝突)
- git stash drop 編號,刪除指定編號的記錄
98. git 中 merge 和 rebase命令 的區別。
採用merge和rebase後,git log的區別,merge命令不會保留merge的分支的commit:
99. 公司如何基於git做的協同開發?
100、如何基於git實現程式碼review?
101. git如何實現v1.0 、v2.0 等版本的管理?
102. 什麼是gitlab?
GitLab 是一個用於倉庫管理系統的開源專案,使用Git作為程式碼管理工具,並在此基礎上搭建起來的web服務。安裝方法是參考GitLab在GitHub上的Wiki頁面。
103、github和gitlab的區別?
先說一下相同點,二者都是基於web的Git倉庫,在很大程度上GitLab是仿照GitHub來做的,它們都提供了分享開源專案的平臺,為開發團隊提供了儲存、分享、釋出和合作開發專案的中心化雲端儲存的場所。
GitHub作為開原始碼庫及版本控制系統,擁有超過900萬的開發者使用者,目前仍然是最火的開源專案託管系統。GitHub同時提供公共倉庫和私有倉庫,但如果要使用私有倉庫,是需要付費的。
而GitLab解決了這個問題,你可以在上面建立私人的免費倉庫。
GitLab讓開發團隊對他們的程式碼倉庫擁有更多的控制,相比於GitHub,它有不少的特色:
允許免費設定倉庫許可權;允許使用者選擇分享一個project的部分程式碼;允許使用者設定project的獲取許可權,進一步的提升安全性;可以設定獲取到團隊整體的改進進度;通過innersourcing讓不在許可權範圍內的人訪問不到該資源。
從程式碼私有性方面來看,有時公司並不希望員工獲取到全部的程式碼,這個時候GitLab無疑是更好的選擇。但對於開源專案而言,GitHub依然是程式碼託管的首選。
104、如何為github上牛逼的開源專案貢獻程式碼?
對一個開源專案有足夠了解的情況下,如果你發現問題或者更好的解決方案的話,可以開個issue先。
一般情況下維護這個專案的人或者其他使用這個專案的人會參與討論的,然後基於這些討論你可以發一些pull requests。
如果你的方案得到很多人贊同的話,專案維護人員會把他們merge,你也就成了這個專案的contributor了。
當然很多情況下,你開的這個issue已經有人提過了,或者說是你自己誤解了,但是相信在和其他開發人員交流的過程中,你也能學到許多。
105、git中 .gitignore檔案的作用?
一般來說每個Git專案中都需要一個“.gitignore”檔案,這個檔案的作用就是告訴Git哪些檔案不需要新增到版本管理中。
實際專案中,很多檔案都是不需要版本管理的,比如Python的.pyc檔案和一些包含密碼的配置檔案等等。
106. 什麼是敏捷開發?
敏捷開發以使用者的需求進化為核心,採用迭代、循序漸進的方法進行軟體開發。在敏捷開發中,軟體專案在構建初期被切分成多個子專案,各個子專案的成果都經過測試,具備可視、可整合和可執行使用的特徵。換言之,就是把一個大專案分為多個相互聯絡,但也可獨立執行的小專案,並分別完成,在此過程中軟體一直處於可使用狀態。
119、簡述 requests模組的作用及基本使用?
- 使用requests可以模擬瀏覽器傳送的請求
- 傳送get請求:requests.get()
- 傳送post請求:requests.post()
- 讀取請求返回內容:requests.text()
- 儲存cookie:requests.cookie()
120、簡述 beautifulsoup模組的作用及基本使用?
121、簡述 seleninu模組的作用及基本使用?
selenium最初是一個自動化測試工具,而爬蟲中使用它主要是為了解決requests無法直接執行JavaScript程式碼的問題
selenium本質是通過驅動瀏覽器,完全模擬瀏覽器的操作,比如跳轉、輸入、點選、下拉等,來拿到網頁渲染之後的結果,可支援多種瀏覽器
122、scrapy框架中各元件的工作流程?
Scrapy Engine(引擎): 負責Spider、ItemPipeline、Downloader、Scheduler中間的通訊,訊號、資料傳遞等。
Scheduler(排程器): 它負責接受引擎傳送過來的Request請求,並按照一定的方式進行整理排列,入隊,當引擎需要時,交還給引擎。
Downloader(下載器):負責下載Scrapy Engine(引擎)傳送的所有Requests請求,並將其獲取到的Responses交還給Scrapy Engine(引擎),由引擎交給Spider來處理,
Spider(爬蟲):它負責處理所有Responses,從中分析提取資料,獲取Item欄位需要的資料,並將需要跟進的URL提交給引擎,再次進入Scheduler(排程器),
Item Pipeline(管道):它負責處理Spider中獲取到的Item,並進行進行後期處理(詳細分析、過濾、儲存等)的地方.
Downloader Middlewares(下載中介軟體):你可以當作是一個可以自定義擴充套件下載功能的元件。
Spider Middlewares(Spider中介軟體):你可以理解為是一個可以自定擴充套件和操作引擎和Spider中間通訊的功能元件(比如進入Spider的Responses;和從Spider出去的Requests)
123、在scrapy框架中如何設定代理(兩種方法)?
from scrapy.downloadermiddlewares.httpproxy import HttpProxyMiddleware
from urllib.request import getproxies
124、scrapy框架中如何實現大檔案的下載?
- FilesPipeline
- ImagesPipeline
125、scrapy中如何實現限速?
修改setting檔案的AUTOTHROTTLE_START_DELAY 開啟後預設限速為5秒
126、scrapy中如何實現暫定爬蟲?
在cmd上cd 進入專案
然後在專案目錄下建立 記錄檔案:remain/001
然後輸入:scrapy crawl zhihu -s JOBDIR=remain/001
回車執行就行了
按ctrl+c 暫停
繼續執行只要再次輸入:scrapy crawl zhihu -s JOBDIR=remain/001就行了
需要重新爬取就換個檔案 002就行了
127、scrapy中如何進行自定製命令?
在spiders同級建立任意目錄,如:commands
在其中建立 crawlall.py 檔案 (此處檔名就是自定義的命令)
from scrapy.commands import ScrapyCommand
from scrapy.utils.project import get_project_settings
class Command(ScrapyCommand):
requires_project = True
def syntax(self):
return '[options]'
def short_desc(self):
return 'Runs all of the spiders'
def run(self, args, opts):
spider_list = self.crawler_process.spiders.list()
for name in spider_list:
self.crawler_process.crawl(name, **opts.__dict__)
self.crawler_process.start()
在settings.py 中新增配置 COMMANDS_MODULE = ‘專案名稱.目錄名稱’
在專案目錄執行命令:scrapy crawlall
128、scrapy中如何實現的記錄爬蟲的深度?
class scrapy.contrib.spidermiddleware.depth.DepthMiddleware
DepthMiddleware是一個用於追蹤每個Request在被爬取的網站的深度的中介軟體。 其可以用來限制爬取深度的最大深度或類似的事情。
DepthMiddleware 可以通過下列設定進行配置(更多內容請參考設定文件):
DEPTH_LIMIT - 爬取所允許的最大深度,如果為0,則沒有限制。
DEPTH_STATS - 是否收集爬取狀態。
DEPTH_PRIORITY - 是否根據其深度對requet安排優先順序
129、scrapy中的pipelines工作原理?
Scrapy 提供了 pipeline 模組來執行儲存資料的操作。在建立的 Scrapy 專案中自動建立了一個 pipeline.py 檔案,同時建立了一個預設的 Pipeline 類。我們可以根據需要自定義 Pipeline 類,然後在 settings.py 檔案中進行配置即可
130、scrapy的pipelines如何丟棄一個item物件?
到pipelines的時候不執行持久化儲存就會什麼也不執行也就是丟棄
131、簡述scrapy中爬蟲中介軟體和下載中介軟體的作用?
下載器中介軟體(Downloader Middlewares)
位於Scrapy引擎和下載器之間的框架,主要是處理Scrapy引擎與下載器之間的請求及響應。
爬蟲中介軟體(Spider Middlewares)
介於Scrapy引擎和爬蟲之間的框架,主要工作是處理蜘蛛的響應輸入和請求輸出。
132、scrapy-redis元件的作用?
scheduler - 排程器
dupefilter - URL去重規則(被排程器使用)
pipeline - 資料持久化
133、scrapy-redis元件中如何實現的任務的去重?
定義去重規則(被排程器呼叫並應用)
a. 內部會使用以下配置進行連線Redis
# REDIS_HOST = 'localhost' # 主機名
# REDIS_PORT = 6379 # 埠
# REDIS_URL = 'redis://user:[email protected]:9001' # 連線URL(優先於以上配置)
# REDIS_PARAMS = {} # Redis連線引數 預設:REDIS_PARAMS = {'socket_timeout': 30,'socket_connect_timeout': 30,'retry_on_timeout': True,'encoding': REDIS_ENCODING,})
# REDIS_PARAMS['redis_cls'] = 'myproject.RedisClient' # 指定連線Redis的Python模組 預設:redis.StrictRedis
# REDIS_ENCODING = "utf-8" # redis編碼型別 預設:'utf-8'
b. 去重規則通過redis的集合完成,集合的Key為:
key = defaults.DUPEFILTER_KEY % {'timestamp': int(time.time())}
預設配置:
DUPEFILTER_KEY = 'dupefilter:%(timestamp)s'
c. 去重規則中將url轉換成唯一標示,然後在redis中檢查是否已經在集合中存在
from scrapy.utils import request
from scrapy.http import Request
req = Request(url='http://www.cnblogs.com/wupeiqi.html')
result = request.request_fingerprint(req)
print(result) # 8ea4fd67887449313ccc12e5b6b92510cc53675c
PS:
- URL引數位置不同時,計算結果一致;
- 預設請求頭不在計算範圍,include_headers可以設定指定請求頭
示例:
from scrapy.utils import request
from scrapy.http import Request
req = Request(url='http://www.baidu.com?name=8&id=1',callback=lambda x:print(x),cookies={'k1':'vvvvv'})
result = request.request_fingerprint(req,include_headers=['cookies',])
print(result)
req = Request(url='http://www.baidu.com?id=1&name=8',callback=lambda x:print(x),cookies={'k1':666})
result = request.request_fingerprint(req,include_headers=['cookies',])
print(result)
!#Ensure all spiders share same duplicates filter through redis.
!#DUPEFILTER_CLASS = “scrapy_redis.dupefilter.RFPDupeFilter”
134、scrapy-redis的排程器如何實現任務的深度優先和廣度優先?
相關推薦
【2018】python面試題大全【爬蟲階段】
96. git常見命令作用 某個資料夾中的內容進行版本管理: 進入資料夾,右鍵git bash git init 初始化,當前所在的資料夾可以被管理且以後版本相關的資料都會儲存到.git檔案中 git status 檢視當前資料夾以及子目錄中檔案是否發生
2018經典PHP面試題大全
2018PHP經典面試題大全彙總 2018/2/28 13:49:56 點選次數:4913 1、PHP語言的一大優勢是跨平臺,什麼是跨平臺? PHP的執行環境最優搭配為Apache+MySQL+PHP,此執行環境可以在不同作業系統(例如windows、Linux等)上配置,不受作業系
python面試題大全(一)
reg 線程 查找 prot 傳遞 狀態 pass 14. htm python面試題大全(一) 最近開始整理python的資料,博主建立了一個qq群,希望給大家提供一個交流的同平臺 938587844 。 1. (1)python下多線程的限制以及多進程中傳遞參數的
Python面試題(二)【轉】
www. toolbar code 很大的 fin alt log 表達 字符 轉載出處http://www.cnblogs.com/goodhacker/p/3387027.html 1.python中類方法、類實例方法、靜態方法有何區別? 區別: 類方法和靜態方法都
Python面試題【BAT版】
寫在前面 今天給大家分享2018年BAT面試過程中的python的相關問題。所有的面試題和答案均來源於網路,如有侵權請及時聯絡,答案如有不正確還請各位及時指正。為面試而生希望各位都能化身offer收割機。 問題清單 Python語言特性 1.Pyt
2018年10月24日 JS中 【“邏輯運算”,“面試題:作用域問題”,“dom對象”】這些問題的意見見解
dcb stc ima 事件 代碼 客戶端 document model 變量 1、邏輯運算 || && ! ||:遇到第一個為true的值就中止並返回 &&:遇到第一個為false的值就中止並返回,如果沒有false值,就返回最後一個
【2018年最新】 iOS面試題及答案
(1)#import指令是Object-C針對@include的改進版本,能確保引用的檔案只會被引用一次,不會陷入遞迴包含的問題中;(2)@import與@class的區別: #import會鏈入該標頭檔案的全部資訊,包括實體變數和方法等;二@class只是告訴編譯器,其後面宣告的名稱是類的名稱,至於這
【2018最新】iOS面試題(二)
1.VC的生命週期 init:初始化程式 loadView:檢視初始化 viewDidLoad:檢視載入完成 viewWillAppear:檢視即將顯示 viewDidAppear:檢視顯示時呼叫 viewWillDisappear:檢視即將消失
【劍指Offer面試題】 九度OJ1516:調整數組順序使奇數位於偶數前面
pen 沒有 name func hide tracking 順序 popu type 題目鏈接地址: http://ac.jobdu.com/problem.php?pid=1516 題目1516:調整數組順序使奇數位於偶數前面 時間限制:
【原創】Java面試題筆記
也不能 als color body 但是 函數 log 字符 方法 自動裝箱、拆箱 1 public class IntegerTest { 2 3 @Test 4 public void constPool(){ 5
Python庫資源大全【收藏】
電子表格 m3u guide ssh max python-re 客戶端和服務器 service 高級 本文是一個精心設計的Python框架、庫、軟件和資源列表,是一個Awesome XXX系列的資源整理,由BigQuant整理加工而成,歡迎擴散、歡迎補充! 對機
【面試題】Java面試題--基礎總結--個人學習記錄
1、Java執行緒的狀態 新建new:新建立一個執行緒物件。 就緒runnable:建立執行緒物件後呼叫start方法,此時執行緒進入可執行狀態,等待CPU的時間片,且其他所需資源已獲得。 執行running(一般不考慮這種狀態):執行緒分得CPU的時間片、資源後執行執行緒。 阻塞b
【面試題】Java面試題--技術框架--個人學習記錄
1、看過哪些開源框架的原始碼 2、為什麼要用Redis,Redis有哪些優缺點?Redis如何實現擴容? 3、Netty是如何使用執行緒池的,為什麼這麼使用 4、為什麼要使用Spring,Spring的優缺點有哪些 &
【面試題】Java面試題--技術深度--個人學習記錄
1、有沒有看過JDK原始碼,看過的類實現原理是什麼。 2、HTTP協議 TCP詳解 關於http協議 3、TCP協議 TCP詳解 關於http協議 4、一致性Hash演算法 5、JVM如何載入位元組碼檔案 loa
【圖文詳細 】HDFS面試題:hadoop1.x和2.x架構上的區別
(1)Hadoop 1.0 Hadoop 1.0即第一代Hadoop,由分散式儲存系統HDFS和分散式計算框架MapReduce組成,其中,HDFS由一個NameNode和多個DataNode組成,MapReduce由一個JobTracker和多個TaskTracker組成,對應Hadoop
【圖文詳細 】HDFS面試題:hadoop的守護執行緒以及Namenode的職責是什麼
五個守護程序: SecondaryNameNode ResourceManager NodeManager NameNode DataNode Namenode:主節點,儲存檔案的元資料(檔名,檔案目錄結構,檔案屬性——生成時間,副本數,檔案許可權),以及每個檔案的塊列表
【圖文詳細 】HDFS面試題:介紹Hadoop中RPC協議,以及底層用什麼框架封裝的
用於將使用者請求中的引數或者應答轉換成位元組流以便跨機傳輸。 函式呼叫層:函式呼叫層主要功能是:定位要呼叫的函式,並執行該函式,Hadoop採用了java的反射機制和動態代理實現了函式的呼叫。 網路傳輸層:網路傳輸層描述了Client和Server之間訊息的傳輸方式,Hadoop採用了基
【圖文詳細 】HDFS面試題:hdfs裡的 edits和 fsimage作用
1)、fsimage檔案其實是Hadoop檔案系統元資料的一個永久性的檢查點,其中包含Hadoop檔案系統中的所有目錄和檔案idnode的序列化資訊; 2)、edits檔案存放的是Hadoop檔案系統的所有更新操作的路徑,檔案系統客戶端執行的所以寫操作首先會被記錄到edits檔案中。
【圖文詳細 】HDFS面試題:hdfs 的資料壓縮演算法?
(1) Gzip 壓縮 優點:壓縮率比較高,而且壓縮/解壓速度也比較快; hadoop 本身支援,在應用中處理gzip 格式的檔案就和直接處理文字一樣;大部分 linux 系統都自帶 gzip 命令,使用方便. 缺點:不支援 split。 應用場景: 當每個檔案壓縮之後在 130M
【圖文詳細 】HDFS面試題:hdfs的回收站(防止誤刪)
預設是關閉的,需要手動開啟,修改配置 core-site.xml 新增: