最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網 會員登陸 & 注冊

yyds!Python爬蟲的完整學習框架

2023-08-17 17:21 作者:金金淦淦J  | 我要投稿

以下文章來源于DataCastle數據城堡?,作者DC君

?數據是決策的原材料,高質量的數據價值不菲,如何挖掘原材料成為互聯網時代的先驅,掌握信息的源頭,就能比別人更快一步。

?大數據時代,互聯網成為大量信息的載體,機械的復制粘貼不再實用,不僅耗時費力還極易出錯,這時爬蟲的出現解放了大家的雙手,以其高速爬行、定向抓取資源的能力獲得了大家的青睞。

?爬蟲變得越來越流行,不僅因為它能夠快速爬取海量的數據,更因為有python這樣簡單易用的語言使得爬蟲能夠快速上手

?對于小白來說,爬蟲可能是一件非常復雜、技術門檻很高的事情,但掌握正確的方法,在短時間內做到能夠爬取主流網站的數據,其實非常容易實現,但建議你從開始就要有一個具體的目標

?在目標的驅動下,你的學習才會更加精準和高效。那些所有你認為必須的前置知識,都是可以在完成目標的過程中學到的。

?基于python爬蟲,我們整理了一個完整的學習框架:



篩選和甄別學習哪些知識,在哪里去獲取資源是許多初學者共同面臨的問題。
接下來,我們將學習框架進行拆解,分別對每個部分進行詳細介紹和推薦一些相關資源,告訴你學什么、怎么學、在哪里學。

?爬蟲簡介


爬蟲是一種按照一定的規(guī)則,自動地抓取萬維網信息的程序或者腳本。

這個定義看起來很生硬,我們換一種更好理解的解釋:

我們作為用戶獲取網絡數據的方式是瀏覽器提交請求->下載網頁代碼->解析/渲染成頁面;而爬蟲的方式是模擬瀏覽器發(fā)送請求->下載網頁代碼->只提取有用的數據->存放于數據庫或文件中。爬蟲與我們的區(qū)別是,爬蟲程序只提取網頁代碼中對我們有用的數據,并且爬蟲抓取速度快,量級大。


隨著數據的規(guī)?;?,爬蟲獲取數據的高效性能越來越突出,能夠做的事情越來越多:·市場分析:電商分析、商圈分析、一二級市場分析等·市場監(jiān)控:電商、新聞、房源監(jiān)控等·商機發(fā)現:招投標情報發(fā)現、客戶資料發(fā)掘、企業(yè)客戶發(fā)現等。


進行爬蟲學習,首先要懂得是網頁,那些我們肉眼可見的光鮮亮麗的網頁是由HTML、css、javascript等網頁源碼所支撐起來的。這些源碼被瀏覽器所識別轉換成我們看到的網頁,這些源碼里面必定存在著很多規(guī)律,?我們的爬蟲就能按照這樣的規(guī)律來爬取需要的信息。


無規(guī)矩不成方圓,Robots協(xié)議就是爬蟲中的規(guī)矩,它告訴爬蟲和搜索引擎哪些頁面可以抓取,哪些不可以抓取。通常是一個叫作robots.txt的文本文件,放在網站的根目錄下。




??輕量級爬蟲

??“獲取數據——解析數據——存儲數據”是爬蟲的三部曲,大部分爬蟲都是按這樣的流程來進行,這其實也是模擬了我們使用瀏覽器獲取網頁信息的過程。

?1、獲取數據
爬蟲第一步操作就是模擬瀏覽器向服務器發(fā)送請求,基于python,你不需要了解從數據的實現,HTTP、TCP、IP的網絡傳輸結構,一直到服務器響應和應達的原理,因為python提供了功能齊全的類庫來幫我們完成這些請求?

Python自帶的標準庫urllib2使用的較多,它是python內置的HTTP請求庫,如果你只進行基本的爬蟲網頁抓取,那么urllib2足夠用。

?Requests的slogen是“Requests is the only Non-GMO HTTP library for Python, safe for humanconsumption”,相對urllib2,requests使用起來確實簡潔很多,并且自帶json解析器。?

如果你需要爬取異步加載的動態(tài)網站,可以學習瀏覽器抓包分析真實請求或者學習Selenium來實現自動化。?對于爬蟲來說,在能夠爬取到數據地前提下當然是越快越好,顯然傳統(tǒng)地同步代碼不能滿足我們對速度地需求。
(ps:據國外數據統(tǒng)計:正常情況下我們請求同一個頁面 100次的話,最少也得花費 30秒,但使用異步請求同一個頁面 100次的話,只需要要 3秒左右。)

aiohttp是你值得擁有的一個庫aiohttp的異步操作借助于async/await關鍵字的寫法變得更加簡潔,架構更加清晰。使用異步請求庫進行數據抓取時,會大大提高效率。


?你可以根據自己的需求選擇合適的請求庫,但建議先從python自帶的urllib開始,當然,你可以在學習時嘗試所有的方式,以便更了解這些庫的使用。

