黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

2019最新Python爬蟲高頻率面試題總結(jié)(一)

系統(tǒng) 1920 0

今天給大家出一個(gè)關(guān)于Python爬蟲面試題的總結(jié),相對(duì)于來說出現(xiàn)頻率比較高的一些!

1. 為什么 requests 請(qǐng)求需要帶上 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)

2019最新Python爬蟲高頻率面試題總結(jié)(一)_第1張圖片
2. 談一談你對(duì) Selenium 和 PhantomJS 了解

Selenium 是一個(gè)Web 的自動(dòng)化測(cè)試工具,可以根據(jù)我們的指令,讓瀏覽器自動(dòng)加載頁面,獲取需要的數(shù)據(jù),甚至頁面截屏,或者判斷網(wǎng)站上某些動(dòng)作是否發(fā)生。Selenium 自己不帶瀏覽器,不支持瀏覽器的功能,它需要與第三方瀏覽器結(jié)合在一起才能使用。但是我們有時(shí)候需要讓它內(nèi)嵌在代碼中運(yùn)行,所以我們可以用一個(gè)叫 PhantomJS 的工具代替真實(shí)的瀏覽器。Selenium庫里有個(gè)叫 WebDriver 的API。WebDriver 有點(diǎn)兒像可以加載網(wǎng)站的瀏覽器,但是它也可以像BeautifulSoup 或者其他Selector 對(duì)象一樣用來查找頁面元素,與頁面上的元素進(jìn)行交互 (發(fā)送文本、點(diǎn)擊等),以及執(zhí)行其他動(dòng)作來運(yùn)行網(wǎng)絡(luò)爬蟲。

PhantomJS是一個(gè)基于 Webkit 的“無界面”(headless)瀏覽器,它會(huì)把網(wǎng)站加載到內(nèi)存并執(zhí)行頁面上的 JavaScript,因?yàn)椴粫?huì)展示圖形界面,所以運(yùn)行起來比完整的瀏覽器要高效。相比傳統(tǒng)的Chrome或 Firefox 瀏覽器等,資源消耗會(huì)更少。

如果我們把 Selenium 和 PhantomJS 結(jié)合在一起,就可以運(yùn)行一個(gè)非常強(qiáng)大的網(wǎng)絡(luò)爬蟲了,這個(gè)爬蟲可以處理 JavaScrip、Cookie、headers,以及任何我們真實(shí)用戶需要做的事情。主程序退出后,selenium 不保證 phantomJS 也成功退出,最好手動(dòng)關(guān)閉 phantomJS 進(jìn)程。(有可能會(huì)導(dǎo)致多個(gè) phantomJS 進(jìn)程運(yùn)行,占用內(nèi)存)。WebDriverWait 雖然可能會(huì)減少延時(shí),但是目前存在 bug(各種報(bào)錯(cuò)),這種情況可以采用 sleep。phantomJS爬數(shù)據(jù)比較慢,可以選擇多線程。如果運(yùn)行的時(shí)候發(fā)現(xiàn)有的可以運(yùn)行,有的不能,可以嘗試將 phantomJS 改成 Chrome。

3. 寫一個(gè)郵箱地址的正則表達(dá)式?

[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+$

4. 你遇到的反爬蟲策略有哪些?及應(yīng)對(duì)策略有什么?

通過headers反爬蟲
基于用戶行為的發(fā)爬蟲:例如同一IP短時(shí)間內(nèi)多次訪問同一頁面,或者同一賬戶短時(shí)間內(nèi)多次進(jìn)行相同操作
動(dòng)態(tài)網(wǎng)頁反爬蟲,例如:我們需要爬取的數(shù)據(jù)是通過ajax請(qǐng)求得到,或者通過JavaScript生成的
對(duì)部分?jǐn)?shù)據(jù)進(jìn)行加密處理的,例如:我們要抓的數(shù)據(jù)部分能夠抓到,另外的部分加密處理了,是亂碼
應(yīng)對(duì)策略:
對(duì)于基本網(wǎng)頁的抓取可以自定義headers,添加headers的數(shù)據(jù),代理來解決
有些網(wǎng)站的數(shù)據(jù)抓取必須進(jìn)行模擬登陸才能抓取到完整的數(shù)據(jù),所以要進(jìn)行模擬登陸。
對(duì)于限制抓取頻率的,可以設(shè)置抓取的頻率降低一些,
對(duì)于限制ip抓取的可以使用多個(gè)代理ip進(jìn)行抓取,輪詢使用代理
針對(duì)動(dòng)態(tài)網(wǎng)頁的可以使用selenium+phantomjs進(jìn)行抓取,但是比較慢,所以也可以使用查找接口的方式進(jìn)行抓取。
對(duì)部分?jǐn)?shù)據(jù)進(jìn)行加密的,可以使用selenium進(jìn)行截圖,飯后使用python自帶的 pytesseract庫進(jìn)行識(shí)別,但是比較慢最直接的方法是找到加密的方法進(jìn)行逆向推理。

5. 分布式爬蟲原理?

