《python金融大數(shù)據(jù)分析》課件-任務(wù)三 Python標(biāo)準(zhǔn)庫爬取金融數(shù)據(jù)_第1頁
《python金融大數(shù)據(jù)分析》課件-任務(wù)三 Python標(biāo)準(zhǔn)庫爬取金融數(shù)據(jù)_第2頁
《python金融大數(shù)據(jù)分析》課件-任務(wù)三 Python標(biāo)準(zhǔn)庫爬取金融數(shù)據(jù)_第3頁
《python金融大數(shù)據(jù)分析》課件-任務(wù)三 Python標(biāo)準(zhǔn)庫爬取金融數(shù)據(jù)_第4頁
《python金融大數(shù)據(jù)分析》課件-任務(wù)三 Python標(biāo)準(zhǔn)庫爬取金融數(shù)據(jù)_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

任務(wù)三Python標(biāo)準(zhǔn)庫爬取金融數(shù)據(jù)知識(shí)目標(biāo)1.了解python爬取數(shù)據(jù)的步驟2.熟悉python爬取數(shù)據(jù)的方法3.掌握將爬取的數(shù)據(jù)保存到本地的方法技能目標(biāo)能夠python爬取網(wǎng)頁上所需要的金融數(shù)據(jù)。學(xué)習(xí)目標(biāo)目

錄CONTENTS任務(wù)要求1必備知識(shí)2任務(wù)實(shí)施3任務(wù)小結(jié)41

任務(wù)要求 任務(wù)要求如何利用python,獲取中國銀行外匯牌價(jià)數(shù)據(jù),并保存在本地?2

