網(wǎng)絡(luò)爬蟲項目實戰(zhàn) 課件 項目4 汽車Scrapy+MTC爬蟲項目_第1頁
網(wǎng)絡(luò)爬蟲項目實戰(zhàn) 課件 項目4 汽車Scrapy+MTC爬蟲項目_第2頁
網(wǎng)絡(luò)爬蟲項目實戰(zhàn) 課件 項目4 汽車Scrapy+MTC爬蟲項目_第3頁
網(wǎng)絡(luò)爬蟲項目實戰(zhàn) 課件 項目4 汽車Scrapy+MTC爬蟲項目_第4頁
網(wǎng)絡(luò)爬蟲項目實戰(zhàn) 課件 項目4 汽車Scrapy+MTC爬蟲項目_第5頁
已閱讀5頁,還剩70頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

項目4汽車Scrapy+MTC爬蟲項目網(wǎng)絡(luò)爬蟲應(yīng)用項目式教程《網(wǎng)絡(luò)爬蟲項目實戰(zhàn)》進(jìn)階篇4.1項目介紹4.2任務(wù)分解4.3項目實施目錄Content4.4課后練習(xí)4.5能力拓展4.1.1

項目目標(biāo)爬取某二手車網(wǎng)站的成都、廣州、上海的信息,統(tǒng)計不同城市二手車均價,統(tǒng)計結(jié)果以柱形圖顯示。4.1.2學(xué)習(xí)目標(biāo)技能目標(biāo)1.能夠使用Scrapy框架采集數(shù)據(jù)2.能夠使用Pandas清洗數(shù)據(jù)3.能夠使用MySQL存儲數(shù)據(jù)4.能夠使用Flask+ECharts可視化數(shù)據(jù)知識目標(biāo)1.熟悉數(shù)據(jù)采集過程2.熟悉數(shù)據(jù)清洗常見方法3.熟悉數(shù)據(jù)分析特點4.了解數(shù)據(jù)可視化形式素質(zhì)目標(biāo)1.培育項目管理能力2.培育解決實際問題能力實訓(xùn)目標(biāo)實訓(xùn)項目爬取某二手車網(wǎng)站,分析和可視化二手車均價實操內(nèi)容1.搭建Scrapy框架2.編寫數(shù)據(jù)爬蟲代碼3.編寫數(shù)據(jù)清洗代碼4.編寫數(shù)據(jù)分析代碼5.設(shè)計和實施可視化圖表4.2任務(wù)分解4.1項目目標(biāo)4.3項目實施目錄Content4.4課后練習(xí)4.5能力拓展4.2

任務(wù)分解從數(shù)據(jù)采集到可視化,本項目包括以下任務(wù)。數(shù)據(jù)采集車輛名稱上牌時間行駛里程銷售城市銷售價格數(shù)據(jù)清洗提取車輛品牌去掉里程單位計算車齡數(shù)據(jù)分析按照城市分組統(tǒng)計二手車均價數(shù)據(jù)可視化不同城市二手車均價柱形圖網(wǎng)絡(luò)爬蟲實戰(zhàn)項目式教程《網(wǎng)絡(luò)爬蟲項目實戰(zhàn)》進(jìn)階篇項目4汽車Scrapy+MTC爬蟲項目4.2任務(wù)分解4.1項目介紹4.3項目實施目錄Content4.4課后練習(xí)4.5能力拓展4.2.1數(shù)據(jù)采集實施過程(1)訪問http://:50001/findcar/chengdu.html、http://:50001/findcar/guangzhou.html、:50001/findcar/shanghai.html,顯示網(wǎng)站首頁,代表網(wǎng)站運行正常。如下圖所示。4.2.1

數(shù)據(jù)采集實施過程(2)打開網(wǎng)站首頁,在頁面任意位置點擊鼠標(biāo)右鍵后,選擇“檢查”,選擇“Network”選項卡,查看HTTP請求和返回內(nèi)容,點擊“Clear”按鈕,清除緩存。4.2.1

