
0 遇到過得反爬蟲策略以及解決方法?
1.通過headers反爬蟲 2.基于用戶行為的發爬蟲:(同一IP短時間內訪問的頻率) 3.動態網頁反爬蟲(通過ajax請求資料,或者通過JavaScript生成) 4.對部分資料進行加密處理的(資料是亂碼)
解決方法:
對于基本網頁的抓取可以自定義headers,添加headers的資料 使用多個代理ip進行抓取或者設定抓取的頻率降低一些, 動態網頁的可以使用selenium + phantomjs 進行抓取 對部分資料進行加密的,可以使用selenium進行截圖,使用python自帶的pytesseract庫進行識別,但是比較慢最直接的方法是找到加密的方法進行逆向推理,
1 urllib 和 urllib2 的區別?
- urllib 和urllib2都是接受URL請求的相關模塊,但是urllib2可以接受一個Request類的實體來設定URL請求的headers,urllib僅可以接受URL,urllib不可以偽裝你的User-Agent字串,
- urllib提供urlencode()方法用來GET查詢字串的產生,而urllib2沒有,這是為何urllib常和urllib2一起使用的原因,
2 列舉網路爬蟲所用到的網路資料包,決議包?
- 網路資料包 urllib、urllib2、requests
- 決議包 re、xpath、beautiful soup、lxml
3 簡述一下爬蟲的步驟?
- 確定需求;
- 確定資源;
- 通過url獲取網站的回傳資料;
- 定位資料;
- 存盤資料,
4 遇到反爬機制怎么處理?
反爬機制:
headers方向 判斷User-Agent、判斷Referer、判斷Cookie, 將瀏覽器的headers資訊全部添加進去 注意:Accept-Encoding;gzip,deflate需要注釋掉
5 常見的HTTP方法有哪些?
- GET:請求指定的頁面資訊,回傳物體主體;
- HEAD:類似于get請求,只不過回傳的回應中沒有具體的內容,用于捕獲報頭;
- POST:向指定資源提交資料進行處理請求(比如表單提交或者上傳檔案),,資料被包含在請求體中,
- PUT:從客戶端向服務端傳送資料取代指定的檔案的內容;
- DELETE:請求洗掉指定的頁面;
- CONNNECT:HTTP1.1協議中預留給能夠將連接方式改為管道方式的代理服務器;
- OPTIONS:允許客戶端查看服務器的性能; TRACE:回顯服務器的請求,主要用于測驗或者診斷,
6 說一說redis-scrapy中redis的作用?
它是將scrapy框架中Scheduler替換為redis資料庫,實作佇列管理共享,
優點:
- 可以充分利用多臺機器的帶寬;
- 可以充分利用多臺機器的IP地址,
7 遇到的反爬蟲策略以及解決方法?
- 通過headers反爬蟲:自定義headers,添加網頁中的headers資料,
- 基于用戶行為的反爬蟲(封IP):可以使用多個代理IP爬取或者將爬取的頻率降低,
- 動態網頁反爬蟲(JS或者Ajax請求資料):動態網頁可以使用 selenium + phantomjs 抓取,
- 對部分資料加密處理(資料亂碼):找到加密方法進行逆向推理,
8 如果讓你來防范網站爬蟲,你應該怎么來提高爬取的難度 ?
- 判斷headers的User-Agent;
- 檢測同一個IP的訪問頻率;
- 資料通過Ajax獲取;
- 爬取行為是對頁面的源檔案爬取,如果要爬取靜態網頁的html代碼,可以使用jquery去模仿寫html,
9 scrapy分為幾個組成部分?分別有什么作用?
分為5個部分;Spiders(爬蟲類),Scrapy Engine(引擎),Scheduler(調度器),Downloader(下載器),Item Pipeline(處理管道),
- Spiders:開發者自定義的一個類,用來決議網頁并抓取指定url回傳的內容,
- Scrapy Engine:控制整個系統的資料處理流程,并進行事務處理的觸發,
- Scheduler:接收Engine發出的requests,并將這些requests放入到處理列隊中,以便之后engine需要時再提供,
- Download:抓取網頁資訊提供給engine,進而轉發至Spiders,
- Item Pipeline:負責處理Spiders類提取之后的資料, 比如清理HTML資料、驗證爬取的資料(檢查item包含某些欄位)、查重(并丟棄)、將爬取結果保存到資料庫中
10 簡述一下scrapy的基本流程?
scrapy分為9個步驟:
- Spiders需要初始的start_url或則函式stsrt_requests,會在內部生成Requests給Engine;
- Engine將requests發送給Scheduler;
- Engine從Scheduler那獲取requests,交給Download下載;
- 在交給Dowmload程序中會經過Downloader Middlewares(經過process_request函式);
- Dowmloader下載頁面后生成一個response,這個response會傳給Engine,這個程序中又經過了Downloader Middlerwares(經過process_request函式),在傳送中出錯的話經過process_exception函式;
- Engine將從Downloader那傳送過來的response發送給Spiders處理,這個程序經過Spiders Middlerwares(經過process_spider_input函式);
- Spiders處理這個response,回傳Requests或者Item兩個型別,傳給Engine,這個程序又經過Spiders Middlewares(經過porcess_spider_output函式);
- Engine接識訓傳的資訊,如果使Item,將它傳給Items Pipeline中;如果是Requests,將它傳給Scheduler,繼續爬蟲;
- 重復第三步,直至沒有任何需要爬取的資料
最后注意:不管你是為了Python就業還是興趣愛好,記住:專案開發經驗永遠是核心,如果你沒有2020最新python入門到高級實戰視頻教程,可以去小編的Python交流.裙 :七衣衣九七七巴而五(數字的諧音)轉換下可以找到了,里面很多新python教程專案,還可以跟老司機交流討教!本文的文字及圖片來源于網路加上自己的想法,僅供學習、交流使用,不具有任何商業用途,著作權歸原作者所有,如有問題請及時聯系我們以作處理,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/157177.html
標籤:Python
上一篇:python開發——Day01