必備知識(shí) 思考:手動(dòng)上網(wǎng)的操作過程?第一步:選擇并啟動(dòng)瀏覽器第二步:在瀏覽器的地址欄中敲入網(wǎng)址,回車,就可以得到這個(gè)網(wǎng)頁的內(nèi)容第三步:復(fù)制粘貼或者通過其他手動(dòng)錄入表格的形式將數(shù)據(jù)保存到本地1打開網(wǎng)站瀏覽器指的是360、Google、Chrome、firefox、UC等等思考:手動(dòng)上網(wǎng)的操作過程?第一步:啟動(dòng)瀏覽器,打開瀏覽器窗口1打開網(wǎng)站在python中這種模塊有很多,比如python標(biāo)準(zhǔn)庫中自帶的一個(gè)標(biāo)準(zhǔn)模塊,叫做urllib.request。其中:“.”是用來劃分層級(jí)的。網(wǎng)抓程序模擬瀏覽器指的是360、Google、Chrome、firefox、UC等等所謂的瀏覽器就是一個(gè)提供互聯(lián)網(wǎng)訪問功能的模塊什么是url呢?它的全稱是統(tǒng)一資源定位符(UniformResourceLocator),俗稱“網(wǎng)址”。我們常說的在互聯(lián)網(wǎng)上查看的每一個(gè)網(wǎng)頁、每一個(gè)圖片,每一個(gè)視頻,都是互聯(lián)網(wǎng)上的一個(gè)資源,所以訪問這個(gè)資源時(shí)使用的地址就被稱為統(tǒng)一資源定位符。思考:手動(dòng)上網(wǎng)的操作過程?第一步:啟動(dòng)瀏覽器,打開瀏覽器窗口第二步:在瀏覽器的地址欄中敲入網(wǎng)址,回車,就可以得到這個(gè)網(wǎng)頁的內(nèi)容1打開網(wǎng)站網(wǎng)抓程序模擬通過urllib.request中的函數(shù)urlopen打開網(wǎng)址,獲取網(wǎng)頁內(nèi)容比如:urlopen('https://www.baidu.com')思考:手動(dòng)上網(wǎng)的操作過程?第一步:啟動(dòng)瀏覽器,打開瀏覽器窗口第二步:在瀏覽器的地址欄中敲入網(wǎng)址,回車,就可以得到這個(gè)網(wǎng)頁的內(nèi)容1打開網(wǎng)站網(wǎng)抓程序模擬通過python數(shù)據(jù)分析模塊中的函數(shù)將獲取到的數(shù)據(jù)保存到本地excel中比如:df.to_excel('路徑/名稱.xlsx')第三步:復(fù)制粘貼或者通過其他手動(dòng)錄入表格的形式將數(shù)據(jù)保存到本地打開網(wǎng)站1解析網(wǎng)頁內(nèi)容2爬取所需數(shù)據(jù)3Python爬取數(shù)據(jù)的基本思路一打開網(wǎng)站#加載包,從urllib.request中導(dǎo)入urlopen這個(gè)函數(shù)(這一步相當(dāng)于選擇并打開瀏覽器)fromurllib.requestimporturlopen由于urllib是python自帶的模塊,因此不需要專門安裝。#輸入網(wǎng)址,打開網(wǎng)頁r=urlopen('/sourcedb/whpj/')urlopen()函數(shù)返回一個(gè)HttpResponse對象,用于對所得到的網(wǎng)頁進(jìn)行各種操作。#HttpResponse.read()用于讀取網(wǎng)頁的文本內(nèi)容,不執(zhí)行任何編碼轉(zhuǎn)換,直接返回一個(gè)bytes對象(字節(jié)數(shù)據(jù))c=r.read()print(c)1解析網(wǎng)頁內(nèi)容2我在瀏覽器里看到的,可是有表格、有圖片,規(guī)規(guī)整整的文字,為什么這個(gè)程序抓下來的卻是亂七八糟的一堆混亂的字符呢?輸出結(jié)果:b'<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd">\n<htmlxmlns="/1999/xhtml">\n<head>\n<metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>\n<title>\xe4\xb8\xad\xe5\x9b\xbd\xe9\x93\xb6\xe8\xa1\x8c_\xe9\x87\x91\xe8\x9e\x8d\xe5\xb8\x82\xe5\x9c\xba_\xe5\xa4\x96\xe6\xb1\x87\xe7\x89\x8c\xe4\xbb\xb7</title>\n<metacontent=""name="keywords"/>\n<metacontent=""name="description"/>\n<linkhref="/images/boc2013_common.css"rel="stylesheet"type="text/css">\n<linkhref="/images/boc2013_reset.css"rel="stylesheet"type="text/css">\n<linkhref="/images/boc2013_pages.css"rel="stylesheet"type="text/css">\n<scriptlanguage="JavaScript"src="/head_620.js"></script>\n<scriptlanguage="JavaScript"src="/bottom_591.js"></script>\n<scriptlanguage=javascriptsrc="../images/boc2013_search.js"></script>\n<scriptlanguage=javascriptsrc="../images/WebCalendar.js"></script>\n</head>\n\n<body>\n<divclass="wrapper">\n\t<!--\xe5\xa4\xb4\xe9\x83\xa8\xe6\xa8\xa1\xe6\x9d\xbfstart-->\n\t\t\t<scriptlanguage="JavaScript">\n\t\t\t<!--\n\t\t\tcreateTop();\n\t\t\t//-->\n解析網(wǎng)頁內(nèi)容2Charset解析網(wǎng)頁內(nèi)容#Byte類型的對象都有decode方法,可以按照指定的編碼標(biāo)準(zhǔn)將該字節(jié)流轉(zhuǎn)換字符串。s=c.decode('utf-8')print(s)2輸出結(jié)果:<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="/1999/xhtml"><head><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><title>中國銀行_金融市場_外匯牌價(jià)</title><metacontent=""name="keywords"/><metacontent=""name="description"/><linkhref="/images/boc2013_common.css"rel="stylesheet"type="text/css"><linkhref="/images/boc2013_reset.css"rel="stylesheet"type="text/css"><linkhref="/images/boc2013_pages.css"rel="stylesheet"type="text/css"><scriptlanguage="JavaScript"src="/head_620.js"></script><scriptlanguage="JavaScript"src="/bottom_591.js"></script>……………與網(wǎng)頁源代碼內(nèi)容一致!在網(wǎng)頁空白區(qū)域,點(diǎn)擊鼠標(biāo)右鍵——查看源代碼!解析網(wǎng)頁內(nèi)容2輸出結(jié)果:<head><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><title>中國銀行_金融市場_外匯牌價(jià)</title><metacontent=""name="keywords"/><metacontent=""name="description"/><linkhref="/images/boc2013_common.css"rel="stylesheet"type="text/css"><linkhref="/images/boc2013_reset.css"rel="stylesheet"type="text/css"><linkhref="/images/boc2013_pages.css"rel="stylesheet"type="text/css"><scriptlanguage="JavaScript"src="/head_620.js"></script><scriptlanguage="JavaScript"src="/bottom_591.js"></script><scriptlanguage=javascriptsrc="../images/boc2013_search.js"></script><scriptlanguage=javascriptsrc="../images/WebCalendar.js"></script></head>思考:什么是網(wǎng)頁?網(wǎng)頁是一個(gè)包含HTML標(biāo)簽的純文本文件,只不過擴(kuò)展名為“html”或“htm”而非“txt”。HTML:超文本標(biāo)記語言,專用于編寫WEB網(wǎng)頁。1.網(wǎng)頁文件包括兩部分內(nèi)容:一部分是<>內(nèi)的“標(biāo)簽”;另一部分是在<>之外的可以顯示在瀏覽器中的文字。<>內(nèi)的內(nèi)容不會(huì)顯示出來,只是規(guī)定<>外的內(nèi)容的格式解析網(wǎng)頁內(nèi)容2例:<fontsize=28color=“red”>我喜歡張傳娜老師</font>網(wǎng)頁文件包括兩部分內(nèi)容:一部分是<>內(nèi)的“標(biāo)簽”;另一部分是在<>之外的可以顯示在瀏覽器中的文字。<>內(nèi)的內(nèi)容不會(huì)顯示出來,只是規(guī)定<>外的內(nèi)容的格式字體大小=28字體設(shè)定結(jié)束顏色=紅我喜歡張傳娜老師解析網(wǎng)頁內(nèi)容22.HTML網(wǎng)頁中的這些標(biāo)簽往往都是成對出現(xiàn),比如<table></table>、<tr></tr>、<td></td>等。一般情況下,我們需要的重要數(shù)據(jù)都是放在某一對標(biāo)簽里的。<tablecellpadding="0"align="left"cellspacing="0"width="100%"><tr><td>阿聯(lián)酋迪拉姆</td><td></td><td>177.93</td><td></td><td>191.15</td><td>183.53</td><tdclass="pjrq">2022.08.1605:30:00</td><td>05:30:00</td></tr></table> 表格行<table>表示表格開始,</table>表示表格結(jié)束<tr>表示行開始,</tr>表示行結(jié)束<td>表示列開始,</td>列結(jié)束列爬取所需數(shù)據(jù)3要爬取網(wǎng)頁中的匯率數(shù)據(jù),分為三步:第一步:找到所需<table>第二步:找到該<table>內(nèi)部的每個(gè)<tr>第三步:找到該<table>內(nèi)部每個(gè)<tr>中的每個(gè)<td>爬取所需數(shù)據(jù)#安裝beautifulsoupWin+R調(diào)取cmd命令窗口,輸入:pipinstallbs4#加載beautifulsoupfrombs4importBeautifulSoup#將前面r.read()的對象c交給BeautifulSoup進(jìn)行分析。參數(shù)features='lxml'設(shè)定解析器bs_obj=BeautifulSoup(c,features='lxml')BeautifulSoup對象:相當(dāng)于一個(gè)“網(wǎng)頁分析器”對象,提供有很多種方法,用于在指定網(wǎng)頁中找到標(biāo)簽、提取信息。3使用beautifulsoup(美味湯)精準(zhǔn)獲取所需信息爬取所需數(shù)據(jù)第一步:找到所需<table>1.BeautifulSoup.find(標(biāo)簽名):在這個(gè)BeautifulSoup.find對象所指向的網(wǎng)頁中,按指定名稱查找標(biāo)簽。因此,只要把標(biāo)簽的名字“table”,告訴它,它就能夠幫我們找到。比如:bs1.find('table')3#使用find函數(shù)找到'table'標(biāo)簽t=bs_obj.find('table')print(t)輸出結(jié)果:<tablecellpadding="0"cellspacing="0"width="100%"><tr><tdalign="right"width="8%">起始時(shí)間:</td><tdalign="left"width="100px;"><divclass="search_bar"style="float:left;width:100px;margin-left:10px;"><inputclass="search_ipt"id="erectDate"name="erectDate"onclick="newCalendar(2001,2022,0).show(this);"style="width:100px;"type="text"/></div></td><tdalign="right"width="8%">結(jié)束時(shí)間:</td><tdalign="left"width="100px;"><divclass="search_bar"style="float:left;width:100px;margin-left:10px;"><inputclass="search_ipt"id="nothing"name="nothing"onclick="newCalendar(2001,2022,0).show(this);"style="width:100px;"type="text"/></div></td>find函數(shù)找到的是第一個(gè)出現(xiàn)的table標(biāo)簽爬取所需數(shù)據(jù)第一步:找到所需<table>2.除了“find”方法之外,BeautifulSoup還有一個(gè)“find_all”這個(gè)方法,顧名思義就是找出表格中所有指定的這個(gè)標(biāo)簽。比如我們現(xiàn)在寫find_all('table'),那么他返回的這個(gè)t就是一個(gè)列表,列表中第一個(gè)元素是第一個(gè)table,而第二個(gè)元素就是網(wǎng)頁中的第二個(gè)table,也就是我們想看到的這個(gè)貨幣數(shù)據(jù)。3#使用find函數(shù)找到所有‘table’標(biāo)簽t=bs_obj.find_all('table')print(t)find_all(‘table’)的返回值,包含網(wǎng)頁中所有表格標(biāo)簽<table></table>t=[<table></table>,<table></table>…<table></table>]下標(biāo):[0]下標(biāo):[1]爬取所需數(shù)據(jù)第一步:找到所需<table>3.請先用find_all找到所有的表格——一個(gè)大的列表,接下來,用下標(biāo)“[1]”找到這個(gè)列表中的第二個(gè)元素,也就是我們想要的這張表格,把它賦值給t,那么運(yùn)行之后變量t就代表了我們想要的這個(gè)第二張表格的全部內(nèi)容。3#使用find_all()函數(shù)找到所有’table’標(biāo)簽,將第二個(gè)賦值給tt=bs_obj.find_all('table')[1]print(t)<tablealign="left"cellpadding="0"cellspacing="0"width="100%"><tr><th>貨幣名稱</th><th>現(xiàn)匯買入價(jià)</th><th>現(xiàn)鈔買入價(jià)</th><th>現(xiàn)匯賣出價(jià)</th><th>現(xiàn)鈔賣出價(jià)</th><th>中行折算價(jià)</th><th>發(fā)布日期</th><th>發(fā)布時(shí)間</th></tr><tr><td>阿聯(lián)酋迪拉姆</td><td></td><td>177.93</td><td></td><td>191.15</td><td>183.53</td><tdclass="pjrq">2022.08.1605:30:00</td><td>05:30:00</td></tr>爬取所需數(shù)據(jù)第一步:找到所需<table>3.請先用find_all找到所有的表格——一個(gè)大的列表,接下來,用下標(biāo)“[1]”找到這個(gè)列表中的第二個(gè)元素,也就是我們想要的這張表格,把它賦值給t,那么運(yùn)行之后變量t就代表了我們想要的這個(gè)第二張表格的全部內(nèi)容。3#使用find_all()函數(shù)找到所有’table’標(biāo)簽,將第二個(gè)賦值給tt=bs_obj.find_all('table')[1]這里得到的t,也就是“find”方法返回的這個(gè)結(jié)果,它本身并不是字符串,而是BeautifulSoup這個(gè)模塊中自己定義的一種叫做“tag”的對象,也就是標(biāo)簽類型的對象。標(biāo)簽對象(tag):find()或find_all()找到的標(biāo)簽,都是tag類型的對象。該類對象提供了很多方法和屬性,以便在這些標(biāo)簽內(nèi)部繼續(xù)查找和處理內(nèi)容,而其中有一個(gè)方法也叫做”find_all”。爬取所需數(shù)據(jù)第二步:找到該<table>內(nèi)部的每個(gè)<tr>1.用find_all找到所有的行——一個(gè)大的列表,這里包含我們需要的所有數(shù)據(jù)!3#使用find_all()函數(shù)找到所有’tr’標(biāo)簽,將第二個(gè)賦值給all_trall_tr=t.find_all('tr')print(all_tr)[<tr><th>貨幣名稱</th><th>現(xiàn)匯買入價(jià)</th><th>現(xiàn)鈔買入價(jià)</th><th>現(xiàn)匯賣出價(jià)</th><th>現(xiàn)鈔賣出價(jià)</th><th>中行折算價(jià)</th><th>發(fā)布日期</th><th>發(fā)布時(shí)間</th></tr>,<tr><td>阿聯(lián)酋迪拉姆</td><td></td><td>178.1</td><td></td><td>191.33</td><td>184.78</td><tdclass="pjrq">2022.08.1718:07:32</td><td>18:07:32</td></tr>,<tr>標(biāo)題行,無貨幣信息,需刪掉,否則后面程序會(huì)報(bào)錯(cuò)爬取所需數(shù)據(jù)第二步:找到該<table>內(nèi)部的每個(gè)<tr>2.用pop()函數(shù)刪掉不需要的元素3[<tr><td>阿聯(lián)酋迪拉姆</td><td></td><td>178.39</td><td></td><td>191.64</td><td>184.6</td><tdclass="pjrq">2022.08.1908:08:36</td><td>08:08:36</td></tr>,<tr><td>澳大利亞元</td><td>467.51</td><td>452.99</td><td>470.95</td><td>473.04</td><td>470.1</td><tdclass="pjrq">2022.08.1908:08:36</td><td>08:08:36</td></tr>,<tr>#list.pop(i)刪除下標(biāo)為i的元素all_tr.pop(0)print(all_tr)爬取所需數(shù)據(jù)第三步:找到該<table>內(nèi)每個(gè)<tr>中的每個(gè)<td>1.創(chuàng)建盛裝所需數(shù)據(jù)的容器——空列表[]3#創(chuàng)建8個(gè)空列表,分別盛裝貨幣名稱、現(xiàn)匯買入價(jià)、現(xiàn)鈔買入價(jià)、現(xiàn)匯賣出價(jià)、現(xiàn)鈔賣出價(jià)、央行折算價(jià)、發(fā)布日期和發(fā)布時(shí)間貨幣名稱=[]現(xiàn)匯買入價(jià)=[]現(xiàn)鈔買入價(jià)=[]現(xiàn)匯賣出價(jià)=[]現(xiàn)鈔賣出價(jià)=[]央行折算價(jià)=[]發(fā)布日期=[]發(fā)布時(shí)間=[]爬取所需數(shù)據(jù)第三步:找到該<table>內(nèi)每對<tr>中的每對<td>2.向空列表中填入所需數(shù)據(jù)(1)找到每對<tr>中的<td>3#使用for循環(huán)遍歷每對<tr>,找到所有tdforrinall_tr:all_td=r.find_all('td')print(all_td)輸出結(jié)果:[<td>阿聯(lián)酋迪拉姆</td>,<td></td>,<td>178.8</td>,<td></td>,<td>192.09</td>,<td>185.32</td>,<tdclass="pjrq">2022.08.1913:54:12</td>,<td>13:54:12</td>][<td>澳大利亞元</td>,<td>468.82</td>,<td>454.25</td>,<td>472.26</td>,<td>474.36</td>,<td>470.58</td>,<tdclass="pjrq">2022.08.1913:54:12</td>,<td>13:54:12</td>][<td>巴西里亞爾</td>,<td></td>,<td>126.41</td>,<td></td>,<td>143.53</td>,<td>131.37</td>,<tdclass="pjrq">2022.08.1913:54:12</td>,<td>13:54:12</td>][<td>加拿大元</td>,<td>523.43</td>,<td>506.9</td>,<td>527.29</td>,<td>529.61</td>,<td>525.65</td>,<tdclass="pjrq">2022.08.1913:54:12</td>,<td>13:54:12</td>][<td>瑞士法郎</td>,<td>707.58</td>,<td>685.75</td>,<td>712.56</td>,<td>715.61</td>,<td>711.38</td>,<tdclass="pjrq">2022.08.1913:54:12</td>,<td>13:54:12</td>][<td>丹麥克朗</td>,<td>91.88</td>,<td>89.04</td>,<td>92.62</td>,<td>93.06</td>,<td>92.34</td>,<tdclass="pjrq">2022.08.1913:54:12</td>,<td>13:54:12</td>][<td>歐元</td>,<td>683.79</td>,<td>662.54</td>,<td>688.83</td>,<td>691.05</td>,<td>686.63</td>,<tdclass="pjrq">2022.08.1913:54:12</td>,<td>13:54:12</td>][<td>英鎊</td>,<td>808.41</td>,<td>783.29</td>,<td>814.36</td>,<td>817.96</td>,<td>812.15</td>,<tdclass="pjrq">2022.08.1913:54:12</td>,<td>13:54:12</td>]爬取所需數(shù)據(jù)第三步:找到該<table>內(nèi)每對<tr>中的每對<td>2.向空列表中填入所需數(shù)據(jù)(2)從每對<td>中提取所需數(shù)據(jù)3#使用tag標(biāo)簽的text屬性,獲取被該標(biāo)簽概括起來的可顯示在瀏覽器中的文字信息。##如取得貨幣名稱forrinall_tr:all_td=r.find_all('td')print(f'貨幣名稱為:{all_td[0].text}')輸出結(jié)果為:貨幣名稱為:阿聯(lián)酋迪拉姆貨幣名稱為:澳大利亞元貨幣名稱為:巴西里亞爾貨幣名稱為:加拿大元貨幣名稱為:瑞士法郎貨幣名稱為:丹麥克朗tag.text屬性:取得被該標(biāo)簽括起來的可顯示在瀏覽器中的文字信息。