數(shù)據(jù)采集實施過程在左面頁面窗口中任意位置點擊鼠標(biāo)右鍵,選擇“重新加載”,再切換到“Doc”選項卡。4.2.1

數(shù)據(jù)采集實施過程選擇“chengdu.html”,查看RequestHeaders,保存User-Agent的屬性值。4.2.1

數(shù)據(jù)采集實施過程(3)打開網(wǎng)站首頁(:50001/findcar/chengdu.html),然后在頁面空白區(qū)域點擊鼠標(biāo)右鍵,選擇“檢查”,在右邊“Elements”窗口查找div元素,對照左邊窗口的顯示,找到各個二手車信息div對應(yīng)的頁面元素。如下圖所示。4.2.1

數(shù)據(jù)采集實施過程(4)鼠標(biāo)停留在網(wǎng)頁中車輛名稱等字段信息,然后點擊鼠標(biāo)右鍵后,選擇“檢查”,查找各個對應(yīng)字段的XPath路徑。從XPath路徑“div[@class=”gongge_main“]”開始,“車輛名稱”字段對應(yīng)的XPath相對路徑為“/a/span/text()”。4.2.1

數(shù)據(jù)采集實施過程(5)打開AnacondaPrompt,用下面命令轉(zhuǎn)到PyCharm項目主目錄。>cdc:\datacrawling\pyprojects(6)用下面命令創(chuàng)建Scrapy空項目“findcar”。>scrapystartprojectfindcar4.2.1

數(shù)據(jù)采集實施過程(7)轉(zhuǎn)到findcar子目錄。>cdfindcar(8)執(zhí)行下面命令創(chuàng)建爬蟲。其中,car_spider是爬蟲名稱,是網(wǎng)站域名。>scrapygenspidercar_spider""4.2.1

數(shù)據(jù)采集實施過程(9)用PyCharm打開項目,展開目錄“findcar”,項目結(jié)構(gòu)應(yīng)該如下圖所示。2.3.1項目實施->數(shù)據(jù)采集(10)修改car_spider.py,設(shè)置起始URL指向網(wǎng)站首頁。#-*-coding:utf-8-*-importscrapyclassCarSpiderSpider(scrapy.Spider):name=‘car_spider'allowed_domains=['']start_urls=['http://:50001/findcar/chengdu.html’]defparse(self,response):

pass#encoding=utf-8fromscrapyimportcmdlinecmdline.execute('scrapycrawlcar_spider'.split(''))(11)在項目根目錄下New->PythonFile,創(chuàng)建startpoint.py,代碼如下。4.2.1

數(shù)據(jù)采集實施過程(12)運行startpoint.py,PyCharm控制臺輸出如下結(jié)果:2022-10-0421:40:18[scrapy.utils.log]INFO:Scrapy1.8.0started(bot:findcar)2022-10-0421:40:18[scrapy.utils.log]INFO:Versions:lxml,libxml22.9.5,cssselect1.1.0,parsel1.5.2,w3lib1.21.0,Twisted18.7.0,Python3.7.0(default,Jun282018,08:04:48)[MSCv.191264bit(AMD64)],pyOpenSSL18.0.0(OpenSSL1.0.2p14Aug2018),cryptography2.3.1,PlatformWindows-10-10.0.19041-SP02022-10-0421:40:18[scrapy.crawler]INFO:Overriddensettings:{'BOT_NAME':'findcar','NEWSPIDER_MODULE':'findcar.spiders','ROBOTSTXT_OBEY':True,'SPIDER_MODULES':['findcar.spiders']}2022-10-0421:40:18[scrapy.extensions.telnet]INFO:TelnetPassword:236a03a9065f23592022-10-0421:40:18[scrapy.middleware]INFO:Enabledextensions:------------------------------------------------------------------------------------------------------2022-10-0421:40:19[scrapy.core.engine]DEBUG:Crawled(404)<GET:50001/robots.txt>(referer:None)2022-10-0421:40:19[protego]DEBUG:Ruleatline1withoutanyuseragenttoenforceiton.2022-10-0421:40:19[scrapy.core.engine]DEBUG:Crawled(200)<GET:50001/findcar/chengdu.html>(referer:None)2022-10-0421:40:19[scrapy.core.engine]INFO:Closingspider(finished)------------------------------------------------------------------------------------------------------'scheduler/enqueued/memory':1,'start_time':datetime.datetime(2022,10,4,13,40,19,43542)}2022-10-0421:40:19[scrapy.core.engine]INFO:Spiderclosed(finished)4.2.1

