《Python商業(yè)數(shù)據(jù)分析》案例:網(wǎng)絡(luò)數(shù)據(jù)抓取_第1頁
《Python商業(yè)數(shù)據(jù)分析》案例:網(wǎng)絡(luò)數(shù)據(jù)抓取_第2頁
《Python商業(yè)數(shù)據(jù)分析》案例:網(wǎng)絡(luò)數(shù)據(jù)抓取_第3頁
《Python商業(yè)數(shù)據(jù)分析》案例:網(wǎng)絡(luò)數(shù)據(jù)抓取_第4頁
《Python商業(yè)數(shù)據(jù)分析》案例:網(wǎng)絡(luò)數(shù)據(jù)抓取_第5頁
已閱讀5頁,還剩33頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

Python商業(yè)數(shù)據(jù)分析網(wǎng)絡(luò)數(shù)據(jù)抓取15.1案例背景數(shù)據(jù)獲取是數(shù)據(jù)分析的基礎(chǔ)?;ヂ?lián)網(wǎng)上積累了海量信息和知識,蘊含著豐富的商業(yè)和學(xué)術(shù)價值。電商網(wǎng)站的售后評論信息有助于企業(yè)識別用戶偏好和產(chǎn)品缺陷;線上二手房價格的長期監(jiān)測有助于預(yù)測區(qū)域房價變動;投資論壇中對股票的討論有助于識別投資者情緒;微博等社交媒體中的用戶發(fā)帖能體現(xiàn)民眾對某熱點事件的看法。本案例將介紹如何利用Python編程,從互聯(lián)網(wǎng)上進行數(shù)據(jù)抓取。15.1案例背景學(xué)完本案例,你應(yīng)該能夠:解釋HTML語言的作用,了解其與編程語言的區(qū)別;描述HTML語言中的標(biāo)簽、元素、屬性;了解在瀏覽器中查看并定位網(wǎng)頁HTML代碼的方式;使用urllib和Requests庫實現(xiàn)HTML源代碼獲取,BeautifulSoup庫實現(xiàn)目標(biāo)數(shù)據(jù)定位;了解針對異步加載技術(shù)的數(shù)據(jù)抓取方法。15.1背景與問題寫在前面:合理進行數(shù)據(jù)抓取,不得干擾服務(wù)器正常運行;關(guān)注數(shù)據(jù)抓取的邏輯和技術(shù),而不是記憶個別網(wǎng)站的抓取規(guī)律;遵守相關(guān)法律法規(guī),對提供數(shù)據(jù)的網(wǎng)站心存敬意和尊重。15.2.1數(shù)據(jù)抓取的基本思想想一想:數(shù)據(jù)抓取有哪些步驟?假設(shè)你用手動的方式,抓取股票價格信息:15.2.1數(shù)據(jù)抓取的基本思想想一想:數(shù)據(jù)抓取有哪些步驟?假設(shè)你用手動的方式,抓取股票價格信息:找到包含該信息的網(wǎng)頁(如東方財富網(wǎng));打開網(wǎng)頁找到股價信息的位置;將股價信息復(fù)制到數(shù)據(jù)文件中;(如果要抓取多只股票的信息)跳轉(zhuǎn)到下一只股票。15.2.1數(shù)據(jù)抓取的基本思想我們將在程序編寫中一一實現(xiàn)這些功能。困難:程序并不能向人一樣理解某些概念;什么是標(biāo)題欄?什么是上方?什么是左上角?這需要我們從程序去重新認(rèn)識網(wǎng)頁,需要了解:網(wǎng)頁的基礎(chǔ)知識;瀏覽器原理。15.2.2 網(wǎng)頁基礎(chǔ)知識和瀏覽器原理網(wǎng)頁是源代碼在瀏覽器下顯示的結(jié)果。代碼經(jīng)過IE、Safari等瀏覽器,變成用戶看到的可視化界面。新浪網(wǎng)部分源代碼15.2.2 網(wǎng)頁基礎(chǔ)知識和瀏覽器原理網(wǎng)頁主要由HTML(HyperTextMarkupLanguage)代碼編寫。類比HTML與Python15.2.3 HTML語言簡介HTML是一種標(biāo)記語言;簡要介紹HTML標(biāo)簽、元素、屬性等相關(guān)概念,通過實例說明HTML語言和網(wǎng)頁中數(shù)據(jù)的聯(lián)系;可以利用W3school等線上資源深入學(xué)習(xí)。15.2.3 HTML語言簡介標(biāo)記語言通過標(biāo)記標(biāo)簽對文本進行編輯;可以用Sublime等程序來編寫HTML代碼,并將后綴保存為“.html”;使用瀏覽器打開,就會看到可視化界面。HTML示例及運行結(jié)果15.2.3 HTML語言簡介h:標(biāo)題(Headline);h后面的數(shù)字表示層級,數(shù)字越小層級越高、字號越大;p:段落(Paragraph)。<h3></h3>、<p></p>等用來修飾的標(biāo)記稱為HTML標(biāo)簽;一般成對出現(xiàn),表示被修飾內(nèi)容的開始和結(jié)束;結(jié)束標(biāo)簽帶有“/”符號;從開始到結(jié)束標(biāo)簽的所有內(nèi)容被稱為HTML元素。HTML元素可以嵌套。15.2.3 HTML語言簡介其他值得關(guān)注的標(biāo)簽:超鏈接<a>:a表示錨點(Anchor);結(jié)構(gòu)示例:<ahref="網(wǎng)址">被修飾內(nèi)容</a>我們更關(guān)注跳轉(zhuǎn)的網(wǎng)址,即“href=”之后的內(nèi)容;這部分信息成為HTML元素的屬性;屬性包括屬性名和屬性值;這里href是屬性名,等號右側(cè)的網(wǎng)址是屬性值。15.2.3 HTML語言簡介其他值得關(guān)注的標(biāo)簽:列表相關(guān)標(biāo)簽<ol>、<ul>、<li>:ol表示有序列表,ordered

