您好,登錄后才能下訂單哦!
這篇文章主要介紹“Python爬蟲有哪些高頻面試題”,在日常操作中,相信很多人在Python爬蟲有哪些高頻面試題問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Python爬蟲有哪些高頻面試題”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
1. 為什么 requests 請求需要帶上 header?
原因是:模擬瀏覽器,欺騙服務(wù)器,獲取和瀏覽器一致的內(nèi)容
header 的形式:字典
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}
用法: requests.get(url,headers=headers)
2. 談一談你對 Selenium 和 PhantomJS 了解
Selenium 是一個Web 的自動化測試工具,可以根據(jù)我們的指令,讓瀏覽器自動加載頁面,獲取需要的數(shù)據(jù),甚至頁面截屏,或者判斷網(wǎng)站上某些動作是否發(fā)生。Selenium 自己不帶瀏覽器,不支持瀏覽器的功能,它需要與第三方瀏覽器結(jié)合在一起才能使用。但是我們有時候需要讓它內(nèi)嵌在代碼中運行,所以我們可以用一個叫 PhantomJS 的工具代替真實的瀏覽器。Selenium庫里有個叫 WebDriver 的API。WebDriver 有點兒像可以加載網(wǎng)站的瀏覽器,但是它也可以像BeautifulSoup 或者其他Selector 對象一樣用來查找頁面元素,與頁面上的元素進行交互 (發(fā)送文本、點擊等),以及執(zhí)行其他動作來運行網(wǎng)絡(luò)爬蟲。
PhantomJS是一個基于 Webkit 的“無界面”(headless)瀏覽器,它會把網(wǎng)站加載到內(nèi)存并執(zhí)行頁面上的 JavaScript,因為不會展示圖形界面,所以運行起來比完整的瀏覽器要高效。相比傳統(tǒng)的Chrome或 Firefox 瀏覽器等,資源消耗會更少。
如果我們把 Selenium 和 PhantomJS 結(jié)合在一起,就可以運行一個非常強大的網(wǎng)絡(luò)爬蟲了,這個爬蟲可以處理 JavaScrip、Cookie、headers,以及任何我們真實用戶需要做的事情。主程序退出后,selenium 不保證 phantomJS 也成功退出,最好手動關(guān)閉 phantomJS 進程。(有可能會導(dǎo)致多個 phantomJS 進程運行,占用內(nèi)存)。WebDriverWait 雖然可能會減少延時,但是目前存在 bug(各種報錯),這種情況可以采用 sleep。phantomJS爬數(shù)據(jù)比較慢,可以選擇多線程。如果運行的時候發(fā)現(xiàn)有的可以運行,有的不能,可以嘗試將 phantomJS 改成 Chrome。
3. 寫一個郵箱地址的正則表達式?
[A-Za-z0-9\\u4e00-\\u9fa5]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$
4. 你遇到的反爬蟲策略有哪些?及應(yīng)對策略有什么?
通過headers反爬蟲
基于用戶行為的發(fā)爬蟲:例如同一IP短時間內(nèi)多次訪問同一頁面,或者同一賬戶短時間內(nèi)多次進行相同操作
動態(tài)網(wǎng)頁反爬蟲,例如:我們需要爬取的數(shù)據(jù)是通過ajax請求得到,或者通過JavaScript生成的
對部分數(shù)據(jù)進行加密處理的,例如:我們要抓的數(shù)據(jù)部分能夠抓到,另外的部分加密處理了,是亂碼
應(yīng)對策略:
對于基本網(wǎng)頁的抓取可以自定義headers,添加headers的數(shù)據(jù),代理來解決 有些網(wǎng)站的數(shù)據(jù)抓取必須進行模擬登陸才能抓取到完整的數(shù)據(jù),所以要進行模擬登陸。 對于限制抓取頻率的,可以設(shè)置抓取的頻率降低一些, 對于限制ip抓取的可以使用多個代理ip進行抓取,輪詢使用代理 針對動態(tài)網(wǎng)頁的可以使用selenium+phantomjs進行抓取,但是比較慢,所以也可以使用查找接口的方式進行抓取。 對部分數(shù)據(jù)進行加密的,可以使用selenium進行截圖,飯后使用python自帶的 pytesseract庫進行識別,但是比較慢最直接的方法是找到加密的方法進行逆向推理。
5. 分布式爬蟲原理?
scrapy-redis實現(xiàn)分布式,其實從原理上來說很簡單,這里為描述方便,我們把自己的核心服務(wù)器稱為 master,而把用于跑爬蟲程序的機器稱為 slave。
我們知道,采用 scrapy 框架抓取網(wǎng)頁,我們需要首先給定它一些 start_urls,爬蟲首先訪問 start_urls里面的 url,再根據(jù)我們的具體邏輯,對里面的元素、或者是其他的二級、三級頁面進行抓取。而要實現(xiàn)分布式,我們只需要在這個 starts_urls 里面做文章就行了。
我們在 master 上搭建一個 redis 數(shù)據(jù)庫(注意這個數(shù)據(jù)庫只用作 url 的存儲,不關(guān)心爬取的具體數(shù)據(jù),不要和后面的 mongodb 或者 mysql 混淆),并對每一個需要爬取的網(wǎng)站類型,都開辟一個單獨的列表字段。通過設(shè)置 slave 上 scrapy-redis 獲取 url 的地址為 master 地址。這樣的結(jié)果就是,盡管有多個 slave,然而大家獲取 url 的地方只有一個,那就是服務(wù)器 master 上的 redis 數(shù)據(jù)庫。并且,由于 scrapy-redis 自身的隊列機制,slave 獲取的鏈接不會相互沖突。這樣各個 slave 在完成抓取任務(wù)之后,再把獲取的結(jié)果匯總到服務(wù)器上(這時的數(shù)據(jù)存儲不再在是 redis,而是 mongodb 或者mysql等存放具體內(nèi)容的數(shù)據(jù)庫了)這種方法的還有好處就是程序移植性強,只要處理好路徑問題,把 slave 上的程序移植到另一臺機器上運行,基本上就是復(fù)制粘貼的事情。
6. pythoon2.x 中urllib和urllib2的區(qū)別?
異同:都是做url請求的操作的,但是區(qū)別很明顯。 urllib2可以接受一個Request類的實例來設(shè)置URL請求的headers,urllib僅可以接受URL。這意味著,你不可以通過urllib模塊偽裝你的User Agent字符串等(偽裝瀏覽器)。 urllib提供urlencode方法用來GET查詢字符串的產(chǎn)生,而urllib2沒有。這是為何urllib常和urllib2一起使用的原因。 模塊比較優(yōu)勢的地方是urlliburllib2.urlopen可以接受Request對象作為參數(shù),從而可以控制HTTP Request的header部。 但是urllib.urlretrieve函數(shù)以及urllib.quote等一系列quote和unquote功能沒有被加入urllib2中,因此有時也需要urllib的輔助。
7.robots協(xié)議是什么?
Robots協(xié)議(也稱為爬蟲協(xié)議、爬蟲規(guī)則、機器人協(xié)議等)也就是robots.txt,網(wǎng)站通過robots協(xié)議告訴搜索引擎哪些頁面可以抓取,哪些頁面不能抓取。
Robots協(xié)議是網(wǎng)站國際互聯(lián)網(wǎng)界通行的道德規(guī)范,其目的是保護網(wǎng)站數(shù)據(jù)和敏感信息、確保用戶個人信息和隱私不被侵犯。因其不是命令,故需要搜索引擎自覺遵守。
8.什么是爬蟲?
爬蟲是請求網(wǎng)站并提取數(shù)據(jù)的自動化程序
9.爬蟲的基本流程?
1、通過http庫向目標站點發(fā)起請求,即發(fā)送一個Request,請求可以包含額外的headers等信息,等待服務(wù)器響應(yīng) 2、如果服務(wù)器能正常響應(yīng),會得到一個Response,Response的內(nèi)容比啊是索要獲取的頁面內(nèi)容 3、解析內(nèi)容:正則表達式、頁面解析庫、json 4、保存數(shù)據(jù):文本或者存入數(shù)據(jù)庫
10.什么是Request和Response?
本地 向 服務(wù)器 發(fā)送Request,服務(wù)器根據(jù)請求返回一個Response,頁面就顯示在頁面上了
1、瀏覽器就發(fā)送消息給該網(wǎng)址所在的服務(wù)器,這個過程叫做Http Request
2、服務(wù)器收到瀏覽器發(fā)送的消息后,能夠根據(jù)瀏覽器發(fā)送消息的內(nèi)容,做相應(yīng)處
理,然后把消息回傳給瀏覽器,這個過程叫做HTTP Response
3、瀏覽器收到服務(wù)器的Response消息后,會對信息進行相應(yīng)處理,然后顯示
到此,關(guān)于“Python爬蟲有哪些高頻面試題”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。