數(shù)據(jù)采集實施過程(13)修改findcar/items.py,F(xiàn)indcarItem類添加車輛名稱、上牌時間、行駛里程、銷售城市、銷售價格。importscrapyclassFindcarItem(scrapy.Item):name=scrapy.Field()#車輛名稱

year=scrapy.Field()#上牌時間

distance=scrapy.Field()#行駛里程

price=scrapy.Field()#銷售價格

city=scrapy.Field()#銷售城市4.2.1

數(shù)據(jù)采集實施過程(14)修改findcar/pipelines.py,在FindcarPipeline類中,實現(xiàn)process_item方法。importcsvwithopen('./data.csv',mode='a',encoding='utf-8',newline='')asf:writer=csv.writer(f)writer.writerow(['車輛名稱','上牌時間','行駛里程','銷售城市','銷售價格'])classFindcarPipeline:defprocess_item(self,item,spider):withopen('./data.csv',mode='a',encoding='utf-8',newline='')asf:writer=csv.writer(f)writer.writerow([item["name"],item["year"],item["distance"],item["city"],item["price"]])4.2.1

數(shù)據(jù)采集實施過程(15)在findcar/settings.py中,反注釋ITEM_PIPELINES,啟用findcar.pipelines。ITEM_PIPELINES={'carcrawl.pipelines.CarcrawlPipeline':300,}4.2.1

數(shù)據(jù)采集實施過程(16)在findcar/settings.py中,繼續(xù)反注釋DEFAULT_REQUEST_HEADERS部分,設(shè)置User-Agent。cookie和referer為空,不需要設(shè)置。DEFAULT_REQUEST_HEADERS={

'User-Agent':'Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/78.0.3904.108Safari/537.36',}4.2.1

數(shù)據(jù)采集實施過程(17)修改findcar/car_spider.py,爬取數(shù)據(jù)。importscrapyfromfindcar.itemsimportFindcarItemitem=FindcarItem()classCarSpiderSpider(scrapy.Spider):name='car_spider'allowed_domains=['']start_urls=[':50001/findcar/chengdu.html',':50001/findcar/shanghai.html',':50001/findcar/guangzhou.html']defparse(self,response):car_info_list=response.xpath('//div[@class="gongge_main"]')forcarincar_info_list:name=car.xpath('./a/span/text()').extract()year=car.xpath('./p/i[1]/text()').extract()distance=car.xpath('./p/i[2]/text()').extract()city=car.xpath('./p/i[3]/text()').extract()price=car.xpath('./div[1]/i/text()').extract()item['name']=name[0]item['year']=year[0]item['distance']=distance[0]item['city']=city[0]item['price']=price[0].strip()yielditem4.2.1

