ReadyInterview

文章目錄

爬蟲

  • 簡述通用爬蟲和聚焦爬蟲的概念:
    1、 通常情況下,我們將搜索引擎使用的爬蟲我們稱之爲通用爬蟲,谷歌、百度等瀏覽器,他的作用是把整個互聯網上的網頁下載到本地,形成一個互聯網內容的鏡像備份,在對這些網頁進行一定的處理(例如提取關鍵字、去掉廣告等)之後,就可以提供一個用戶檢索內容的接口,一般的網站都會通過robots協議來告訴通用爬蟲,那些頁面可以抓取,那些不可以抓取。優點:抓取範圍廣,針對性較低
    2、 有目的的抓取特定的內容,會對數據進行篩選和處理。爬蟲開發一般指的就是聚焦爬蟲

  • 完整的URL都包括哪些內容
    1、 一個完整的url包含協議(http、https等)、主機地址、端口、路徑和資源。其中不同的協議代表不同資源查找方式、資源傳輸方式;主機地址指的是存放資源的主機(服務器)的IP地址(域名),端口是用來區分不同的服務的,路徑是指資源在主機中的具體位置

  • 簡述HTTP協議和HTTPS協議的區別與聯繫:
    1、 HTTPS協議需要到證書辦法機構(CA)申請證書,一般免費證書很少,需要像證書頒發機構支付費用。HTTP協議是超文本傳輸協議,信息是明文傳輸,HTTPS則是具有安全性的SSL加密傳輸協議,採用HTTP協議傳輸數據的客戶端和服務端,客戶端給服務器發送請求,服務器接收到請求會直接將數據返回。採用HTTPS協議的時候,客戶端給服務器發送請求,服務器接收到請求後不會馬上將數據返回,而是將一個證書傳遞給客戶端(這個證書中包含了公鑰),客戶端信任這個證書後,客戶端發出的信息會經過加密後在發送給服務器,服務器接收到這個信息後會使用服務器的私鑰進行解密,同樣的,服務器發送給客戶端的信息也會通過私鑰進行加密,在客戶端通過公鑰進行解密。
    在這裏插入圖片描述

  • robots協議
    1、 爬蟲協議,網絡機器人協議,君子協議,全稱“網絡爬蟲排除標準”(robots Exclusion Protocol),主要針對搜索引擎,即通用爬蟲,一般放在網站跟目錄下, /robots.txt ,是一個約定俗稱的道德規範,並不是強制執行的法律,知識約定俗稱的道德規範,並不能保證萬盞的隱私。
    目前爬蟲領域仍然處在拓荒階段,屬於灰色領域。簡而言之,爬取用戶能看到的內容,目前沒有法律明文規定,但是如果抓取數據庫等,屬於黑客行爲,要負法律責任的。

  • 請說出HTTP請求半酣哪幾部分,至少4個請求頭以及含義
    1、HTTP求情包含請求頭和請求體兩個部分,請求頭半酣客戶端的環境和客戶端請求信息等。請求體就是客戶端要發送給服務器的數據,比如登錄註冊的時候,客戶端需要將賬號密碼發送給服務器,那麼這個時候的賬號密碼數據就可以作爲請求體發送給服務器。
    2、常見請求頭:
    HOST:客戶端像訪問的服務器主機地址(域名)
    USER-Agent: 客戶端的類型,客戶端的軟件環境
    ACCEPT:客戶端所能接收的數據類型
    ACCEPT-language:客戶端的語言環境
    ACCEPT-Encoding:客戶端支持的數據壓縮格式
    connection:長連接 短鏈接
    cookie:驗證身份
    referer:標誌從那個頁面跳轉過來

  • HTTP響應包含哪幾部分,至少常見狀態碼及含義。
    1、HTTP響應包含響應頭和響應體。響應頭包含了對服務器的描述和對返回數據的描述,響應題就是服務器要給客戶端返回的數據
    2、常見狀態碼:
    200:請求成功接收
    304:再次請求事,請求的內容沒有發生改變
    403:禁止訪問,客戶端沒有權限
    404:服務器無法根據客戶端請求找到資源
    500:服務器內部錯誤,無法完成請請求

  • 你用過的爬蟲模塊和爬蟲框架都有那些
    1、下載數據 —urllib/requests
    2、解析數據 —re/lxml/bs4/pyquery
    3、緩存和持久化 —pymysql/redis/pymongo/常見文件格式 csv json txt等
    4、 生成數字簽名 — hashlib
    5、序列化- pickle/json
    6、壓縮 —zlib
    7、調度器:進程(multiprocessing)/線程(threading)/協程(coroutine)
    8、框架: Scrapy

  • 講數模擬登錄流程以及爬蟲中如何使用cookie
    1、模擬登錄可以分爲三種方式:a、使用seleninum框架,模擬chrome瀏覽器來模擬人的行爲,打開瀏覽器,獲得輸入賬號的輸入框,並自動填入賬號密碼內容,並模擬點擊登錄。 b、使用模擬Ajax請求,分析頁面中登錄的URL地址、傳遞參數,使用這種凡是可以模擬API接口進行登錄。c、提前登錄,複製cookie,攜帶cookie登錄

  • 圖片放到連接技術是如何實現的以及如何破解
    1、網站防圖片盜鏈接通常是檢查獲取圖片的HTTP請求頭中Referer字段,改字段的作用是告訴服務器獲取圖片的請求是從哪個頁面鏈接過來的,如果沒有該字段的頁面並不是本網站,那麼就可以認定盜鏈接行爲,從而通過攔截過濾器加以拒絕,知道了這一點,破解也很簡單,就是在hTTP請求頭中田間Referer字段,並指定爲提供圖片的網站的某個有效URL即可。

  • 常見的HTML文件解析方式都有那些:
    1、正則表達式,速度快,re模塊
    2、Xpath解析,速度快,python庫有lxml/bs4
    3、css選擇器解析,速度慢,python庫中有bs4/pyquery

  • 什麼是懶加載技術,如何爬取懶加載的圖片
    1、在很多網站中,如果頁面中的圖片內容非常多,那當用戶在訪問該頁面時,頁面中的圖片不用全部加載出來,值用加載在瀏覽器框中展示的部分圖片即可,因此懶加載就是當用戶瀏覽到該圖片信息時,菜價在img中的src屬性,實現懶加載的關鍵點如下:a、頁面中的img元素,如果沒有src屬性,瀏覽器就不會發出請求去下載圖片(也就是沒有請求,也沒有提高性能),一旦通過javascript設置了圖片的路徑,瀏覽器纔會發送請求,b、如何獲取真正的路徑,整整的路徑存在元素的data-url屬性中,當劉阿龍年起在訪問到該圖片時,將data-url地址設置到src屬性中即可。

  • 如何爬取的數據爲JSON數據,如何解析
    1、 通過Python內置的json模塊中的loads函數可以將json格式的數據解析成python的字典或數組

  • selenium+phanttomJs是什麼,有什麼作用
    1、selenium是一個自動化測試工具,利用他可以驅動瀏覽器執行特定額動作,如點擊、表單操作等,同時還可以獲取瀏覽器上呈現的網頁源代碼,做到可見及可爬。
    2、對於一些JS動態渲染的頁面來說,此種抓取方式非常有效,phantomeJS是一個無頭瀏覽器(headless browser,也稱無界面瀏覽器,他是一個支持腳本變成的Webkit瀏覽器引擎,由於phantonJs是無界面瀏覽器,爬取是不需要開界面,佔用內存較小,所以運行起來比打開界面的爬取方式更高效,除了phanttonJs)支持無頭瀏覽器模式,目前主流的瀏覽器如chrome和firefox也支持headless瀏覽器模式進行無界面爬取。

  • 簡述scrapy基本結構和工作原理
    spiders—spiderMiddleWaret---->engine------->scheduler------>engine-----downloadMiddleware—>downloader<--------internet
    downloader----downloadMiddleware—>engine-----spider middleware---->spiders-------engine---->piplines----->save(SQL)

  • 怎麼理解進程和線程
    1、進程是指在系統中,證字啊運行的一個應用程序,進程之間相互是獨立的,每隔進程運行在其轉悠且受保護的內存空間內,所有的應用程序都是通過代碼來實現的,所以應用程序就可以堪稱我們寫好額一個代碼,進程就是我們正在執行的這個代碼,代碼中我們避免不了要生命很多變量去保存各種各樣的數據,那麼這些數據就是保存在這個進程對應的內存空間中的,當進程對應的代碼執行結束了,進程就結束,其對應的內存空間也會被註釋。進程要想執行任務,必須得有進程(每隔進程必須要有一個線程),一個進程(程序)的所有任務都在線程中執行,如果八斤橙可以堪稱一個車間,線程就是車間裏的工人,車間的特點就是,每一個車間都有一個屬於自己的轉悠的空間,並且一個車間裏面可以有多個工人,但是車間想要生產,那麼車間中至少一個工人。

  • 如何理解同步、異步、並行、併發
    1、同步:多任務,多個任務之間執行的時候要求有先後順序,必須一個先執行完成之後,另一個才能繼續執行,只有一個主線。
    2、異步:多任務,多個任務之間執行沒有先後順序,可以同時運行,執行的先後順序不會有什麼影響,存在的多條運行主線
    3、並行和併發都可以看成是多個任務可以同時執行,但是他們之間有差別,並行纔是真正的同時執行但是要真正做到並行需要多核的支撐,併發是通過時間切片,讓cpu快速在多個任務之間切換造成的同時執行的假象。

  • Scrapy和Scrapy-Redis有什麼區別
    1、Scrapy是一個通用的爬蟲框架,但是本身並不支持分佈式,Scrapy-Redis是爲了更方便地實現Scrapy分佈式爬取,而提供了一些Redis爲基礎的組件。
    通過Scrapy-Redis組件可以提供的主要功能包括:
    a、爬取隊列的功能
    b、去重過濾的功能
    c、和中斷後重新爬取的功能
    在這裏插入圖片描述

  • 如何解決基於驗證碼的反爬措施:
    1、如果是簡單的驗證碼,可以通過pillow模塊進行識別
    2、如果相對於識別難度太高,可以考慮雲打嗎等服務
    3、關於滑動驗證碼:可以使用selenium通過操作標籤滑動實現

  • 簡述CrawlSpider的定義以及用法
    1、CrawlSpider是Spider的派生類,Spider的設計原則只怕去start_url列表中的網頁,而Crawl Spider類定義了一些規則來提供跟進網址的方便的機制,從爬取的網頁中獲取網址並繼續爬取的工作更合適(規律性更強的網站)