假設(shè)標(biāo)簽g代表<td>123</td>,則g.text就是字符串“123”。爬取所需數(shù)據(jù)第三步:找到該<table>內(nèi)每對<tr>中的每對<td>2.向空列表中填入所需數(shù)據(jù)(2)從每對<td>中提取所需數(shù)據(jù)3#使用tag標(biāo)簽的text屬性,獲取被該標(biāo)簽概括起來的可顯示在瀏覽器中的文字信息。##如取得貨幣名稱forrinall_tr:all_td=r.find_all('td')print(f’貨幣名稱為:{all_td[0].text}’)f字符串:在{}中直接引用變量名,并用{}括起來,且在字符串開頭加上“f”,這樣python就會(huì)認(rèn)為{}里的內(nèi)容是變量,打印時(shí)會(huì)打印變量的取值。如果不加“f”,則直接打印print()括號(hào)中的內(nèi)容。tag.text屬性:取得被該標(biāo)簽括起來的可顯示在瀏覽器中的文字信息。

假設(shè)標(biāo)簽g代表<td>123</td>,則g.text就是字符串“123”。例如:a=[1,3,4]print(‘a(chǎn)’)輸出結(jié)果:aprint(f’{a}’)輸出結(jié)果:[1,3,4]爬取所需數(shù)據(jù)第三步:找到該<table>內(nèi)每對<tr>中的每對<td>練習(xí):3#使用tag標(biāo)簽的text屬性,獲取被該標(biāo)簽概括起來的可顯示再瀏覽器中的文字信息。##如取得貨幣名稱和其相應(yīng)的現(xiàn)鈔買入價(jià)forrinall_tr:all_td=r.find_all('td')print(f’貨幣名稱為:{all_td[0].text},現(xiàn)鈔買入價(jià)為:{all_td[2].text}’)請?jiān)谄聊簧洗蛴〕鲐泿琶Q和該貨幣的現(xiàn)鈔買入價(jià)輸出結(jié)果為:貨幣名稱為:阿聯(lián)酋迪拉姆,現(xiàn)鈔買入價(jià)為:貨幣名稱為:澳大利亞元,現(xiàn)鈔買入價(jià)為:468.62貨幣名稱為:巴西里亞爾,現(xiàn)鈔買入價(jià)為:貨幣名稱為:加拿大元,現(xiàn)鈔買入價(jià)為:522.9貨幣名稱為:瑞士法郎,現(xiàn)鈔買入價(jià)為:708.31貨幣名稱為:丹麥克朗,現(xiàn)鈔買入價(jià)為:91.91爬取所需數(shù)據(jù)第三步:找到該<table>內(nèi)每對<tr>中的每對<td>2.向空列表中填入所需數(shù)據(jù)(2)從每對<td>中提取所需數(shù)據(jù)3#使用for循環(huán)遍歷每對<tr>,找到所有tdforrinall_tr:all_td=r.find_all(‘td’)#將提取的數(shù)據(jù)賦值給新的變量e_name=all_td[0].texte_xhmr=all_td[1].texte_xcmr=all_td[2].texte_xhmc=all_td[3].texte_xcmc=all_td[4].texte_yhzs=all_td[5].texte_date=all_td[6].texte_time=all_td[7].text#將提取的數(shù)據(jù)添加到前面生成的空列表中貨幣名稱.append(e_name)