?推薦請求庫資源:

urllib2文檔???https://dwz.cn/8hEGdsqD

requests文檔???http://t.cn/8Fq1aX

rselenium文檔??https://dwz.cn/DlL9j9hf

aiohttp文檔???https://dwz.cn/hvndbuB4




2、解析數據
爬蟲爬取的是爬取頁面指定的部分數據值,而不是整個頁面的數據,這時往往需要先進行數據的解析再進行存儲。
從web上采集回來的數據的數據類型有很多種,主要有HTML、 javascript、JSON、XML等格式。

?解析庫的使用等價于在HTML中查找需要的信息時時使用正則,能夠更加快捷地定位到具體的元素獲取相應的信息。

?Css選擇器是一種快速定位元素的方法。

?Pyqurrey使用lxml解析器進行快速在xml和html文檔上操作,它提供了和jQuery類似的語法來解析HTML文檔,支持CSS選擇器,使用非常方便。
Beautiful Soup是借助網頁的結構和屬性等特性來解析網頁的工具,能自動轉換編碼。支持Python標準庫中的HTML解析器,還支持一些第三方的解析器。
Xpath最初是用來搜尋XML文檔的,但是它同樣適用于?HTML?文檔的搜索。它提供了超過 100 個內建的函數。這些函數用于字符串值、數值、日期和時間比較、節(jié)點和 QName 處理、序列處理、邏輯值等等,并且XQuery和XPointer都構建于XPath基礎上。
Re正則表達式通常被用來檢索、替換那些符合某個模式(規(guī)則)的文本。

?個人認為前端基礎比較扎實的,用pyquery是最方便的,beautifulsoup也不錯,re速度比較快,但是寫正則比較麻煩。

當然了,既然用python,肯定還是自己用著方便最好。

?推薦解析器資源:

pyquery??https://dwz.cn/1EwUKsEG

Beautifulsoup??http://t.im/ddfv

xpath教程???http://t.im/ddg2

re文檔???http://t.im/ddg6


3、數據存儲?

當爬回來的數據量較小時,你可以使用文檔的形式來儲存,支持TXT、json、csv等格式。

?但當數據量變大,文檔的儲存方式就行不通了,所以掌握一種數據庫是必須的。

?Mysql?作為關系型數據庫的代表,擁有較為成熟的體系,成熟度很高,可以很好地去存儲一些數據,但在在海量數據處理的時候效率會顯著變慢,已然滿足不了某些大數據的處理要求。

?MongoDB已經流行了很長一段時間,相對于MySQL ,MongoDB可以方便你去存儲一些非結構化的數據,比如各種評論的文本,圖片的鏈接等等。

你也可以利用PyMongo,更方便地在Python中操作MongoDB。

因為這里要用到的數據庫知識其實非常簡單,主要是數據如何入庫、如何進行提取,在需要的時候再學習就行。

?Redis是一個不折不扣的內存數據庫Redis 支持的數據結構豐富,包括hash、set、list等。數據全部存在內存,訪問速度快,可以存儲大量的數據,一般應用于分布式爬蟲的數據存儲當中。
推薦數據庫資源:

mysql文檔??https://dev.mysql.com/doc/

mongoDB文檔???https://docs.mongodb.com/? ???
redis文???https://redis.io/documentation/


??工程化爬蟲


掌握前面的技術你就可以實現輕量級的爬蟲,一般量級的數據和代碼基本沒有問題。

但是在面對復雜情況的時候表現不盡人意,此時,強大的爬蟲框架就非常有用了。

?首先是出身名門的Apache頂級項目Nutch,它提供了我們運行自己的搜索引擎所需的全部工具。

支持分布式抓取,并有Hadoop支持,可以進行多機分布抓取,存儲和索引。

另外很吸引人的一點在于,它提供了一種插件框架,使得其對各種網頁內容的解析、各種數據的采集、查詢、集群、過濾等功能能夠方便的進行擴展。

?其次是GitHub上眾人star的scrapy,scrapy是一個功能非常強大的爬蟲框架。

它不僅能便捷地構建request,還有強大的 selector 能夠方便地解析 response,然而它最讓人驚喜的還是它超高的性能,讓你可以將爬蟲工程化、模塊化。

學會scrapy,你可以自己去搭建一些爬蟲框架,你就基本具備爬蟲工程師的思維了。

?最后Pyspider作為人氣飆升的國內大神開發(fā)的框架,滿足了絕大多數Python爬蟲的需求 —— 定向抓取,結構化化解析。

它能在瀏覽器界面上進行腳本的編寫,功能的調度和爬取結果的實時查看,后端使用常用的數據庫進行爬取結果的存儲等。

其功能強大到更像一個產品而不是一個框架。

?這是三個最有代表性的爬蟲框架,它們都有遠超別人的有點,比如Nutch天生的搜索引擎解決方案、Pyspider產品級的WebUI、Scrapy最靈活的定制化爬取。