數(shù)據(jù)采集實施過程運行startpoint.py,在項目根目錄中,多了一個CSV文件。4.2.2Pandas清洗數(shù)據(jù)(1)在項目根目錄New→PythonFile,創(chuàng)建data_clean.py。讀入data.csv到DataFrame類型,利用read_csv()讀取數(shù)據(jù),進(jìn)行數(shù)據(jù)清洗。importpandasaspdpd.set_option('display.width',None)#不限制顯示的寬度pd.set_option('display.unicode.east_asian_width',True)#設(shè)置數(shù)據(jù)對齊df=pd.read_csv('data.csv',encoding='utf-8')print(df.head())運行data_clean.py,PyCharm控制臺輸出如下結(jié)果:4.2.2Pandas清洗數(shù)據(jù)pd.set_option()通過Pandas的使用,可以交互式地展示與分析表格(DataFrame)。而表格的格式就顯得尤為重要了,因為大部分時候如果nnn直接展示表格,格式并不是很友好。利用pd.set_option()就可以修改Pandas的比如默認(rèn)情況下,Pandas是不能超出屏幕的顯示范圍,一旦表的行數(shù)很多,就會截斷中間的行只顯示一部分,此時可以通過設(shè)置display.max_rows來控制顯示的最大行數(shù)。4.2.2Pandas清洗數(shù)據(jù)(2)從車輛名稱提取車輛品牌。車輛名稱中包含了車輛品牌,通過str.split()函數(shù)可以提取字符串中的信息。df['車輛品牌']=df['車輛名稱'].str.split("",expand=True)[0]print(df.head())運行data_clean.py,PyCharm控制臺輸出如下結(jié)果:4.2.2Pandas清洗數(shù)據(jù)(3)根據(jù)上牌時間計算車齡。fromdatetimeimportdatetimenow=datetime.now()year=now.yeardf['上牌時間']=df['上牌時間'].str.replace("年","")df['上牌時間']=df['上牌時間'].astype("int")df['車齡']=year-df['上牌時間']print(df.head())運行data_clean.py,PyCharm控制臺輸出如下結(jié)果:4.2.2Pandas清洗數(shù)據(jù)Pandas的常用字符串函數(shù)在Pandas中,通過DataFrame來存儲文件中的內(nèi)容,其中最常見的數(shù)據(jù)類型就是字符串。針對字符串,Pandas提供了一系列的函數(shù),以提高操作效率。這些函數(shù)可以方便地某一列字符串類型的數(shù)據(jù)進(jìn)行操作,Pandas中字符串處理函數(shù)以str開頭,常用的有以下幾種:4.2.2Pandas清洗數(shù)據(jù)(4)將行駛里程的單位去掉,再轉(zhuǎn)換為數(shù)值型。defchange(x):if"萬公里"inx:x=x.replace("萬公里","")x=float(x)*10000x=int(x)else:x=x.replace("百公里內(nèi)","0")x=int(x)returnxdf['行駛里程']=df['行駛里程'].apply(change)pd.set_option('display.max_rows',None)print(df.head())運行data_clean.py,PyCharm控制臺輸出如下結(jié)果:4.2.2Pandas清洗數(shù)據(jù)(5)刪除多余字段,調(diào)整字段排列順序。df=df.drop(axis=1,labels=['車輛名稱','上牌時間'])df=df[['銷售城市','車輛品牌','車齡','行駛里程','銷售價格']]print(df.head())運行data_clean.py,PyCharm控制臺輸出如下結(jié)果:4.2.2Pandas清洗數(shù)據(jù)(6)保存清洗數(shù)據(jù),將清洗后的數(shù)據(jù)保存到data_clean.csv文件。df.to_csv("data_clean.csv",header=False,index=True)運行data_clean.py,在項目中可以找到一個新文件data_clean.csv。4.2.3MySQL存儲數(shù)據(jù)(1)創(chuàng)建數(shù)據(jù)庫cardb。dropdatabaseifexistscardb;createdatabasecardb;結(jié)果如下:4.2.3MySQL存儲數(shù)據(jù)(2)創(chuàng)建表carinfo。usecardb;droptableifexistscarinfo;createtablecarinfo(idint,cityvarchar(200),\

car_brandvarchar(200),car_yearint,car_distanceint,\

car_priceint,primarykey(id))\