現(xiàn)匯買入價(jià).append(e_xhmr)

現(xiàn)鈔買入價(jià).append(e_xcmr)

現(xiàn)匯賣出價(jià).append(e_xhmc)

現(xiàn)鈔賣出價(jià).append(e_xcmc)

央行折算價(jià).append(e_yhzs)

發(fā)布日期.append(e_date)

發(fā)布時(shí)間.append(e_time)print(貨幣名稱)輸出結(jié)果為:['阿聯(lián)酋迪拉姆','澳大利亞元','巴西里亞爾','加拿大元','瑞士法郎','丹麥克朗','歐元','英鎊','港幣','印尼盧比','印度盧比','日元','韓國元','澳門元','林吉特','挪威克朗','新西蘭元','菲律賓比索','盧布','沙特里亞爾','瑞典克朗','新加坡元','泰國銖','土耳其里拉','新臺(tái)幣','美元','南非蘭特']print(現(xiàn)匯買入價(jià))輸出結(jié)果為:['','468.92','','522.87','708.71','91.91','684.15','806.05','86.57','0.0457','','4.9686','0.5107','84.14','151.51','69.41','422.23','12.1','11.03','','64.33','488.66','19.01','37.45','','679.27','40.12']爬取所需數(shù)據(jù)第三步:找到該<table>內(nèi)每對<tr>中的每對<td>2.向空列表中填入所需數(shù)據(jù)(2)從每對<td>中提取所需數(shù)據(jù)3#使用for循環(huán)遍歷每對<tr>,找到所有tdforrinall_tr:all_td=r.find_all('td')#將提取的數(shù)據(jù)添加到前面生成的空列表中貨幣名稱.append(all_td[0].text)