scrapy genspider -t crawl 爬蟲名 域名
定義rule規則,linkExtractors等。
  • 簡述代理是什麼以及你是如何使用代理的
    1、當我們需要大量的爬取網頁信息時,除了切換User-Agent之外,另外一個重要的方式就是設置代理IP,以防止我們的爬蟲被拒絕,設置代理IP通常情況下可以使用第三方接口,也可以自己做IP代理池,通常情況下,一些代理網站會提供一些免費的ip代理,但是其穩定性和可用性很難得到保證,另外一個代理就是設置User-Agent,用以模擬不同的瀏覽器的訪問行爲。
    2、ip分類
    透明:對方知道我們的真實ip
    匿名 對方不知道我們的真實ip,但是知道使用了代理
    高匿:對方不知道我們的真實ip,也不知道我們使用了代理

    比如:爬取淘寶:服務器獲取內容反扒考慮:1、ip地址 2、User-Agent 3、用戶賬號(同一個用戶滿世界亂跑,會被封號)

  • Scrapy在爬取過程中餘姚斷網如何保證數據的完整性
    1、任何程序在運行的過程中,都有可能會崩潰,爬蟲也不例外,當我們爬取的數據量很大很大的時候,爬取的過程難民啊會出現各種各樣的問題導致程序崩潰斷掉,這個時候我們急需要記錄爬蟲的狀態,當爬蟲掛掉的時候可以恢復原來的狀態繼續泡,Scrapy簡單易用,效率極高,自帶多線程機制,但是也正因爲它的多線程機制導致在用Scrapy寫爬蟲的時候處理斷點續爬很惱火,當請求中加入了優先級的屬性的時候,每次Scrapy從請求隊列中取請求的時候就會判斷優先級,先取出優先級高的去訪問,由於Scrapy默認啓動是個線程,這時優先級爲100的就會在優先級爲90之前被取出請求隊列,這樣呢我們就能大體上保證爬取網頁的順序性,保證了順序性之後呢,我們就要記錄已經爬取的頁數,由於發送求情,下載頁面、存取數據這幾個動作時順序執行的,也就是說程序發送了這個請求不代表此時已經爬取到這一頁了,只有當收到響應的時候我們才能確定我們已經獲取到了數據,這是我們才能記錄爬取的位置。

  • 如何爬取網頁上的動態內容
    爲了加速頁面的加載速度,頁面的很多部分都是用JS生成的,而對於用Scrapy爬蟲來說就是一個很大的問題,因爲Scrapy本身並沒有JS引擎,所以爬取的都是靜態頁面,圖和分析網站上動態加載出來的內容,可以通過查看管理員工具來獲得網站發送的AJAX,通過調用Ajax請求拿到返回的JSON數據,返回的JSON數據就是網頁中動態渲染的數據,另外一種方式就是使用自動化測試工具Selenium加載phantomJS或者時ChromeDriver等瀏覽器來加載動態內容。

  • 簡述分佈式爬蟲的原理:
    1、分佈式爬蟲實際上就是在多臺主機上同時運行爬蟲任務協同爬取,協同爬取的前提時共享一個爬取請求隊列,各臺主機不需要維護自己的爬取請求隊列,二十從共享隊列存取請求。但是每臺主機有各自的調度器和下載器,所以調度和下載功能分別完成,這樣就可以多臺主機協同爬取,爬取效率成倍提高。
    2、通過Redis的數據結構(如列表,集合。有序集合)來實現共享爬取請求隊列
    通過利用Redis的集合來實現分佈式請求的去重
    通過調度器對Redis的爬取請求隊列進行判斷,當Redis隊列爲空時,爬蟲重新爬取,如果不爲空,爬蟲接着上次終端處繼續爬取。

  • 你遇到過那些反扒措施以及應對的手段是什麼?
    1、檢查HTTP請求頭
    accept
    user-agent ----fake-useragent 第三方庫
    Referer
    Accept-encoding/language
    2、檢查網站的cookie
    插件:EditthisCookie
    腳本生活曾動態的cookie
    構建cookie池
    3、動態生成頁面內容
    JavaScript逆向
    selenium+phantomJs
    4、對訪問頻率進行限制
    對爬蟲進行限速。
    隱藏身份
    IP代理
    5、填寫表單或輸入驗證碼
    a、手動輸入post提交
    b、識別驗證碼,機器學習
    c、第三方服務(雲打碼)
    6、爬蟲陷阱(蜜罐)
    網頁上有誘使爬蟲爬取的隱藏鏈接(陷阱或者蜜罐),可以通過selenium調用PhantonJS來判斷連接是否可見或者出現在可視區域來避開。

  • 簡述Scrapy中間件
    spider middleWare和downloadMiddleWare
    spier middleware是在運行過程中進行一些處理,而下載器中間件實在頁面被下載時進行的一些處理

    spiderMiddleWare有一下幾個函數被管理:process_spider_input接收一個對象並處理,process_spider_exception在爬取出現異常的時候被調用,process_start_requests當spider發出請求時被調用。

    downloadMiddleWare有一下幾個函數管理:process_request在請求通過下載中間件的時候被調用,process_response在下載結果經過中間件被調用,process_exception在瞎子出現異常時被調用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章