list;ul表示無序列表,unordered

list;li表示列表中的元素,listitem。有序列表和無序列表15.2.3 HTML語言簡介實戰(zhàn)環(huán)節(jié):從HTML中找到需要的數(shù)據(jù)。以鏈家二手房網(wǎng)站為例:網(wǎng)頁上有哪些信息?15.2.3 HTML語言簡介實戰(zhàn)環(huán)節(jié):從HTML中找到需要的數(shù)據(jù)。以鏈家二手房網(wǎng)站為例:網(wǎng)頁上有哪些信息?總價單價位置信息房屋信息每套房源的具體信息頁的網(wǎng)址15.2.3 HTML語言簡介實戰(zhàn)環(huán)節(jié):從HTML中找到需要的數(shù)據(jù)。以鏈家二手房網(wǎng)站為例:進入每一套房源,我們還可以看到更多信息。15.2.3 HTML語言簡介我們從列表信息頁開始。找到源代碼:在瀏覽器中某頁面的空白處單擊鼠標(biāo)右鍵,選擇“查看網(wǎng)頁源代碼”;或使用“開發(fā)者工具”功能;可以在具體的數(shù)據(jù)上,使用瀏覽器的“檢查”或“審查元素”功能,快速定位目標(biāo)數(shù)據(jù)。15.2.3 HTML語言簡介從圖中可以看到哪些所需的數(shù)據(jù)?這些數(shù)據(jù)所在的HTML元素有哪些特征?鏈家源代碼示例15.2.3 HTML語言簡介從鏈家案例中可以看出,不同的房源背后的代碼結(jié)構(gòu)基本相似。相似界面背后存在相似的源代碼,是實現(xiàn)自動數(shù)據(jù)抓取的基礎(chǔ)。15.3用Python實現(xiàn)數(shù)據(jù)爬取從HTML視角理解數(shù)據(jù)抓取流程15.3.1 獲得網(wǎng)頁HTML源代碼工具:urllib模塊;或Requests等第三方庫。以urllib模塊的request.urlopen()函數(shù)為例:返回的是http.client.HTTPResponse類,是本次請求的響應(yīng);狀態(tài)碼是200,即請求成功。常見狀態(tài)碼釋義:200

OK;400

-BadRequest;403-Forbidden;404-NotFound

。15.3.1 獲得網(wǎng)頁HTML源代碼使用HTTPResponse.read()方法讀取響應(yīng)內(nèi)容。由于返回的是bytes形式的源代碼,需要使用decode()函數(shù)進行解碼,使得中文正常顯示。

解碼前解碼后15.3.1 獲得網(wǎng)頁HTML源代碼請同學(xué)們自主嘗試獲取其他網(wǎng)頁的源代碼。當(dāng)urlopen未能順利獲得源代碼:有時需要使用ssl模塊解決證書異常的問題;網(wǎng)頁被壓縮,可以使用Requests自動解壓縮。15.3.1 獲得網(wǎng)頁HTML源代碼使用Requests抓取騰訊首頁示例:優(yōu)點:自動解壓解碼;自動處理SSL整數(shù)問題。返回對象:requests.models.Response類;.status_code:狀態(tài)碼;.text:字符串格式的源代碼;.encoding:網(wǎng)頁編碼格式??梢允褂胷esponse.encoding='utf-8'