現(xiàn)匯買入價(jià).append(all_td[1].text)

現(xiàn)鈔買入價(jià).append(all_td[2].text)

現(xiàn)匯賣出價(jià).append(all_td[3].text)

現(xiàn)鈔賣出價(jià).append(all_td[4].text)

央行折算價(jià).append(all_td[5].text)

發(fā)布日期.append(all_td[6].text)

發(fā)布時(shí)間.append(all_td[7].text)print(貨幣名稱)輸出結(jié)果為:['阿聯(lián)酋迪拉姆','澳大利亞元','巴西里亞爾','加拿大元','瑞士法郎','丹麥克朗','歐元','英鎊','港幣','印尼盧比','印度盧比','日元','韓國元','澳門元','林吉特','挪威克朗','新西蘭元','菲律賓比索','盧布','沙特里亞爾','瑞典克朗','新加坡元','泰國銖','土耳其里拉','新臺(tái)幣','美元','南非蘭特']print(現(xiàn)匯買入價(jià))輸出結(jié)果為:['','468.92','','522.87','708.71','91.91','684.15','806.05','86.57','0.0457','','4.9686','0.5107','84.14','151.51','69.41','422.23','12.1','11.03','','64.33','488.66','19.01','37.45','','679.27','40.12']爬取所需數(shù)據(jù)第三步:找到該<table>內(nèi)每對<tr>中的每對<td>2.向空列表中填入所需數(shù)據(jù)(2)從每對<td>中提取所需數(shù)據(jù)3#使用列表生成式,生成8個(gè)空列表c=[[]forxinrange(8)]#利用for循環(huán)提取數(shù)據(jù)并填入c包含的8個(gè)空列表forrinall_tr:all_td=r.find_all('td')foriinrange(8):b=all_td[i].textc[i].append(b)print(c[0])輸出結(jié)果為:['阿聯(lián)酋迪拉姆','澳大利亞元','巴西里亞爾','加拿大元','瑞士法郎','丹麥克朗','歐元','英鎊','港幣','印尼盧比','印度盧比','日元','韓國元','澳門元','林吉特','挪威克朗','新西蘭元','菲律賓比索','盧布','沙特里亞爾','瑞典克朗','新加坡元','泰國銖','土耳其里拉','新臺(tái)幣','美元','南非蘭特']print(c[1])輸出結(jié)果為:['','468.92','','522.87','708.71','91.91','684.15','806.05','86.57','0.0457','','4.9686','0.5107','84.14','151.51','69.41','422.23','12.1','11.03','','64.33','488.66','19.01','37.45','','679.27','40.12']爬取所需數(shù)據(jù)最后:將提取到的數(shù)據(jù)存入excel提取出來的數(shù)據(jù)存在一個(gè)大型列表c中,c中的每一個(gè)元素是一個(gè)小列表,為了將數(shù)據(jù)按照網(wǎng)頁呈現(xiàn)的表格形式存入excel,需對進(jìn)行整理,整理成數(shù)據(jù)框DataFrame的形式存入excel備用。3#加載庫包importpandasaspdfrompandas.core.frameimportDataFrame#將上述列表轉(zhuǎn)成字典c={'貨幣名稱':c[0],'現(xiàn)匯買入價(jià)':c[1],'現(xiàn)鈔買入價(jià)':c[2],'現(xiàn)匯賣出價(jià)':c[3],'現(xiàn)鈔賣出價(jià)':c[4],'央行折算價(jià)':c[5],'發(fā)布日期':c[6],'發(fā)布時(shí)間':c[7]}#將轉(zhuǎn)成字典形式的列表轉(zhuǎn)成數(shù)據(jù)框匯率=DataFrame(c)print(匯率)#將數(shù)據(jù)導(dǎo)出到excel匯率.to_excel(‘路徑/匯率.xlsx')3

