版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Python商業(yè)數(shù)據(jù)分析網(wǎng)絡(luò)數(shù)據(jù)抓取15.1案例背景數(shù)據(jù)獲取是數(shù)據(jù)分析的基礎(chǔ)。互聯(lián)網(wǎng)上積累了海量信息和知識(shí),蘊(yùn)含著豐富的商業(yè)和學(xué)術(shù)價(jià)值。電商網(wǎng)站的售后評(píng)論信息有助于企業(yè)識(shí)別用戶偏好和產(chǎn)品缺陷;線上二手房?jī)r(jià)格的長(zhǎng)期監(jiān)測(cè)有助于預(yù)測(cè)區(qū)域房?jī)r(jià)變動(dòng);投資論壇中對(duì)股票的討論有助于識(shí)別投資者情緒;微博等社交媒體中的用戶發(fā)帖能體現(xiàn)民眾對(duì)某熱點(diǎn)事件的看法。本案例將介紹如何利用Python編程,從互聯(lián)網(wǎng)上進(jìn)行數(shù)據(jù)抓取。15.1案例背景學(xué)完本案例,你應(yīng)該能夠:解釋HTML語(yǔ)言的作用,了解其與編程語(yǔ)言的區(qū)別;描述HTML語(yǔ)言中的標(biāo)簽、元素、屬性;了解在瀏覽器中查看并定位網(wǎng)頁(yè)HTML代碼的方式;使用urllib和Requests庫(kù)實(shí)現(xiàn)HTML源代碼獲取,BeautifulSoup庫(kù)實(shí)現(xiàn)目標(biāo)數(shù)據(jù)定位;了解針對(duì)異步加載技術(shù)的數(shù)據(jù)抓取方法。15.1背景與問(wèn)題寫在前面:合理進(jìn)行數(shù)據(jù)抓取,不得干擾服務(wù)器正常運(yùn)行;關(guān)注數(shù)據(jù)抓取的邏輯和技術(shù),而不是記憶個(gè)別網(wǎng)站的抓取規(guī)律;遵守相關(guān)法律法規(guī),對(duì)提供數(shù)據(jù)的網(wǎng)站心存敬意和尊重。15.2.1數(shù)據(jù)抓取的基本思想想一想:數(shù)據(jù)抓取有哪些步驟?假設(shè)你用手動(dòng)的方式,抓取股票價(jià)格信息:15.2.1數(shù)據(jù)抓取的基本思想想一想:數(shù)據(jù)抓取有哪些步驟?假設(shè)你用手動(dòng)的方式,抓取股票價(jià)格信息:找到包含該信息的網(wǎng)頁(yè)(如東方財(cái)富網(wǎng));打開(kāi)網(wǎng)頁(yè)找到股價(jià)信息的位置;將股價(jià)信息復(fù)制到數(shù)據(jù)文件中;(如果要抓取多只股票的信息)跳轉(zhuǎn)到下一只股票。15.2.1數(shù)據(jù)抓取的基本思想我們將在程序編寫中一一實(shí)現(xiàn)這些功能。困難:程序并不能向人一樣理解某些概念;什么是標(biāo)題欄?什么是上方?什么是左上角?這需要我們從程序去重新認(rèn)識(shí)網(wǎng)頁(yè),需要了解:網(wǎng)頁(yè)的基礎(chǔ)知識(shí);瀏覽器原理。15.2.2 網(wǎng)頁(yè)基礎(chǔ)知識(shí)和瀏覽器原理網(wǎng)頁(yè)是源代碼在瀏覽器下顯示的結(jié)果。代碼經(jīng)過(guò)IE、Safari等瀏覽器,變成用戶看到的可視化界面。新浪網(wǎng)部分源代碼15.2.2 網(wǎng)頁(yè)基礎(chǔ)知識(shí)和瀏覽器原理網(wǎng)頁(yè)主要由HTML(HyperTextMarkupLanguage)代碼編寫。類比HTML與Python15.2.3 HTML語(yǔ)言簡(jiǎn)介HTML是一種標(biāo)記語(yǔ)言;簡(jiǎn)要介紹HTML標(biāo)簽、元素、屬性等相關(guān)概念,通過(guò)實(shí)例說(shuō)明HTML語(yǔ)言和網(wǎng)頁(yè)中數(shù)據(jù)的聯(lián)系;可以利用W3school等線上資源深入學(xué)習(xí)。15.2.3 HTML語(yǔ)言簡(jiǎn)介標(biāo)記語(yǔ)言通過(guò)標(biāo)記標(biāo)簽對(duì)文本進(jìn)行編輯;可以用Sublime等程序來(lái)編寫HTML代碼,并將后綴保存為“.html”;使用瀏覽器打開(kāi),就會(huì)看到可視化界面。HTML示例及運(yùn)行結(jié)果15.2.3 HTML語(yǔ)言簡(jiǎn)介h:標(biāo)題(Headline);h后面的數(shù)字表示層級(jí),數(shù)字越小層級(jí)越高、字號(hào)越大;p:段落(Paragraph)。<h3></h3>、<p></p>等用來(lái)修飾的標(biāo)記稱為HTML標(biāo)簽;一般成對(duì)出現(xiàn),表示被修飾內(nèi)容的開(kāi)始和結(jié)束;結(jié)束標(biāo)簽帶有“/”符號(hào);從開(kāi)始到結(jié)束標(biāo)簽的所有內(nèi)容被稱為HTML元素。HTML元素可以嵌套。15.2.3 HTML語(yǔ)言簡(jiǎn)介其他值得關(guān)注的標(biāo)簽:超鏈接<a>:a表示錨點(diǎn)(Anchor);結(jié)構(gòu)示例:<ahref="網(wǎng)址">被修飾內(nèi)容</a>我們更關(guān)注跳轉(zhuǎn)的網(wǎng)址,即“href=”之后的內(nèi)容;這部分信息成為HTML元素的屬性;屬性包括屬性名和屬性值;這里href是屬性名,等號(hào)右側(cè)的網(wǎng)址是屬性值。15.2.3 HTML語(yǔ)言簡(jiǎn)介其他值得關(guān)注的標(biāo)簽:列表相關(guān)標(biāo)簽<ol>、<ul>、<li>:ol表示有序列表,ordered
list;ul表示無(wú)序列表,unordered
list;li表示列表中的元素,listitem。有序列表和無(wú)序列表15.2.3 HTML語(yǔ)言簡(jiǎn)介實(shí)戰(zhàn)環(huán)節(jié):從HTML中找到需要的數(shù)據(jù)。以鏈家二手房網(wǎng)站為例:網(wǎng)頁(yè)上有哪些信息?15.2.3 HTML語(yǔ)言簡(jiǎn)介實(shí)戰(zhàn)環(huán)節(jié):從HTML中找到需要的數(shù)據(jù)。以鏈家二手房網(wǎng)站為例:網(wǎng)頁(yè)上有哪些信息?總價(jià)單價(jià)位置信息房屋信息每套房源的具體信息頁(yè)的網(wǎng)址15.2.3 HTML語(yǔ)言簡(jiǎn)介實(shí)戰(zhàn)環(huán)節(jié):從HTML中找到需要的數(shù)據(jù)。以鏈家二手房網(wǎng)站為例:進(jìn)入每一套房源,我們還可以看到更多信息。15.2.3 HTML語(yǔ)言簡(jiǎn)介我們從列表信息頁(yè)開(kāi)始。找到源代碼:在瀏覽器中某頁(yè)面的空白處單擊鼠標(biāo)右鍵,選擇“查看網(wǎng)頁(yè)源代碼”;或使用“開(kāi)發(fā)者工具”功能;可以在具體的數(shù)據(jù)上,使用瀏覽器的“檢查”或“審查元素”功能,快速定位目標(biāo)數(shù)據(jù)。15.2.3 HTML語(yǔ)言簡(jiǎn)介從圖中可以看到哪些所需的數(shù)據(jù)?這些數(shù)據(jù)所在的HTML元素有哪些特征?鏈家源代碼示例15.2.3 HTML語(yǔ)言簡(jiǎn)介從鏈家案例中可以看出,不同的房源背后的代碼結(jié)構(gòu)基本相似。相似界面背后存在相似的源代碼,是實(shí)現(xiàn)自動(dòng)數(shù)據(jù)抓取的基礎(chǔ)。15.3用Python實(shí)現(xiàn)數(shù)據(jù)爬取從HTML視角理解數(shù)據(jù)抓取流程15.3.1 獲得網(wǎng)頁(yè)HTML源代碼工具:urllib模塊;或Requests等第三方庫(kù)。以u(píng)rllib模塊的request.urlopen()函數(shù)為例:返回的是http.client.HTTPResponse類,是本次請(qǐng)求的響應(yīng);狀態(tài)碼是200,即請(qǐng)求成功。常見(jiàn)狀態(tài)碼釋義:200
–
OK;400
-BadRequest;403-Forbidden;404-NotFound
。15.3.1 獲得網(wǎng)頁(yè)HTML源代碼使用HTTPResponse.read()方法讀取響應(yīng)內(nèi)容。由于返回的是bytes形式的源代碼,需要使用decode()函數(shù)進(jìn)行解碼,使得中文正常顯示。
解碼前解碼后15.3.1 獲得網(wǎng)頁(yè)HTML源代碼請(qǐng)同學(xué)們自主嘗試獲取其他網(wǎng)頁(yè)的源代碼。當(dāng)urlopen未能順利獲得源代碼:有時(shí)需要使用ssl模塊解決證書異常的問(wèn)題;網(wǎng)頁(yè)被壓縮,可以使用Requests自動(dòng)解壓縮。15.3.1 獲得網(wǎng)頁(yè)HTML源代碼使用Requests抓取騰訊首頁(yè)示例:優(yōu)點(diǎn):自動(dòng)解壓解碼;自動(dòng)處理SSL整數(shù)問(wèn)題。返回對(duì)象:requests.models.Response類;.status_code:狀態(tài)碼;.text:字符串格式的源代碼;.encoding:網(wǎng)頁(yè)編碼格式。可以使用response.encoding='utf-8'
來(lái)手動(dòng)定義。15.3.2 通過(guò)HTML標(biāo)簽定位數(shù)據(jù)獲取源代碼后,使用BeautifulSoup定位目標(biāo)數(shù)據(jù)。需要用pip預(yù)安裝BeautifulSoup4和lxml解析器。15.3.2 通過(guò)HTML標(biāo)簽定位數(shù)據(jù)實(shí)例演示:使用BeautifulSoup4從北京鏈家二手房網(wǎng)頁(yè)中提取數(shù)據(jù)。獲取源代碼并轉(zhuǎn)為BeautifulSoup對(duì)象。15.3.2 通過(guò)HTML標(biāo)簽定位數(shù)據(jù)實(shí)例演示:使用BeautifulSoup4從北京鏈家二手房網(wǎng)頁(yè)中提取數(shù)據(jù)。獲取源代碼并轉(zhuǎn)為BeautifulSoup對(duì)象。使用find()或find_all()提取特定的HTML元素。find()方法用來(lái)查找符合條件的第一個(gè)元素;find_all()方法用來(lái)查找符合條件的所有元素,以列表形式返回。可以看出該網(wǎng)頁(yè)共有547個(gè)<a>元素。15.3.2 通過(guò)HTML標(biāo)簽定位數(shù)據(jù)實(shí)例演示:使用BeautifulSoup4從北京鏈家二手房網(wǎng)頁(yè)中提取數(shù)據(jù)。獲取源代碼并轉(zhuǎn)為BeautifulSoup對(duì)象。使用find()或find_all()提取特定的HTML元素。在find()或find_all()方法中加入條件:從網(wǎng)頁(yè)中可以看出,所有房源名稱均在class="title"的<a>元素中;加入屬性約束class
=
"title"。注:由于class是Python語(yǔ)言的保留字段,需要在代碼中寫成class_可以看出共找到30個(gè)結(jié)果,對(duì)應(yīng)本頁(yè)的30套房源。15.3.2 通過(guò)HTML標(biāo)簽定位數(shù)據(jù)實(shí)例演示:使用BeautifulSoup4從北京鏈家二手房網(wǎng)頁(yè)中提取數(shù)據(jù)。獲取源代碼并轉(zhuǎn)為BeautifulSoup對(duì)象。使用find()或find_all()提取特定的HTML元素。在find()或find_all()方法中加入條件。使用string屬性提取內(nèi)容,或提取屬性值。房源名稱是<a>元素的內(nèi)容,用string提??;房源詳情頁(yè)網(wǎng)址是href屬性的值。要確保找到的規(guī)律是提取目標(biāo)數(shù)據(jù)的“充要條件”。15.3.2 通過(guò)HTML標(biāo)簽定位數(shù)據(jù)請(qǐng)同學(xué)們自己嘗試提取房源的下列信息:房源名稱;房源詳情頁(yè)網(wǎng)址;房源總價(jià);房源單價(jià);位置信息;房源信息;房源標(biāo)簽;……如果遇到困難,請(qǐng)思考:提取數(shù)據(jù)的條件對(duì)不對(duì)?結(jié)果數(shù)量和預(yù)期一致嗎?是否混入了不符合要求的元素?string無(wú)法處理件套元素的內(nèi)容,可以嘗試結(jié)合contents和get_text()方法。15.3.2 通過(guò)HTML標(biāo)簽定位數(shù)據(jù)參考代碼如下:圖中顯示了如何提取第一套房源的信息,如何使用for循環(huán),遍歷提取30套房源的信息?15.3.3 處理“翻頁(yè)”數(shù)據(jù)網(wǎng)址變化是最常見(jiàn)的翻頁(yè)方式:點(diǎn)擊鏈家二手房的第2-10頁(yè),觀察網(wǎng)址變化。異步加載網(wǎng)址不改變的翻頁(yè)方式;如微博、QQ空間等;使用開(kāi)發(fā)者工具中的網(wǎng)絡(luò)監(jiān)控功能,找到后臺(tái)實(shí)際訪問(wèn)的網(wǎng)址。15.3.3 處理“翻頁(yè)”數(shù)據(jù)異步加載示例:打開(kāi)Chrome瀏覽器的網(wǎng)絡(luò)監(jiān)控工具。打開(kāi)微博首頁(yè),翻動(dòng)界面,觀察不斷加載的新網(wǎng)址。需要耐心尋找其中有規(guī)律的內(nèi)容;得到的網(wǎng)址不是一成不變的;如果網(wǎng)站改版升級(jí),需要重新尋找。15.4數(shù)據(jù)抓取技巧合理進(jìn)行數(shù)據(jù)抓取,不得干擾服務(wù)器正常運(yùn)行。務(wù)必加入暫停機(jī)制;time.sleep()。更改請(qǐng)求頭:編碼、cookie、用戶代理使用請(qǐng)求頭
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度新型農(nóng)用拖拉機(jī)進(jìn)口代理銷售合同4篇
- 二零二五年度ktv室內(nèi)裝修消防設(shè)計(jì)審核合同3篇
- 二零二五年度教育培訓(xùn)機(jī)構(gòu)退款合同協(xié)議正規(guī)范本2025年版
- 二零二五年度WPS文檔定制化租賃合同修訂版3篇
- 二零二五年度充電樁安裝工程節(jié)能評(píng)估合同4篇
- 2025年個(gè)人住宅買賣合同(含物業(yè)交割)2篇
- 2025年度智慧停車場(chǎng)運(yùn)營(yíng)管理承包合同4篇
- 2025年度水暖工程安全質(zhì)量監(jiān)督及驗(yàn)收合同
- 二零二五年度房產(chǎn)抵押貸款風(fēng)險(xiǎn)管理與服務(wù)合同4篇
- 2025年度暖氣片銷售區(qū)域代理合同模板
- 非ST段抬高型急性冠脈綜合征診斷和治療指南(2024)解讀
- 煤礦反三違培訓(xùn)課件
- 向流程設(shè)計(jì)要效率
- 安全文明施工的管理要點(diǎn)
- 2024年中國(guó)航空發(fā)動(dòng)機(jī)集團(tuán)招聘筆試參考題庫(kù)含答案解析
- 當(dāng)代中外公司治理典型案例剖析(中科院研究生課件)
- 動(dòng)力管道設(shè)計(jì)手冊(cè)-第2版
- 2022年重慶市中考物理試卷A卷(附答案)
- Python繪圖庫(kù)Turtle詳解(含豐富示例)
- 煤礦機(jī)電設(shè)備檢修技術(shù)規(guī)范完整版
- 榆林200MWp并網(wǎng)光伏發(fā)電項(xiàng)目可行性研究報(bào)告
評(píng)論
0/150
提交評(píng)論