charset=utf8;結(jié)果如下:4.2.3MySQL存儲數(shù)據(jù)MySQL常用命令MySQL是一個關(guān)系型數(shù)據(jù)庫管理系統(tǒng),由瑞典MySQLAB公司開發(fā),屬于Oracle旗下產(chǎn)品。MySQL是最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)之一,MySQL所使用的SQL語言是用于訪問數(shù)據(jù)庫的最常用標(biāo)準(zhǔn)化語言。MySQL常用命令包括:4.2.3MySQL存儲數(shù)據(jù)(3)查看MySQL上傳目錄。showvariableslike'%secure_file_priv%';結(jié)果如下:(4)復(fù)制data_clean.csv到MySQL上傳目錄。4.2.3MySQL存儲數(shù)據(jù)(5)復(fù)制data_clean.csv絕對路徑到剪貼板。4.2.3MySQL存儲數(shù)據(jù)(6)導(dǎo)入data_clean.csv到carinfo表。其中,替換data_clean.csv的絕對路徑中的“\”要換成“\\”,因為“\”在MySQL中是轉(zhuǎn)義符。loaddatalocalinfile"C:\\ProgramData\\MySQL\\MySQLServer5.7\\Uploads\\data_clean.csv"\intotablecarinfo\charactersetutf8fieldsterminatedby','optionallyenclosedby'"'\linesterminatedby'\r\n'\(id,city,car_brand,car_year,car_distance,car_price);結(jié)果如下:4.2.3MySQL存儲數(shù)據(jù)(7)執(zhí)行select語句,檢查前5條記錄。select*fromcarinfolimit5;結(jié)果如下:4.2.4Flask搭建服務(wù)(1)在項目根目錄New->PythonPackage,創(chuàng)建app包。(2)在app包下New->PythonPackage,創(chuàng)建views包。(3)在app目錄下New->Directory,創(chuàng)建目錄static,然后把echarts.min.js復(fù)制到app/static目錄。(4)在app包下New->PythonFile,創(chuàng)建extensions.py,定義db變量和config_extensions方法。fromflask_sqlalchemyimportSQLAlchemydb=SQLAlchemy()defconfig_extensions(app):db.init_app(app)4.2.4Flask搭建服務(wù)(5)在app/views包下New->PythonFile,創(chuàng)建main.py,定義blueprint變量。fromflaskimportBlueprintblueprint=Blueprint("main",__name__)(6)完善app/views/__init__.py,定義DEFAULT_BLUEPRINT變量。fromapp.views.mainimportblueprintDEFAULT_BLUEPRINT=((blueprint,""))4.2.4Flask搭建服務(wù)(7)完善app/__init__.py,定義Config類、config_blueprint方法、create_app方法。fromflaskimportFlaskfromapp.extensionsimportconfig_extensionsfromapp.viewsimportblueprintclassConfig:SQLALCHEMY_COMMIT_ON_TEARDOWN=TrueSQLALCHEMY_TRACK_MODIFICATIONS=FalseSQLALCHEMY_DATABASE_URI="mysql+pymysql://root:123456@:3306/cardb?charset=utf8"defconfig_blueprint(app):app.register_blueprint(blueprint,url_prefix="")defcreate_app(config):app=Flask(__name__)app.config.from_object(config)config_extensions(app)config_blueprint(app)