來手動定義。15.3.2 通過HTML標(biāo)簽定位數(shù)據(jù)獲取源代碼后,使用BeautifulSoup定位目標(biāo)數(shù)據(jù)。需要用pip預(yù)安裝BeautifulSoup4和lxml解析器。15.3.2 通過HTML標(biāo)簽定位數(shù)據(jù)實例演示:使用BeautifulSoup4從北京鏈家二手房網(wǎng)頁中提取數(shù)據(jù)。獲取源代碼并轉(zhuǎn)為BeautifulSoup對象。15.3.2 通過HTML標(biāo)簽定位數(shù)據(jù)實例演示:使用BeautifulSoup4從北京鏈家二手房網(wǎng)頁中提取數(shù)據(jù)。獲取源代碼并轉(zhuǎn)為BeautifulSoup對象。使用find()或find_all()提取特定的HTML元素。find()方法用來查找符合條件的第一個元素;find_all()方法用來查找符合條件的所有元素,以列表形式返回??梢钥闯鲈摼W(wǎng)頁共有547個<a>元素。15.3.2 通過HTML標(biāo)簽定位數(shù)據(jù)實例演示:使用BeautifulSoup4從北京鏈家二手房網(wǎng)頁中提取數(shù)據(jù)。獲取源代碼并轉(zhuǎn)為BeautifulSoup對象。使用find()或find_all()提取特定的HTML元素。在find()或find_all()方法中加入條件:從網(wǎng)頁中可以看出,所有房源名稱均在class="title"的<a>元素中;加入屬性約束class

=

"title"。注:由于class是Python語言的保留字段,需要在代碼中寫成class_可以看出共找到30個結(jié)果,對應(yīng)本頁的30套房源。15.3.2 通過HTML標(biāo)簽定位數(shù)據(jù)實例演示:使用BeautifulSoup4從北京鏈家二手房網(wǎng)頁中提取數(shù)據(jù)。獲取源代碼并轉(zhuǎn)為BeautifulSoup對象。使用find()或find_all()提取特定的HTML元素。在find()或find_all()方法中加入條件。使用string屬性提取內(nèi)容,或提取屬性值。房源名稱是<a>元素的內(nèi)容,用string提??;房源詳情頁網(wǎng)址是href屬性的值。要確保找到的規(guī)律是提取目標(biāo)數(shù)據(jù)的“充要條件”。15.3.2 通過HTML標(biāo)簽定位數(shù)據(jù)請同學(xué)們自己嘗試提取房源的下列信息:房源名稱;房源詳情頁網(wǎng)址;房源總價;房源單價;位置信息;房源信息;房源標(biāo)簽;……如果遇到困難,請思考:提取數(shù)據(jù)的條件對不對?結(jié)果數(shù)量和預(yù)期一致嗎?是否混入了不符合要求的元素?string無法處理件套元素的內(nèi)容,可以嘗試結(jié)合contents和get_text()方法。15.3.2 通過HTML標(biāo)簽定位數(shù)據(jù)參考代碼如下:圖中顯示了如何提取第一套房源的信息,如何使用for循環(huán),遍歷提取30套房源的信息?15.3.3 處理“翻頁”數(shù)據(jù)網(wǎng)址變化是最常見的翻頁方式:點擊鏈家二手房的第2-10頁,觀察網(wǎng)址變化。異步加載網(wǎng)址不改變的翻頁方式;如微博、QQ空間等;使用開發(fā)者工具中的網(wǎng)絡(luò)監(jiān)控功能,找到后臺實際訪問的網(wǎng)址。15.3.3 處理“翻頁”數(shù)據(jù)異步加載示例:打開Chrome瀏覽器的網(wǎng)絡(luò)監(jiān)控工具。打開微博首頁,翻動界面,觀察不斷加載的新網(wǎng)址。需要耐心尋找其中有規(guī)律的內(nèi)容;得到的網(wǎng)址不是一成不變的;如果網(wǎng)站改版升級,需要重新尋找。15.4數(shù)據(jù)抓取技巧合理進行數(shù)據(jù)抓取,不得干擾服務(wù)器正常運行。務(wù)必加入暫停機制;time.sleep()。更改請求頭:編碼、cookie、用戶代理使用請求頭

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論