scrapy-redis實(shí)現(xiàn)分布式,其實(shí)從原理上來說很簡(jiǎn)單,這里為描述方便,我們把自己的核心服務(wù)器稱為 master,而把用于跑爬蟲程序的機(jī)器稱為 slave。

我們知道,采用 scrapy 框架抓取網(wǎng)頁,我們需要首先給定它一些 start_urls,爬蟲首先訪問 start_urls里面的 url,再根據(jù)我們的具體邏輯,對(duì)里面的元素、或者是其他的二級(jí)、三級(jí)頁面進(jìn)行抓取。而要實(shí)現(xiàn)分布式,我們只需要在這個(gè) starts_urls 里面做文章就行了。

我們?cè)?master 上搭建一個(gè) redis 數(shù)據(jù)庫(注意這個(gè)數(shù)據(jù)庫只用作 url 的存儲(chǔ),不關(guān)心爬取的具體數(shù)據(jù),不要和后面的 mongodb 或者 mysql 混淆),并對(duì)每一個(gè)需要爬取的網(wǎng)站類型,都開辟一個(gè)單獨(dú)的列表字段。通過設(shè)置 slave 上 scrapy-redis 獲取 url 的地址為 master 地址。這樣的結(jié)果就是,盡管有多個(gè) slave,然而大家獲取 url 的地方只有一個(gè),那就是服務(wù)器 master 上的 redis 數(shù)據(jù)庫。并且,由于 scrapy-redis 自身的隊(duì)列機(jī)制,slave 獲取的鏈接不會(huì)相互沖突。這樣各個(gè) slave 在完成抓取任務(wù)之后,再把獲取的結(jié)果匯總到服務(wù)器上(這時(shí)的數(shù)據(jù)存儲(chǔ)不再在是 redis,而是 mongodb 或者mysql等存放具體內(nèi)容的數(shù)據(jù)庫了)這種方法的還有好處就是程序移植性強(qiáng),只要處理好路徑問題,把 slave 上的程序移植到另一臺(tái)機(jī)器上運(yùn)行,基本上就是復(fù)制粘貼的事情。

6. pythoon2.x 中urllib和urllib2的區(qū)別?

異同:都是做url請(qǐng)求的操作的,但是區(qū)別很明顯。
urllib2可以接受一個(gè)Request類的實(shí)例來設(shè)置URL請(qǐng)求的headers,urllib僅可以接受URL。這意味著,你不可以通過urllib模塊偽裝你的User Agent字符串等(偽裝瀏覽器)。
urllib提供urlencode方法用來GET查詢字符串的產(chǎn)生,而urllib2沒有。這是為何urllib常和urllib2一起使用的原因。
模塊比較優(yōu)勢(shì)的地方是urlliburllib2.urlopen可以接受Request對(duì)象作為參數(shù),從而可以控制HTTP Request的header部。
但是urllib.urlretrieve函數(shù)以及urllib.quote等一系列quote和unquote功能沒有被加入urllib2中,因此有時(shí)也需要urllib的輔助。
7.robots協(xié)議是什么?

Robots協(xié)議(也稱為爬蟲協(xié)議、爬蟲規(guī)則、機(jī)器人協(xié)議等)也就是robots.txt,網(wǎng)站通過robots協(xié)議告訴搜索引擎哪些頁面可以抓取,哪些頁面不能抓取。

Robots協(xié)議是網(wǎng)站國際互聯(lián)網(wǎng)界通行的道德規(guī)范,其目的是保護(hù)網(wǎng)站數(shù)據(jù)和敏感信息、確保用戶個(gè)人信息和隱私不被侵犯。因其不是命令,故需要搜索引擎自覺遵守。

8.什么是爬蟲?

爬蟲是請(qǐng)求網(wǎng)站并提取數(shù)據(jù)的自動(dòng)化程序

9.爬蟲的基本流程?

1、通過http庫向目標(biāo)站點(diǎn)發(fā)起請(qǐng)求,即發(fā)送一個(gè)Request,請(qǐng)求可以包含額外的headers等信息,等待服務(wù)器響應(yīng)
2、如果服務(wù)器能正常響應(yīng),會(huì)得到一個(gè)Response,Response的內(nèi)容比啊是索要獲取的頁面內(nèi)容
3、解析內(nèi)容:正則表達(dá)式、頁面解析庫、json
4、保存數(shù)據(jù):文本或者存入數(shù)據(jù)庫
10.什么是Request和Response?

本地 向 服務(wù)器 發(fā)送Request,服務(wù)器根據(jù)請(qǐng)求返回一個(gè)Response,頁面就顯示在頁面上了

1、瀏覽器就發(fā)送消息給該網(wǎng)址所在的服務(wù)器,這個(gè)過程叫做Http Request

2、服務(wù)器收到瀏覽器發(fā)送的消息后,能夠根據(jù)瀏覽器發(fā)送消息的內(nèi)容,做相應(yīng)處

理,然后把消息回傳給瀏覽器,這個(gè)過程叫做HTTP Response

3、瀏覽器收到服務(wù)器的Response消息后,會(huì)對(duì)信息進(jìn)行相應(yīng)處理,然后顯示

下期會(huì)繼續(xù)為大家更新更多關(guān)于Python爬蟲的面試題總結(jié)!


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論