大家好,今天小編來為大家解答以下的問題,關(guān)于python數(shù)據(jù)分析基礎(chǔ),c++適合多大的孩子學(xué)這個(gè)很多人還不知道,現(xiàn)在讓我們一起來看看吧!
Python爬蟲和數(shù)據(jù)分析需要哪些知識(shí)儲(chǔ)備,自學(xué)順序是怎樣的
數(shù)據(jù)是決策的原材料,高質(zhì)量的數(shù)據(jù)價(jià)值不菲,如何挖掘原材料成為互聯(lián)網(wǎng)時(shí)代的先驅(qū),掌握信息的源頭,就能比別人更快一步。
大數(shù)據(jù)時(shí)代,互聯(lián)網(wǎng)成為大量信息的載體,機(jī)械的復(fù)制粘貼不再實(shí)用,不僅耗時(shí)費(fèi)力還極易出錯(cuò),這時(shí)爬蟲的出現(xiàn)解放了大家的雙手,以其高速爬行、定向抓取資源的能力獲得了大家的青睞。
爬蟲變得越來越流行,不僅因?yàn)樗軌蚩焖倥廊『A康臄?shù)據(jù),更因?yàn)橛衟ython這樣簡單易用的語言使得爬蟲能夠快速上手。
對(duì)于小白來說,爬蟲可能是一件非常復(fù)雜、技術(shù)門檻很高的事情,但掌握正確的方法,在短時(shí)間內(nèi)做到能夠爬取主流網(wǎng)站的數(shù)據(jù),其實(shí)非常容易實(shí)現(xiàn),但建議你從一開始就要有一個(gè)具體的目標(biāo)。
在目標(biāo)的驅(qū)動(dòng)下,你的學(xué)習(xí)才會(huì)更加精準(zhǔn)和高效。那些所有你認(rèn)為必須的前置知識(shí),都是可以在完成目標(biāo)的過程中學(xué)到的。
基于python爬蟲,我們整理了一個(gè)完整的學(xué)習(xí)框架:
篩選和甄別學(xué)習(xí)哪些知識(shí),在哪里去獲取資源是許多初學(xué)者共同面臨的問題。
接下來,我們將學(xué)習(xí)框架進(jìn)行拆解,分別對(duì)每個(gè)部分進(jìn)行詳細(xì)介紹和推薦一些相關(guān)資源,告訴你學(xué)什么、怎么學(xué)、在哪里學(xué)。
爬蟲簡介爬蟲是一種按照一定的規(guī)則,自動(dòng)地抓取萬維網(wǎng)信息的程序或者腳本。
這個(gè)定義看起來很生硬,我們換一種更好理解的解釋:
我們作為用戶獲取網(wǎng)絡(luò)數(shù)據(jù)的方式是瀏覽器提交請(qǐng)求->下載網(wǎng)頁代碼->解析/渲染成頁面;而爬蟲的方式是模擬瀏覽器發(fā)送請(qǐng)求->下載網(wǎng)頁代碼->只提取有用的數(shù)據(jù)->存放于數(shù)據(jù)庫或文件中。
爬蟲與我們的區(qū)別是,爬蟲程序只提取網(wǎng)頁代碼中對(duì)我們有用的數(shù)據(jù),并且爬蟲抓取速度快,量級(jí)大。
隨著數(shù)據(jù)的規(guī)模化,爬蟲獲取數(shù)據(jù)的高效性能越來越突出,能夠做的事情越來越多:
市場分析:電商分析、商圈分析、一二級(jí)市場分析等市場監(jiān)控:電商、新聞、房源監(jiān)控等商機(jī)發(fā)現(xiàn):招投標(biāo)情報(bào)發(fā)現(xiàn)、客戶資料發(fā)掘、企業(yè)客戶發(fā)現(xiàn)等進(jìn)行爬蟲學(xué)習(xí),首先要懂得是網(wǎng)頁,那些我們?nèi)庋劭梢姷墓怩r亮麗的網(wǎng)頁是由HTML、css、javascript等網(wǎng)頁源碼所支撐起來的。
這些源碼被瀏覽器所識(shí)別轉(zhuǎn)換成我們看到的網(wǎng)頁,這些源碼里面必定存在著很多規(guī)律,我們的爬蟲就能按照這樣的規(guī)律來爬取需要的信息。
無規(guī)矩不成方圓,Robots協(xié)議就是爬蟲中的規(guī)矩,它告訴爬蟲和搜索引擎哪些頁面可以抓取,哪些不可以抓取。
通常是一個(gè)叫作robots.txt的文本文件,放在網(wǎng)站的根目錄下。
輕量級(jí)爬蟲“獲取數(shù)據(jù)——解析數(shù)據(jù)——存儲(chǔ)數(shù)據(jù)”是爬蟲的三部曲,大部分爬蟲都是按這樣的流程來進(jìn)行,這其實(shí)也是模擬了我們使用瀏覽器獲取網(wǎng)頁信息的過程。
1、獲取數(shù)據(jù)
爬蟲第一步操作就是模擬瀏覽器向服務(wù)器發(fā)送請(qǐng)求,基于python,你不需要了解從數(shù)據(jù)的實(shí)現(xiàn),HTTP、TCP、IP的網(wǎng)絡(luò)傳輸結(jié)構(gòu),一直到服務(wù)器響應(yīng)和應(yīng)達(dá)的原理,因?yàn)閜ython提供了功能齊全的類庫來幫我們完成這些請(qǐng)求。
Python自帶的標(biāo)準(zhǔn)庫urllib2使用的較多,它是python內(nèi)置的HTTP請(qǐng)求庫,如果你只進(jìn)行基本的爬蟲網(wǎng)頁抓取,那么urllib2足夠用。
Requests的slogen是“RequestsistheonlyNon-GMOHTTPlibraryforPython,safeforhumanconsumption”,相對(duì)urllib2,requests使用起來確實(shí)簡潔很多,并且自帶json解析器。
如果你需要爬取異步加載的動(dòng)態(tài)網(wǎng)站,可以學(xué)習(xí)瀏覽器抓包分析真實(shí)請(qǐng)求或者學(xué)習(xí)Selenium來實(shí)現(xiàn)自動(dòng)化。
對(duì)于爬蟲來說,在能夠爬取到數(shù)據(jù)地前提下當(dāng)然是越快越好,顯然傳統(tǒng)地同步代碼不能滿足我們對(duì)速度地需求。
(ps:據(jù)國外數(shù)據(jù)統(tǒng)計(jì):正常情況下我們請(qǐng)求同一個(gè)頁面100次的話,最少也得花費(fèi)30秒,但使用異步請(qǐng)求同一個(gè)頁面100次的話,只需要要3秒左右。)
aiohttp是你值得擁有的一個(gè)庫,aiohttp的異步操作借助于async/await關(guān)鍵字的寫法變得更加簡潔,架構(gòu)更加清晰。使用異步請(qǐng)求庫進(jìn)行數(shù)據(jù)抓取時(shí),會(huì)大大提高效率。
你可以根據(jù)自己的需求選擇合適的請(qǐng)求庫,但建議先從python自帶的urllib開始,當(dāng)然,你可以在學(xué)習(xí)時(shí)嘗試所有的方式,以便更了解這些庫的使用。
推薦請(qǐng)求庫資源:
urllib2文檔:https://dwz.cn/8hEGdsqDrequests文檔:http://t.cn/8Fq1aXrselenium文檔:https://dwz.cn/DlL9j9hfaiohttp文檔:https://dwz.cn/hvndbuB42、解析數(shù)據(jù)
爬蟲爬取的是爬取頁面指定的部分?jǐn)?shù)據(jù)值,而不是整個(gè)頁面的數(shù)據(jù),這時(shí)往往需要先進(jìn)行數(shù)據(jù)的解析再進(jìn)行存儲(chǔ)。
從web上采集回來的數(shù)據(jù)的數(shù)據(jù)類型有很多種,主要有HTML、javascript、JSON、XML等格式。解析庫的使用等價(jià)于在HTML中查找需要的信息時(shí)時(shí)使用正則,能夠更加快捷地定位到具體的元素獲取相應(yīng)的信息。Css選擇器是一種快速定位元素的方法。Pyqurrey使用lxml解析器進(jìn)行快速在xml和html文檔上操作,它提供了和jQuery類似的語法來解析HTML文檔,支持CSS選擇器,使用非常方便。
BeautifulSoup是借助網(wǎng)頁的結(jié)構(gòu)和屬性等特性來解析網(wǎng)頁的工具,能自動(dòng)轉(zhuǎn)換編碼。支持Python標(biāo)準(zhǔn)庫中的HTML解析器,還支持一些第三方的解析器。
Xpath最初是用來搜尋XML文檔的,但是它同樣適用于HTML文檔的搜索。它提供了超過100個(gè)內(nèi)建的函數(shù)。這些函數(shù)用于字符串值、數(shù)值、日期和時(shí)間比較、節(jié)點(diǎn)和QName處理、序列處理、邏輯值等等,并且XQuery和XPointer都構(gòu)建于XPath基礎(chǔ)上。
Re正則表達(dá)式通常被用來檢索、替換那些符合某個(gè)模式(規(guī)則)的文本。個(gè)人認(rèn)為前端基礎(chǔ)比較扎實(shí)的,用pyquery是最方便的,beautifulsoup也不錯(cuò),re速度比較快,但是寫正則比較麻煩。當(dāng)然了,既然用python,肯定還是自己用著方便最好。
推薦解析器資源:
pyqueryhttps://dwz.cn/1EwUKsEGBeautifulsouphttp://t.im/ddfvxpath教程http://t.im/ddg2re文檔http://t.im/ddg63、數(shù)據(jù)存儲(chǔ)
當(dāng)爬回來的數(shù)據(jù)量較小時(shí),你可以使用文檔的形式來儲(chǔ)存,支持TXT、json、csv等格式。但當(dāng)數(shù)據(jù)量變大,文檔的儲(chǔ)存方式就行不通了,所以掌握一種數(shù)據(jù)庫是必須的。
Mysql作為關(guān)系型數(shù)據(jù)庫的代表,擁有較為成熟的體系,成熟度很高,可以很好地去存儲(chǔ)一些數(shù)據(jù),但在在海量數(shù)據(jù)處理的時(shí)候效率會(huì)顯著變慢,已然滿足不了某些大數(shù)據(jù)的處理要求。
MongoDB已經(jīng)流行了很長一段時(shí)間,相對(duì)于MySQL,MongoDB可以方便你去存儲(chǔ)一些非結(jié)構(gòu)化的數(shù)據(jù),比如各種評(píng)論的文本,圖片的鏈接等等。你也可以利用PyMongo,更方便地在Python中操作MongoDB。因?yàn)檫@里要用到的數(shù)據(jù)庫知識(shí)其實(shí)非常簡單,主要是數(shù)據(jù)如何入庫、如何進(jìn)行提取,在需要的時(shí)候再學(xué)習(xí)就行。
Redis是一個(gè)不折不扣的內(nèi)存數(shù)據(jù)庫,Redis支持的數(shù)據(jù)結(jié)構(gòu)豐富,包括hash、set、list等。數(shù)據(jù)全部存在內(nèi)存,訪問速度快,可以存儲(chǔ)大量的數(shù)據(jù),一般應(yīng)用于分布式爬蟲的數(shù)據(jù)存儲(chǔ)當(dāng)中。
推薦數(shù)據(jù)庫資源:
mysql文檔https://dev.mysql.com/doc/mongoDB文檔https://docs.mongodb.com/redis文檔https://redis.io/documentation/工程化爬蟲掌握前面的技術(shù)你就可以實(shí)現(xiàn)輕量級(jí)的爬蟲,一般量級(jí)的數(shù)據(jù)和代碼基本沒有問題。
但是在面對(duì)復(fù)雜情況的時(shí)候表現(xiàn)不盡人意,此時(shí),強(qiáng)大的爬蟲框架就非常有用了。
首先是出身名門的Apache頂級(jí)項(xiàng)目Nutch,它提供了我們運(yùn)行自己的搜索引擎所需的全部工具。支持分布式抓取,并有Hadoop支持,可以進(jìn)行多機(jī)分布抓取,存儲(chǔ)和索引。另外很吸引人的一點(diǎn)在于,它提供了一種插件框架,使得其對(duì)各種網(wǎng)頁內(nèi)容的解析、各種數(shù)據(jù)的采集、查詢、集群、過濾等功能能夠方便的進(jìn)行擴(kuò)展。
其次是GitHub上眾人star的scrapy,scary是一個(gè)功能非常強(qiáng)大的爬蟲框架。它不僅能便捷地構(gòu)建request,還有強(qiáng)大的selector能夠方便地解析response,然而它最讓人驚喜的還是它超高的性能,讓你可以將爬蟲工程化、模塊化。學(xué)會(huì)scrapy,你可以自己去搭建一些爬蟲框架,你就基本具備爬蟲工程師的思維了。
最后Pyspider作為人氣飆升的國內(nèi)大神開發(fā)的框架,滿足了絕大多數(shù)Python爬蟲的需求——定向抓取,結(jié)構(gòu)化化解析。它能在瀏覽器界面上進(jìn)行腳本的編寫,功能的調(diào)度和爬取結(jié)果的實(shí)時(shí)查看,后端使用常用的數(shù)據(jù)庫進(jìn)行爬取結(jié)果的存儲(chǔ)等。其功能強(qiáng)大到更像一個(gè)產(chǎn)品而不是一個(gè)框架。這是三個(gè)最有代表性的爬蟲框架,它們都有遠(yuǎn)超別人的有點(diǎn),比如Nutch天生的搜索引擎解決方案、Pyspider產(chǎn)品級(jí)的WebUI、Scrapy最靈活的定制化爬取。建議先從最接近爬蟲本質(zhì)的框架scary學(xué)起,再去接觸人性化的Pyspider,為搜索引擎而生的Nutch。
推薦爬蟲框架資源:
Nutch文檔http://nutch.apache.org/scary文檔https://scrapy.org/pyspider文檔http://t.im/ddgj反爬及應(yīng)對(duì)措施爬蟲像一只蟲子,密密麻麻地爬行到每一個(gè)角落獲取數(shù)據(jù),蟲子或許無害,但總是不受歡迎的。因?yàn)榕老x技術(shù)造成的大量IP訪問網(wǎng)站侵占帶寬資源、以及用戶隱私和知識(shí)產(chǎn)權(quán)等危害,很多互聯(lián)網(wǎng)企業(yè)都會(huì)花大力氣進(jìn)行“反爬蟲”。
你的爬蟲會(huì)遭遇比如被網(wǎng)站封IP、比如各種奇怪的驗(yàn)證碼、userAgent訪問限制、各種動(dòng)態(tài)加載等等。
常見的反爬蟲措施有:
通過Headers反爬蟲基于用戶行為反爬蟲基于動(dòng)態(tài)頁面的反爬蟲字體反爬.....遇到這些反爬蟲的手段,當(dāng)然還需要一些高級(jí)的技巧來應(yīng)對(duì),控制訪問頻率盡量保證一次加載頁面加載且數(shù)據(jù)請(qǐng)求最小化,每個(gè)頁面訪問增加時(shí)間間隔;
禁止cookie可以防止可能使用cookies識(shí)別爬蟲的網(wǎng)站來ban掉我們;
根據(jù)瀏覽器正常訪問的請(qǐng)求頭對(duì)爬蟲的請(qǐng)求頭進(jìn)行修改,盡可能和瀏覽器保持一致等等。
往往網(wǎng)站在高效開發(fā)和反爬蟲之間會(huì)偏向前者,這也為爬蟲提供了空間,掌握這些應(yīng)對(duì)反爬蟲的技巧,絕大部分的網(wǎng)站已經(jīng)難不到你了。
分布式爬蟲爬取基本數(shù)據(jù)已經(jīng)沒有問題,還能使用框架來面對(duì)一寫較為復(fù)雜的數(shù)據(jù),此時(shí),就算遇到反爬,你也掌握了一些反反爬技巧。
你的瓶頸會(huì)集中到爬取海量數(shù)據(jù)的效率,這個(gè)時(shí)候相信你會(huì)很自然地接觸到一個(gè)很厲害的名字:分布式爬蟲。
分布式這個(gè)東西,聽起來很恐怖,但其實(shí)就是利用多線程的原理將多臺(tái)主機(jī)組合起來,共同完成一個(gè)爬取任務(wù),需要你掌握Scrapy+Redis+MQ+Celery這些工具。
Scrapy前面我們說過了,用于做基本的頁面爬取,Redis則用來存儲(chǔ)要爬取的網(wǎng)頁隊(duì)列,也就是任務(wù)隊(duì)列。
scarpy-redis就是用來在scrapy中實(shí)現(xiàn)分布式的組件,通過它可以快速實(shí)現(xiàn)簡單分布式爬蟲程序。
由于在高并發(fā)環(huán)境下,由于來不及同步處理,請(qǐng)求往往會(huì)發(fā)生堵塞,通過使用消息隊(duì)列MQ,我們可以異步處理請(qǐng)求,從而緩解系統(tǒng)的壓力。
RabbitMQ本身支持很多的協(xié)議:AMQP,XMPP,SMTP,STOMP,使的它變的非常重量級(jí),更適合于企業(yè)級(jí)的開發(fā)。
Scrapy-rabbitmq-link是可以讓你從RabbitMQ消息隊(duì)列中取到URL并且分發(fā)給Scrapyspiders的組件。Celery是一個(gè)簡單、靈活且可靠的,處理大量消息的分布式系統(tǒng)。支持RabbitMQ、Redis甚至其他數(shù)據(jù)庫系統(tǒng)作為其消息代理中間件,在處理異步任務(wù)、任務(wù)調(diào)度、處理定時(shí)任務(wù)、分布式調(diào)度等場景表現(xiàn)良好。
所以分布式爬蟲只是聽起來有些可怕,也不過如此。當(dāng)你能夠?qū)懛植际降呐老x的時(shí)候,那么你可以去嘗試打造一些基本的爬蟲架構(gòu)了,實(shí)現(xiàn)一些更加自動(dòng)化的數(shù)據(jù)獲取。
推薦分布式資源:
scrapy-redis文檔http://t.im/ddgkscrapy-rabbitmq文檔http://t.im/ddgncelery文檔http://t.im/ddgr你看,通過這條完整的學(xué)習(xí)路徑走下來,爬蟲對(duì)你來說根本不是問題。
因?yàn)榕老x這種技術(shù),既不需要你系統(tǒng)地精通一門語言,也不需要多么高深的數(shù)據(jù)庫技術(shù)。
解鎖每一個(gè)部分的知識(shí)點(diǎn)并且有針對(duì)性的去學(xué)習(xí),走完這一條順暢的學(xué)習(xí)之路,你就能掌握python爬蟲。
以上便是本文內(nèi)容,有幫助點(diǎn)贊喜歡支持一下吧。。
Python如何快速創(chuàng)建強(qiáng)大的探索性數(shù)據(jù)分析可視化
快速創(chuàng)建,當(dāng)然是用庫啰。
主流的庫:pandas、seaborn、matplotlib。
另外plotlib和bokeh也可以了解下。
pandaspandas是基礎(chǔ),數(shù)據(jù)分析可視化,首先要分析,然后才談得上可視化。
(圖片來源:pandas官網(wǎng))
pandas的主要概念是DataFrame和Serie。其中用的最多的是DataFrame。DataFrame你可以簡單理解為一張表格,每行是一個(gè)觀測(observation)/實(shí)例(instance),每列是一個(gè)特征(feature)/屬性(property)。理解了DataFrame,Serie也就不難理解,DataFrame的每行你都可以把它看成是一個(gè)Serie.
然后pandas提供了各種數(shù)據(jù)分析的方法,處理DataFrame和Serie.
繪圖庫然后,seaborn、matplotlib、plotly、bokeh都是繪圖庫,用來繪制各種可視化的圖形。(當(dāng)然,其實(shí)pandas也可以用來繪圖,但是pandas的繪圖能力比較孱弱,一般不用。)
seaborn是基于matplotlib的,后出轉(zhuǎn)精,API用起來比matplotlib簡潔舒服。不過seaborn并不能完全替代matplotlib,有的時(shí)候還是需要使用matplotlib。
(圖片來源:seaborn官網(wǎng))
seaborn和matplotlib都是繪制圖片,而plotly和bokeh可以做出可交互的圖片。當(dāng)然,這也就意味著,為了實(shí)現(xiàn)交互功能,你需要自己搭一個(gè)服務(wù)(bokeh),或者是找平臺(tái)host(plotly提供收費(fèi)host)。
會(huì)計(jì)專業(yè)想學(xué)python,想懂?dāng)?shù)據(jù)處理,有什么可以推薦的書籍
1、《Pythonfordataanalysis》
這本書涵蓋了ipythonnotebook、Numpy、Scipy和Pandas包的使用等,只要掌握了python語法就可以學(xué)習(xí)。
2、《PythonCookbook》
這本書介紹了Python應(yīng)用在各個(gè)領(lǐng)域中的一些使用技巧和方法。
3、《Python數(shù)據(jù)處理》
教你如何利用語法簡單、容易上手的Python輕松處理數(shù)據(jù)。
加米谷大數(shù)據(jù)開發(fā)9月零基礎(chǔ)班,已開課可試聽;大數(shù)據(jù)分析10月零基礎(chǔ)班,預(yù)報(bào)名中...
相關(guān):
大佬們推薦的Python書單匯總
https://www.toutiao.com/i6649565082718044680/
《Python金融大數(shù)據(jù)分析》有用嗎
數(shù)據(jù)分析重在目的和方法,對(duì)應(yīng)到技術(shù)層面就是模型和算法,語言只是實(shí)現(xiàn)模型和算法的一種路徑,書還是可以好好看看的!
python數(shù)據(jù)分析工具
pandabears是Python的一個(gè)數(shù)據(jù)分析包的軟件,pandabears這個(gè)軟件工具為了解決數(shù)據(jù)分析任務(wù)而創(chuàng)建的,pandabears這款軟件納入了大量庫和一些標(biāo)準(zhǔn)的數(shù)據(jù)模型,提供了高效地操作大型數(shù)據(jù)集所需的工具,是使Python成為強(qiáng)大而高效的數(shù)據(jù)分析環(huán)境的主要因素之一。
好了,文章到這里就結(jié)束啦,如果本次分享的python數(shù)據(jù)分析基礎(chǔ)和c++適合多大的孩子學(xué)問題對(duì)您有所幫助,還望關(guān)注下本站哦!