任務(wù)實(shí)施 請使用python標(biāo)準(zhǔn)庫獲取中國銀行外匯牌價(jià)第2頁的貨幣名稱、現(xiàn)匯買入價(jià)、現(xiàn)匯賣出價(jià)及發(fā)布日期,并將抓取的數(shù)據(jù)保存到excel中。任務(wù)實(shí)施爬取數(shù)據(jù)步驟#加載庫包——啟動(dòng)瀏覽器fromurllib.requestimporturlopen#打開網(wǎng)站,urlopen()函數(shù)返回一個(gè)HttpResponse對象,用于對所得到的網(wǎng)頁進(jìn)行各種操作r=urlopen(‘/sourcedb/whpj/index_1.html')#HttpResponse.read()用于讀取網(wǎng)頁的文本內(nèi)容,此方法不執(zhí)行任何編碼轉(zhuǎn)換,直接返回一個(gè)Byte對象(字節(jié)流)c=r.read()#print(c)#使用utf-8對HttpResponse.read()讀取的網(wǎng)頁文本內(nèi)容進(jìn)行解碼s=c.decode('utf-8')print(s)#加載庫包——在指定網(wǎng)頁中找到所需標(biāo)簽。frombs4importBeautifulSoup#將前面r.read

溫馨提示

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

評(píng)論

0/150

提交評(píng)論