returnapp4.2.4Flask搭建服務(wù)(8)在app包下New->PythonFile,創(chuàng)建manager.py。fromflask_scriptimportManager,Serverfromappimportcreate_app,Configif__name__=='__main__':app=create_app(Config)manager=Manager(app)manager.add_command('runserver',Server(host='',use_debugger=True,use_reloader=True))manager.run()右鍵選中manager.py,選擇“RunManager”菜單,運行程序,PyCharm控制臺輸出如下結(jié)果:usage:manager.py[-?]{runserver,shell}...positionalarguments:{runserver,shell}runserverRunstheFlaskdevelopmentserveri.e.app.run()shellRunsaPythonshellinsideFlaskapplicationcontext.optionalarguments:-?,--helpshowthishelpmessageandexit4.2.4Flask搭建服務(wù)點擊Run->EditConfiguration。選中manager,編輯Parameters,輸入“runserver”。4.2.4Flask搭建服務(wù)再次右鍵選中manager.py,選擇“RunManager”菜單,運行程序。PyCharm控制臺輸出如下結(jié)果,代表Flask配置成功。*ServingFlaskapp"app"(lazyloading)*Environment:productionWARNING:Thisisadevelopmentserver.Donotuseitinaproductiondeployment.UseaproductionWSGIserverinstead.*Debugmode:on*Restartingwithstat*Debuggerisactive!*DebuggerPIN:263-346-767*Runningon:5000/(PressCTRL+Ctoquit)單擊“停止”按鈕,停止manager運行。4.2.4Flask搭建服務(wù)(9)在app包下New->PythonPackage,創(chuàng)建包models。fromapp.extensionsimportdbclassCarinfo(db.Model):__tablename__='carinfo'id=db.Column(db.String(20),primary_key=True)city=db.Column(db.String(200))car_brand=db.Column(db.String(20))car_year=db.Column(db.Integer)car_distance=db.Column(db.Integer)car_price=db.Column(db.Integer)(10)在包app/models下New->PythonFile,創(chuàng)建entities.py,定義Carinfo類。(11)完善app/models/__init__.py,開放Carinfo類。from.entitiesimportCarinfo4.2.4Flask搭建服務(wù)(12)完善app/views/main.py,定義get_car_price_by_city和defapi_city_price方法。fromflaskimportBlueprint,jsonifyfromsqlalchemyimportfunc,or_fromapp.extensionsimportdbfromapp.modelsimportCarinfoblueprint=Blueprint("main",__name__)defget_car_price_by_city():rows=db.session.query(Carinfo.city,func.avg(Carinfo.car_price))\.group_by(Carinfo.city).all()x=[]y=[]forrowinrows:x.append(row[0])y.append((int)(row[1]))returnx,y@blueprint.route("/api/city_price")defapi_city_price():x,y=get_car_price_by_city()returnjsonify([x,y])4.2.4Flask搭建服務(wù)(13)運行app/manager.py,打開Chrome,訪問:5000/api/city_price,從服務(wù)器返回3個不同城市銷售價格數(shù)據(jù)的列表,表示Flask連接數(shù)據(jù)庫正常。4.2.4

Flask搭建服務(wù)Flask框架Flask是一個使用Python編寫的輕量級Web應(yīng)用框架,較同類型的其它框架更為靈活、輕便。Flask可以很好地結(jié)合MTC模式進(jìn)行開發(fā),開發(fā)人員分工合作,在短時間內(nèi)就可以完成功能豐富的中小型網(wǎng)站或Web服務(wù)的實現(xiàn)。此外,F(xiàn)lask還有很強(qiáng)的定制性,用戶可以根據(jù)自己的需求添加相應(yīng)的功能,實現(xiàn)功能的豐富與擴(kuò)展,其強(qiáng)大的插件庫可以讓用戶實現(xiàn)開發(fā)出功能強(qiáng)大的網(wǎng)站。Flask主要包括Werkzeug和Jinja2兩個核心函數(shù)庫,它們分別負(fù)責(zé)業(yè)務(wù)處理和安全方面的功能,這些基礎(chǔ)函數(shù)為web項目開發(fā)過程提供了豐富的基礎(chǔ)組件。Werkzeug庫十分強(qiáng)大,功能比較完善,支持URL路由請求集成,一次可以響應(yīng)多個用戶的訪問請求。Jinja2庫支持自動HTML轉(zhuǎn)移功能,能夠很好控制外部黑客的腳本攻擊。系統(tǒng)運行速度很快,頁面加載過程會將源碼進(jìn)行編譯形成Python字節(jié)碼,從而實現(xiàn)模板的高效運行。4.2.4

Flask搭建服務(wù)Flask框架Flask的基本模式為在程序里將一個視圖函數(shù)分配給一個URL,每當(dāng)用戶訪問這個URL時,系統(tǒng)就會執(zhí)行給該URL分配好的視圖函數(shù),獲取函數(shù)的返回值并將其顯示到瀏覽器上,其工作過程如下圖:4.2.4