建議先從最接近爬蟲本質的框架scary學起,再去接觸人性化的Pyspider,為搜索引擎而生的Nutch。

?推薦爬蟲框架資源:

Nutch文檔?http://nutch.apache.org/

scary文檔??https://scrapy.org/

pyspider文檔?http://t.im/ddgj


??反爬及應對措施


爬蟲像一只蟲子,密密麻麻地爬行到每一個角落獲取數據,蟲子或許無害,但總是不受歡迎的。?

因為爬蟲技術造成的大量IP訪問網站侵占帶寬資源、以及用戶隱私和知識產權等危害,很多互聯網企業(yè)都會花大力氣進行“反爬蟲”。

?你的爬蟲會遭遇比如被網站封IP、比如各種奇怪的驗證碼、userAgent訪問限制、各種動態(tài)加載等等。
常見的反爬蟲措施有:
·通過Headers反爬蟲

·基于用戶行為反爬蟲

·基于動態(tài)頁面的反爬蟲

·字體反爬.....


遇到這些反爬蟲的手段,當然還需要一些高級的技巧來應對,控制訪問頻率盡量保證一次加載頁面加載且數據請求最小化,每個頁面訪問增加時間間隔;

禁止cookie可以防止可能使用cookies識別爬蟲的網站來ban掉我們;

根據瀏覽器正常訪問的請求頭對爬蟲的請求頭進行修改盡可能和瀏覽器保持一致等等。

往往網站在高效開發(fā)和反爬蟲之間會偏向前者,這也為爬蟲提供了空間,掌握這些應對反爬蟲的技巧,絕大部分的網站已經難不到你了。


??分布式爬蟲?


爬取基本數據已經沒有問題,還能使用框架來面對一寫較為復雜的數據,此時,就算遇到反爬,你也掌握了一些反反爬技巧。

?你的瓶頸會集中到爬取海量數據的效率,這個時候相信你會很自然地接觸到一個很厲害的名字:分布式爬蟲。?

分布式這個東西,聽起來很恐怖,但其實就是利用多線程的原理將多臺主機組合起來,共同完成一個爬取任務,需要你掌握?Scrapy +Redis+MQ+Celery?這些工具

?Scrapy 前面我們說過了,用于做基本的頁面爬取, Redis 則用來存儲要爬取的網頁隊列,也就是任務隊列。

scarpy-redis就是用來在scrapy中實現分布式的組件,通過它可以快速實現簡單分布式爬蟲程序。

由于在高并發(fā)環(huán)境下,由于來不及同步處理,請求往往會發(fā)生堵塞,通過使用消息隊列MQ,我們可以異步處理請求,從而緩解系統(tǒng)的壓力。

RabbitMQ本身支持很多的協(xié)議:AMQP,XMPP, SMTP,STOMP,使的它變的非常重量級,更適合于企業(yè)級的開發(fā)。

Scrapy-rabbitmq-link是可以讓你從RabbitMQ 消息隊列中取到URL并且分發(fā)給Scrapy spiders的組件。

?Celery?是一個簡單、靈活且可靠的,處理大量消息的分布式系統(tǒng)。支持 RabbitMQ、Redis 甚至其他數據庫系統(tǒng)作為其消息代理中間件, 在處理異步任務、任務調度、處理定時任務、分布式調度等場景表現良好。

所以分布式爬蟲只是聽起來有些可怕,也不過如此。當你能夠寫分布式的爬蟲的時候,那么你可以去嘗試打造一些基本的爬蟲架構了,實現一些更加自動化的數據獲取。

?推薦分布式資源:

scrapy-redis文檔?http://t.im/ddgk

scrapy-rabbitmq文檔??http://t.im/ddgn

celery文檔??http://t.im/ddgr



你看,通過這條完整的學習路徑走下來,爬蟲對你來說根本不是問題。

因為爬蟲這種技術,既不需要你系統(tǒng)地精通一門語言,也不需要多么高深的數據庫技術。
解鎖每一個部分的知識點并且有針對性的去學習,走完這一條順暢的學習之路,你就能掌握python爬蟲。

?

一鍵三連,后臺可私1分享python全套資料哦?。?



yyds!Python爬蟲的完整學習框架的評論 (共 條)

分享到微博請遵守國家法律
托里县| 云霄县| 漾濞| 蓬安县| 云林县| 庄浪县| 赣榆县| 荔波县| 栾川县| 新安县| 玉环县| 东乡县| 丹东市| 利辛县| 双牌县| 孟连| 盐城市| 金乡县| 敦煌市| 确山县| 鲁山县| 青冈县| 神木县| 云南省| 万源市| 卢湾区| 仙游县| 铜陵市| 泰顺县| 任丘市| 江孜县| 石林| 德兴市| 延寿县| 望都县| 惠安县| 得荣县| 万盛区| 德令哈市| 丽江市| 鲁甸县|