Flask搭建服務(wù)Flask框架IT運維的基本點為安全、穩(wěn)定、高效,運維自動化的目的就是為了提高運維效率,F(xiàn)lask開發(fā)快捷的特點正好符合運維的高效性需求。在項目迭代開發(fā)的過程中,所需要實現(xiàn)的運維功能以及擴(kuò)展會逐漸增多,針對這一特點更是需要使用易擴(kuò)展的Flask框架。另外,由于每個公司對運維的需求不同,所要實現(xiàn)的功能也必須有針對性地來設(shè)計,F(xiàn)lask可以很好地完成這個任務(wù)。4.2.5Flask+ECharts可視化數(shù)據(jù)(1)完善app/views/main.py,定義get_car_price_by_city方法。fromflaskimportBlueprint,jsonify,render_template@blueprint.route("/city_price")defcity_price():x,y=get_car_price_by_city()returnrender_template('single_chart.html',x_data=x,y_data=y)(2)在app包下New->Directory,創(chuàng)建templates目錄。4.2.5Flask+ECharts可視化數(shù)據(jù)(3)在templates目錄下NewHTMLFile,創(chuàng)建single_chart.html。4.2.5Flask+ECharts可視化數(shù)據(jù)(4)修改single_chart.html的代碼。<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8">

<title>單圖</title></head><body></body></html>4.2.5Flask+ECharts可視化數(shù)據(jù)(5)在single_chart.html中引入依賴的JS文件。<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>單圖</title><scriptsrc="../static/echarts.min.js"></script></head><body></body></html></html>4.2.5Flask+ECharts可視化數(shù)據(jù)(6)完善single_chart.html,定義div元素和編寫JS代碼。JS代碼中引用數(shù)據(jù)分析產(chǎn)生的數(shù)據(jù),實例化ECharts圖表對象,然后傳給div元素顯示。<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>單圖</title><scriptsrc="../static/echarts.min.js"></script></head><body>

<divid="chart1"style="float:left;width:600px;height:400px"></div></body></html><script>varmychart1=echarts.init(document.getElementById("chart1"));varxdata=[{%foriinx_data%}"{{i}}",{%endfor%}];varydata=[{%foriiny_data%}"{{i}}",{%endfor%}];varoption={title:{text:'不同城市二手車均價',x:'center',textStyle:{color:'red',fontWeight:'bold',fontSize:'20'}},tooltip:{trigger:'axis'},xAxis:[{type:'category',data:xdata,name:'',axisLabel:{interval:0,rotate:10}}],yAxis:{type:‘value’,name:‘價格'},series:[{type:'bar',name:xdata,data:ydata}]};mychart1.setOption(option);</script>4.2.5Flask+ECharts可視化數(shù)據(jù)(7)打開Chrome瀏覽器,訪問:5000/city_price,可視化結(jié)果如下圖所示。項目4汽車Scrapy+MTC爬蟲項目網(wǎng)絡(luò)爬蟲實戰(zhàn)項目式教程《網(wǎng)絡(luò)爬蟲項目實戰(zhàn)》進(jìn)階篇4.2任務(wù)分解4.1項目介紹4.4課后練習(xí)目錄Content4.3項目實施4.5能力拓展4.4課后練習(xí)1.選擇題1.在AnacondaPrompt中,要轉(zhuǎn)到某個目錄,如C盤的myprojects,可以使用()。A.Anacondac:\myprojects B.cdc:\myprojects C.pythonc:\myprojects D.cmdc:\myprojects2.在AnacondaPrompt中新建一個Scrapy爬蟲項目car,可以使用()。

A.scrapycar B.startprojectcar C.scrapystartprojectcar D.startprojectscrapycar4.4課后練習(xí)1.選擇題3.在Scrapy中的spider文件中,設(shè)置爬蟲的初始url,一般使用()。A.name B.allowed_domains

C.start_urls D.response4.在xpath中,要找到屬性值等于go的div標(biāo)簽,可以使用()。A.div[@class="go"] B.div[@class!="go"] C.div[@class=="go"] D.div[class="go"]4.4課后練習(xí)1.選擇題5.在DataFrame中,選取數(shù)據(jù)df的前3行,可以使用()。A.df.top(3) B.df.head(3) C.df.limit(3) D.df(3)6.去掉DataFrame中的某一列中的字符“年”,可以使用()。A.str.replace("","年") B.str.replace("年",) C.s

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論