版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
蘇州工業(yè)職業(yè)技術(shù)學(xué)院SuzhouInstituteOfIndustrialTechnology第
PAGE
4頁教師備課首頁蘇州工業(yè)職業(yè)技術(shù)學(xué)院教師備課首頁SuzhouInstituteOfIndustrialTechnology第1頁課題項目二購物Scrapy項目實戰(zhàn)課型理實一體授課班級大數(shù)據(jù)22C1、大數(shù)據(jù)22C2授課時數(shù)10教學(xué)目標(biāo)(1)掌握Scrapy項目搭建。(2)掌握XPath語法格式。(3)掌握從CSV文件讀取到DataFrame。(4)掌握DataFrame去重方法。(5)掌握DataFrame列裂變。(6)掌握DataFrame自定義函數(shù)轉(zhuǎn)換數(shù)據(jù)。(7)掌握DataFrame保存到CSV文件。(8)掌握DataFrame分組sum統(tǒng)計。(9)了解Series.str.match函數(shù)過濾DataFrame。(10)了解ECharts柱狀圖。教學(xué)重點(diǎn)(1)掌握Scrapy項目搭建。(2)掌握XPath語法格式。教學(xué)難點(diǎn)XPath語法格式學(xué)情分析學(xué)生零基礎(chǔ),在教學(xué)中注重引導(dǎo)學(xué)生學(xué)會自主學(xué)習(xí),培養(yǎng)學(xué)生學(xué)會查找文獻(xiàn)資料教學(xué)效果教后記任務(wù)1:Scrapy+XPath采集數(shù)據(jù)Scrapy是一個基于Twisted的異步處理框架,是純Python實現(xiàn)的爬蟲框架。Scrapy功能非常強(qiáng)大,爬取效率高,相關(guān)擴(kuò)展組件豐富,可配置和可擴(kuò)展程度非常高,是目前Python中使用最廣泛的爬蟲框架。XPath,全程為XMLPathLanguage,即XML路徑語言,是一門在XML文檔中查找信息的語言。XPath的選擇功能十分強(qiáng)大,它提供了非常簡潔明了的路徑選擇表達(dá)式。在做爬蟲時,完全可以使用XPath來做相應(yīng)的信息抽取。下面以爬取某購物網(wǎng)站為例,介紹Scrapy配合XPath采集手機(jī)銷售數(shù)據(jù)的詳細(xì)步驟。步驟1:轉(zhuǎn)到Tomcat安裝目錄下的bin目錄,運(yùn)行startup.bat后,打開Chrome,訪問:50001/cellphone/list.html,顯示網(wǎng)站首頁,代表Tomcat運(yùn)行正常。步驟2:打開AnacondaPrompt,用下面命令轉(zhuǎn)到PyCharm項目主目錄(比如,D:\PycharmProjects):>cdD:\PycharmProjects>d:步驟3:用下面命令創(chuàng)建Scrapy空項目phonecrawler。>scrapystartprojectphonecrawler輸出應(yīng)該出現(xiàn)下面結(jié)果:NewScrapyproject'phonecrawler',usingtemplatedirectory'd:\users\lenovo\anaconda3\lib\site-packages\scrapy\templates\project',createdin:D:\PycharmProjects\phonecrawlerYoucanstartyourfirstspiderwith:cdphonecrawlerscrapygenspiderexample步驟4:轉(zhuǎn)到phonecrawler子目錄,執(zhí)行下面命令創(chuàng)建爬蟲。其中,phone_spider是爬蟲名稱,是網(wǎng)站域名。>cdphonecrawler>scrapygenspiderphone_spider輸出應(yīng)該出現(xiàn)下面結(jié)果:Createdspider'phone_spider'usingtemplate'basic'inmodule:phonecrawler.spiders.phone_spider步驟5:打開PyCharm,File->Open打開項目phonecrawler,展開項目主目錄下的子目錄phonecrawler。步驟6:打開File->Settings->ProjectInterpreter,選擇第1章安裝的AnacondaPython編譯器。步驟7:修改phonecrawler/spiders/phone_spider.py,設(shè)置起始URL指向網(wǎng)站首頁。#-*-coding:utf-8-*-importscrapyclassPhoneSpiderSpider(scrapy.Spider):name='phone_spider'allowed_domains=['']start_urls=[':50001/cellphone/list.html']defparse(self,response):pass步驟8:在項目根目錄下New->PythonFile,創(chuàng)建startpoint.py,代碼如下:#encoding=utf-8fromscrapyimportcmdlineRUN_SCRAPY_COMMAND='scrapycrawlphone_spider-ophone_raw.csv'.split('')#注意:用1個空格分隔cmdline.execute(RUN_SCRAPY_COMMAND)運(yùn)行startpoint.py,控制臺輸出結(jié)果應(yīng)該如下:2022-07-0808:36:28[scrapy.utils.log]INFO:Scrapy1.8.0started(bot:phonecrawler)2022-07-0808:36:28[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-07-0808:36:28[scrapy.crawler]INFO:Overriddensettings:{'BOT_NAME':'phonecrawler','FEED_FORMAT':'csv','FEED_URI':'phone_raw.csv','NEWSPIDER_MODULE':'phonecrawler.spiders','ROBOTSTXT_OBEY':True,'SPIDER_MODULES':['phonecrawler.spiders']}2022-07-0808:36:28[scrapy.extensions.telnet]INFO:TelnetPassword:21a06c7a9bd5d8032022-07-0808:36:28[scrapy.core.engine]INFO:Spideropened2022-07-0808:36:28[scrapy.extensions.logstats]INFO:Crawled0pages(at0pages/min),scraped0items(at0items/min)2022-07-0808:36:28[scrapy.extensions.telnet]INFO:Telnetconsolelisteningon:60232022-07-0808:36:28[scrapy.core.engine]DEBUG:Crawled(404)<GET:50001/robots.txt>(referer:None)2022-07-0808:36:28[protego]DEBUG:Ruleatline1withoutanyuseragenttoenforceiton.2022-07-0808:36:28[scrapy.core.engine]DEBUG:Crawled(200)<GET:50001/cellphone/list.html>(referer:None)2022-07-0808:36:28[scrapy.core.engine]INFO:Closingspider(finished)2022-07-0808:36:28[scrapy.core.engine]INFO:Spiderclosed(finished)從運(yùn)行結(jié)果可以看出,爬蟲先訪問robots.txt,檢查網(wǎng)站的限制,然后訪問起止URL,接受服務(wù)器返回的頁面內(nèi)容。因為模擬網(wǎng)站上:50001/robots.txt不存在,服務(wù)器返回404狀態(tài)碼,HTTP狀態(tài)碼定義下文有解釋。步驟9:修改phonecrawler/items.py,PhonecrawlerItem類添加商品名稱、評論數(shù)、經(jīng)銷商屬性。#-*-coding:utf-8-*-#Defineherethemodelsforyourscrapeditems##Seedocumentationin:#/en/latest/topics/items.htmlimportscrapyclassPhonecrawlerItem(scrapy.Item):#商品名稱商品名稱=scrapy.Field()#評價數(shù)量評價數(shù)量=scrapy.Field()#經(jīng)銷商經(jīng)銷商=scrapy.Field()步驟10:打開:50001/cellphone/list.html,在頁面任意位置點(diǎn)擊鼠標(biāo)右鍵后,選擇“檢查”,選擇“Network”選項卡,查看HTTP請求和返回內(nèi)容。點(diǎn)擊“Clear”按鈕,清除緩存,然后在左面頁面窗口中任意位置點(diǎn)擊鼠標(biāo)右鍵,選擇“重新加載”。接著,切換到”Doc”選項卡后,選擇”list.html”,查看RequestHeaders,保存User-Agent、cookie(如果有的話)、referer(如果有的話)3個屬性值。步驟11:反注釋phonecrawler/settings.py中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/100.0.4896.127Safari/537.36'}步驟12:回到網(wǎng)站首頁,然后點(diǎn)擊鼠標(biāo)右鍵,選擇“檢查”,在右邊“Elements”窗口查找div元素,對照左邊窗口的顯示,找到各商品對應(yīng)的頁面元素。商品div的XPath相對路徑為div[@class='product-box')],注意“product_box”以空格結(jié)尾。為了兼容前面或后面有多余空格的情況,指定商品對應(yīng)頁面元素的XPath路徑為div[contains(@class,'product-box')],contains函數(shù)判斷class屬性值是否包含“product-box”。步驟13:鼠標(biāo)停留在左面頁面窗口中第1件商品的評價數(shù)量,然后點(diǎn)擊鼠標(biāo)右鍵后,選擇“檢查”,查找評價數(shù)量的XPath路徑。從XPath路徑為div[contains(@class,'product-box')]的元素開始,評價數(shù)量對應(yīng)的XPath相對路徑為“div[@class='res-info']/div/div[@class='info-evaluate']/a/i/text()”。步驟14:鼠標(biāo)停留在左面窗口第4件商品的經(jīng)銷商,然后點(diǎn)擊鼠標(biāo)右鍵,選擇“檢查”,查找經(jīng)銷商的XPath路徑。鼠標(biāo)停留在左面窗口第8件商品的經(jīng)銷商,然后點(diǎn)擊鼠標(biāo)右鍵,選擇“檢查”,查找經(jīng)銷商的XPath路徑。從XPath路徑“div[contains(@class,'product-box')]”開始,經(jīng)銷商對應(yīng)的XPath相對路徑為“div[@class='res-info']/div/a[contains(@class,'store-class')]/text()”或“div[@class='res-info']/div/a[contains(@class,'store-name')]/text()”。綜合2種路徑,相對路徑為“div[@class='res-info']/div/a[contains(@class,'store-class')orcontains(@class,'store-name')]/text()”。步驟15:類似上述步驟,查找商品名稱的XPath路徑,商品名稱對應(yīng)的XPath相對路徑為“div[@class='res-info']/div[@class='title-selling-point']/a/text()”。步驟16:修改phonecrawler/spiders/phone_spider.py,爬取網(wǎng)站首頁。#-*-coding:utf-8-*-importreimportscrapyfromphonecrawler.itemsimportPhonecrawlerItemclassPhoneSpiderSpider(scrapy.Spider):name='phone_spider'allowed_domains=['']start_urls=[':50001/cellphone/list.html']defparse(self,response):node_list=response.xpath("http://div[contains(@class,'product-box')]")fornodeinnode_list:item=PhonecrawlerItem()#商品名字name=node.xpath("./div[@class='res-info']/div[@class='title-selling-point']/a/text()").extract()#數(shù)據(jù)保護(hù)name=name[0]iflen(name)>0else""#替換連續(xù)空格到單個空格item['商品名稱']=re.sub("\s+","",name)#評價數(shù)量volume=node.xpath("./div[@class='res-info']/div/div[@class='info-evaluate']/a/i/text()").extract()#數(shù)據(jù)保護(hù)item['評價數(shù)量']=volume[0]iflen(volume)>0else""#經(jīng)銷商brand=node.xpath("./div[@class='res-info']/div/a[contains(@class,'store-class')orcontains(@class,'store-name')]/text()").extract()#數(shù)據(jù)保護(hù)item['經(jīng)銷商']=brand[0]iflen(brand)>0else""#詳情URLyielditem運(yùn)行startpoint.py,應(yīng)該看到文件phone_raw.csv。打開phone_raw.csv,看到如下結(jié)果:商品名稱,經(jīng)銷商,評價數(shù)量vivoiQOO7傳奇12+256G高通驍龍888+增強(qiáng)版LPDDR5120W超快閃充全感操控系統(tǒng)雙路線性馬達(dá)立體雙揚(yáng)UFS3.1雙模5G全網(wǎng)通手機(jī),自營,8700+vivoiQOONeo58+256G夜影黑5G新品,檸悅數(shù)碼旗艦店,1.1萬+AppleiPhone12ProMax,自營,4.9萬+榮耀30Pro,自營,6.0萬+榮耀榮耀V40輕奢版,自營,3.4萬+華為Mate40Pro4G,自營,1.2萬+vivovivoiQOONeo58+256GB夜影黑5G新品手機(jī),檸悅數(shù)碼旗艦店,1.1萬+vivovivoiQOONeo512+256GB云影藍(lán)5G新品手機(jī),檸悅數(shù)碼旗艦店,1.1萬+vivovivoiQOONeo512+256GB像素橙5G新品手機(jī),檸悅數(shù)碼旗艦店,1.1萬+AppleiPhone12128G白色移動聯(lián)通電信5G全網(wǎng)通,自營,21萬+除第1行列名,2~11行是手機(jī)記錄,恰好是1頁數(shù)據(jù),接下來繼續(xù)增強(qiáng)爬蟲,讓它具有翻頁爬取功能。步驟17:回到網(wǎng)站首頁,滑動頁面到最底端,鼠標(biāo)停留在頁碼“2”,然后點(diǎn)擊鼠標(biāo)右鍵后,選擇“檢查”,查看頁碼“2”的XPath路徑。頁碼“2”對應(yīng)的XPath路徑為“//div[@id="bottom_pager"]/div/a[last()]/text()”,“//”代表任意路徑。步驟18:完善phonecrawler/spiders/phone_spider.py,定義list_base_url和offset,start_urls改變?yōu)榭商鎿Q的模板,使爬蟲具有翻頁爬取功能。#-*-coding:utf-8-*-importreimportscrapyfromphonecrawler.itemsimportPhonecrawlerItemclassPhoneSpiderSpider(scrapy.Spider):name='phone_spider'allowed_domains=['']list_base_url=":50001/cellphone/list#offset#.html"offset=0#頁碼偏移量start_urls=[list_base_url.replace("#offset#","")]defparse(self,response):#更新最大頁碼ifself.offset==0:page_num=response.xpath('//div[@id="bottom_pager"]/div/a[last()]/text()').extract()[0]#數(shù)據(jù)保護(hù)self.max_pages=(int)(page_num)iflen(page_num)>0else0node_list=response.xpath("http://div[contains(@class,'product-box')]")fornodeinnode_list:item=PhonecrawlerItem()#商品名字name=node.xpath("./div[@class='res-info']/div[@class='title-selling-point']/a/text()").extract()#數(shù)據(jù)保護(hù)name=name[0]iflen(name)>0else""#替換連續(xù)空格到單個空格item['商品名稱']=re.sub("\s+","",name)#評價數(shù)量volume=node.xpath("./div[@class='res-info']/div/div[@class='info-evaluate']/a/i/text()").extract()#數(shù)據(jù)保護(hù)item['評價數(shù)量']=volume[0]iflen(volume)>0else""#經(jīng)銷商brand=node.xpath("./div[@class='res-info']/div/a[contains(@class,'store-class')orcontains(@class,'store-name')]/text()").extract()#數(shù)據(jù)保護(hù)item['經(jīng)銷商']=brand[0]iflen(brand)>0else""#詳情URLyielditem#頁碼偏移量加1self.offset+=1#未走到最后一頁就繼續(xù)爬取ifself.offset<self.max_pages:url=self.list_base_url.replace("#offset#",str(self.offset))yieldscrapy.Request(url,callback=self.parse)運(yùn)行startpoint.py,打開phone_raw.csv。打開文件,看到如下結(jié)果:商品名稱,經(jīng)銷商,評價數(shù)量vivoiQOO7傳奇12+256G高通驍龍888+增強(qiáng)版LPDDR5120W超快閃充全感操控系統(tǒng)雙路線性馬達(dá)立體雙揚(yáng)UFS3.1雙模5G全網(wǎng)通手機(jī),自營,8700+vivoiQOONeo58+256G夜影黑5G新品,檸悅數(shù)碼旗艦店,1.1萬+AppleiPhone12ProMax,自營,4.9萬+榮耀30Pro,自營,6.0萬+榮耀榮耀V40輕奢版,自營,3.4萬+商品名稱,經(jīng)銷商,評價數(shù)量vivoiQOO7傳奇12+256G高通驍龍888+增強(qiáng)版LPDDR5120W超快閃充全感操控系統(tǒng)雙路線性馬達(dá)立體雙揚(yáng)UFS3.1雙模5G全網(wǎng)通手機(jī),自營,8700+vivoiQOONeo58+256G夜影黑5G新品,檸悅數(shù)碼旗艦店,1.1萬+AppleiPhone12ProMax,自營,4.9萬+榮耀30Pro,自營,6.0萬+榮耀榮耀V40輕奢版,自營,3.4萬+【贈1年碎屏險】OPPOK7x黑鏡6G+128G30W閃充雙模5G手機(jī)全網(wǎng)通手機(jī)拍照手機(jī)游戲手機(jī)oppok7xoppo手機(jī)oppok7x,OPPO官方旗艦店,2200+三星GalaxyA515G(SM-A5160)8GB+128GB迷蹤黑SuperAMOLED屏后置四攝3200萬前置移動聯(lián)通電信全網(wǎng)通5G手機(jī),自營,7700+蘋果(Apple)iPhone11128GB黑色簡配版移動聯(lián)通電信4G全網(wǎng)通手機(jī)(不含電源適配器和耳機(jī))雙卡雙待iphone112020新款,華科手機(jī)專營店,1.2萬+康佳(KONKA)UK8直板老人機(jī)大字大聲大屏超長待機(jī)老年手機(jī)男女款移動雙卡雙待按鍵學(xué)生備用功能機(jī),自營,7400+【購機(jī)送1年碎屏保】OPPOA8天青色4GB+128GB新品手機(jī)6.5英寸水滴屏4230mAh大電池后置AI三攝全網(wǎng)通4G全面屏拍照游戲智能手機(jī)oppoa8手機(jī),時器數(shù)碼專營店,2600+任務(wù)2:Pandas清洗數(shù)據(jù)phone_raw.csv前11行記錄是重復(fù)數(shù)據(jù),需要刪除。另外,字段“評價數(shù)”的后綴“萬+”需要轉(zhuǎn)換到10進(jìn)制數(shù)字,“+”后綴刪除。接下來,采用Pandas完成數(shù)據(jù)清洗任務(wù)。步驟1:在項目根目錄New->PythonFile,創(chuàng)建data_clean.py,讀入phone_raw.csv到DataFrame類型。#encoding=utf-8importpandasaspd#讀入CSV文件到Dataframe對象labels=["商品名稱","經(jīng)銷商","評價數(shù)量"]df=pd.read_csv('phone_raw.csv',names=labels,encoding='utf-8')print(df.head())運(yùn)行data_clean.py,PyCharm控制臺輸出如下結(jié)果:商品名稱經(jīng)銷商評價數(shù)量0商品名稱經(jīng)銷商評價數(shù)量1vivoiQOO7傳奇12+256G高通驍龍888+增強(qiáng)版LPDDR5120W超...自營8700+2vivoiQOONeo58+256G夜影黑5G新品檸悅數(shù)碼旗艦店1.1萬+3AppleiPhone12ProMax自營4.9萬+4榮耀30Pro自營6.0萬+步驟2:完善data_clean.py,忽略DataFrame包含的CSV頭。#刪除第2次爬取生成的csv頭df=df[df["評價數(shù)量"]!="評價數(shù)量"]print(df.head(5))運(yùn)行data_clean.py,PyCharm控制臺輸出如下結(jié)果:商品名稱經(jīng)銷商評價數(shù)量1vivoiQOO7傳奇12+256G高通驍龍888+增強(qiáng)版LPDDR5120W超...自營8700+2vivoiQOONeo58+256G夜影黑5G新品檸悅數(shù)碼旗艦店1.1萬+3AppleiPhone12ProMax自營4.9萬+4榮耀30Pro自營6.0萬+5榮耀榮耀V40輕奢版自營3.4萬+步驟3:完善data_clean.py,刪除重復(fù)記錄。#去重df=df.drop_duplicates()print("去重后記錄行數(shù):{}".format(df.shape[0]))運(yùn)行data_clean.py,PyCharm控制臺輸出如下結(jié)果:去重后記錄行數(shù):19步驟4:完善data_clean.py,建立包含“評價數(shù)量”、“單位”列的DataFrame。#字段“評價數(shù)量”裂變成兩列:評價數(shù)(數(shù)字),單位pattern="(?P<評價數(shù)>\d+\.?\d*)(?P<單位>.?\+)"comment_df=df["評價數(shù)量"].str.extract(pattern)print(comment_df.head())運(yùn)行data_clean.py,PyCharm控制臺輸出如下結(jié)果:評價數(shù)量單位18700+21.1萬+34.9萬+46.0萬+53.4萬+步驟5:完善data_clean.py,根據(jù)字段“單位”計算十進(jìn)制的評價數(shù)。#去除評價數(shù)量后面的單位defextract_salary(x):ifx["單位"]=="萬+":salary=int(eval(x["評價數(shù)"])*10000)else:salary=(int)(eval(x["評價數(shù)"]))returnsalary#應(yīng)用extract_salary處理comment_df的每一行comment_df["評價數(shù)"]=comment_df.apply(extract_salary,axis=1)#更新原始DataFrame的字段“評價數(shù)”df["評價數(shù)量"]=comment_df["評價數(shù)"]print(df.head())運(yùn)行data_clean.py,PyCharm控制臺輸出如下結(jié)果:商品名稱經(jīng)銷商評價數(shù)量1vivoiQOO7傳奇12+256G高通驍龍888+增強(qiáng)版LPDDR5120W超...自營87002vivoiQOONeo58+256G夜影黑5G新品檸悅數(shù)碼旗艦店110003AppleiPhone12ProMax自營490004榮耀30Pro自營600005榮耀榮耀V40輕奢版自營34000步驟6:完善data_clean.py,保存清洗后的數(shù)據(jù)。#保存清洗后的數(shù)據(jù)df.to_csv("phone_clean.csv",index=False)打開phone_raw.csv,看到如下結(jié)果:商品名稱,經(jīng)銷商,評價數(shù)量vivoiQOO7傳奇12+256G高通驍龍888+增強(qiáng)版LPDDR5120W超快閃充全感操控系統(tǒng)雙路線性馬達(dá)立體雙揚(yáng)UFS3.1雙模5G全網(wǎng)通手機(jī),自營,8700vivoiQOONeo58+256G夜影黑5G新品,檸悅數(shù)碼旗艦店,11000AppleiPhone12ProMax,自營,49000榮耀30Pro,自營,60000榮耀榮耀V40輕奢版,自營,34000華為Mate40Pro4G,自營,12000vivovivoiQOONeo58+256GB夜影黑5G新品手機(jī),檸悅數(shù)碼旗艦店,11000vivovivoiQOONeo512+256GB云影藍(lán)5G新品手機(jī),檸悅數(shù)碼旗艦店,11000vivovivoiQOONeo512+256GB像素橙5G新品手機(jī),檸悅數(shù)碼旗艦店,11000AppleiPhone12128G白色移動聯(lián)通電信5G全網(wǎng)通,自營,210000OPPOK9幻彩之翼8+256G高通驍龍768G65W超級閃充90HzOLED電競屏6400萬AI三攝雙模5G全網(wǎng)通游戲拍照手機(jī),自營,300小米Redmi10XPro,自營,9100華為暢享20SE,華科手機(jī)專營店,2200realme真我GTNeo5G數(shù)字移動電話機(jī)全網(wǎng)通版,自營,3900【贈1年碎屏險】OPPOK7x黑鏡6G+128G30W閃充雙模5G手機(jī)全網(wǎng)通手機(jī)拍照手機(jī)游戲手機(jī)oppok7xoppo手機(jī)oppok7x,OPPO官方旗艦店,2200三星GalaxyA515G(SM-A5160)8GB+128GB迷蹤黑SuperAMOLED屏后置四攝3200萬前置移動聯(lián)通電信全網(wǎng)通5G手機(jī),自營,7700蘋果(Apple)iPhone11128GB黑色簡配版移動聯(lián)通電信4G全網(wǎng)通手機(jī)(不含電源適配器和耳機(jī))雙卡雙待iphone112020新款,華科手機(jī)專營店,12000康佳(KONKA)UK8直板老人機(jī)大字大聲大屏超長待機(jī)老年手機(jī)男女款移動雙卡雙待按鍵學(xué)生備用功能機(jī),自營,7400【購機(jī)送1年碎屏保】OPPOA8天青色4GB+128GB新品手機(jī)6.5英寸水滴屏4230mAh大電池后置AI三攝全網(wǎng)通4G全面屏拍照游戲智能手機(jī)oppoa8手機(jī),時器數(shù)碼專營店,2600任務(wù)3:Pandas分析數(shù)據(jù)經(jīng)過數(shù)據(jù)清洗后,采用Pandas按照經(jīng)銷商分組統(tǒng)計評價數(shù)。步驟1:在項目根目錄New–>PythonFile,創(chuàng)建data_analysis.py,讀入phone_clean.csv到DataFrame對象。#encoding=utf-8importpandasaspd#讀入CSV文件到Dataframe對象df=pd.read_csv("phone_clean.csv",header=0,encoding="utf-8")print(df.head())運(yùn)行data_analysis.py,PyCharm控制臺輸出如下結(jié)果:商品名稱經(jīng)銷商評價數(shù)量0vivoiQOO7傳奇12+256G高通驍龍888+增強(qiáng)版LPDDR5120W超...自營87001vivoiQOONeo58+256G夜影黑5G新品檸悅數(shù)碼旗艦店110002AppleiPhone12ProMax自營490003榮耀30Pro自營600004榮耀榮耀V40輕奢版自營34000步驟2:完善data_analysis.py,記錄按照經(jīng)銷商分組后,統(tǒng)計評價數(shù)。#分經(jīng)銷商統(tǒng)計評價數(shù)stats_stats=df.groupby(["經(jīng)銷商"]).sum()[["評價數(shù)量"]]print(stats_stats)運(yùn)行data_analysis.py,PyCharm控制臺輸出如下結(jié)果:評價數(shù)量經(jīng)銷商OPPO官方旗艦店2200華科手機(jī)專營店14200時器數(shù)碼專營店2600檸悅數(shù)碼旗艦店44000自營402100有了上面的結(jié)果,手工復(fù)制到ECharts圖表,完成可視化任務(wù)。任務(wù)3:ECharts可視化數(shù)據(jù)ECharts提供了多種圖表,比如柱狀圖、餅形圖、雷達(dá)圖等,這里采用常見的柱狀圖對比手機(jī)經(jīng)銷商的關(guān)注度。步驟1:在項目根目錄New->Directory,創(chuàng)建app目錄。步驟2:在app目錄下New->Directory,創(chuàng)建目錄static,然后把echarts.min.js復(fù)制到app/static目錄。步驟3:在app目錄下New->Directory,創(chuàng)建templates目錄。步驟4:在templates目錄下NewHTMLFile,創(chuàng)建single_chart.html。<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>單圖</title></head><body></body></html>步驟5:在single_chart.html中引入依賴的JS文件。<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>單圖</title><scriptsrc="../static/echarts.min.js"></script></head><body></body></html>步驟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><script>varmychart1=echarts.init(document.getElementById("chart1"));varxdata=["OPPO官方旗艦店","華科手機(jī)專營店","時器數(shù)碼專營店","檸悅數(shù)碼旗艦店","自營"];varydata=[2200,14200,2600,44000,402100];varoption={title:{text:'手機(jī)經(jīng)銷商關(guān)注度',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:'評價數(shù)'},series:[{type:'bar',name:xdata,data:ydata}]};mychart1.setOption(option);</script></body></html>鼠標(biāo)移到single_chart.html編輯窗口的任意位置,出現(xiàn)瀏覽器浮動窗口。教師備課首頁蘇州工業(yè)職業(yè)技術(shù)學(xué)院教師備課首頁SuzhouInstituteOfIndustrialTechnology第1頁課題項目三招聘Requests項目實戰(zhàn)課型理實一體授課班級大數(shù)據(jù)22C1、大數(shù)據(jù)22C2授課時數(shù)8教學(xué)目標(biāo)(1)掌握Requests爬蟲用法。(2)掌握XPath語法格式。(3)掌握從CSV文件讀取到DataFrame。(4)掌握DataFrame去重方法。(5)掌握DataFrame列裂變。(6)掌握DataFrame自定義函數(shù)轉(zhuǎn)換數(shù)據(jù)。(7)掌握DataFrame保存到CSV文件。(8)掌握DataFrame刪除列。(9)掌握DataFrame分組count統(tǒng)計。(10)理解DataFrame分組mean統(tǒng)計。(11)了解ECharts柱狀圖。(12)了解ECharts餅狀圖。教學(xué)重點(diǎn)(1)掌握Requests爬蟲用法。(2)掌握XPath語法格式。教學(xué)難點(diǎn)XPath語法格式學(xué)情分析學(xué)生零基礎(chǔ),在教學(xué)中注重引導(dǎo)學(xué)生學(xué)會自主學(xué)習(xí),培養(yǎng)學(xué)生學(xué)會查找文獻(xiàn)資料教學(xué)效果教后記任務(wù)1:Requests+XPath采集數(shù)據(jù)下面以爬取某招聘網(wǎng)站為例,介紹Requests配合XPath采集手機(jī)銷售數(shù)據(jù)的詳細(xì)步驟。步驟1:轉(zhuǎn)到Tomcat安裝目錄下的bin目錄,運(yùn)行startup.bat后,打開Chrome,訪問:50001/findjob/index1.html,顯示網(wǎng)站首頁,代表Tomcat運(yùn)行正常。步驟2:打開PyCharm,File->NewProject創(chuàng)建PyCharm項目jobvis,手工填寫項目路徑,選擇Anaconda編譯器(python.exe),點(diǎn)擊“Create”按鈕,進(jìn)入窗口“OpenProject”。點(diǎn)擊“OK”按鈕,創(chuàng)建空項目jobvis。步驟3:打開網(wǎng)站首頁,在頁面任意位置點(diǎn)擊鼠標(biāo)右鍵后,選擇“檢查”,選擇“Network”選項卡,查看HTTP請求和返回內(nèi)容。點(diǎn)擊“Clear”按鈕,清除緩存,然后在左面頁面窗口中任意位置點(diǎn)擊鼠標(biāo)右鍵,選擇“重新加載”。接著,切換到”Doc”選項卡后,選擇”list1.html”,查看RequestHeaders,保存User-Agent、cookie(如果有的話)、referer(如果有的話)3個屬性值。步驟4:在項目根目錄下New->PythonFile,創(chuàng)建findjob_spider.py,定義get_page函數(shù),起始URL指向網(wǎng)站首頁,headers的“User-Agent”值使用上面RequestHeaders復(fù)制過來的內(nèi)容。importcsvimportreimportrequestsfromlxmlimportetreefromrequests.utilsimportget_encodings_from_contentlist_base_url=":50001/findjob/index1.html"defget_page(url):#從chrome開發(fā)者工具復(fù)制User-Agent和cookie值(如果有的話)headers={'User-Agent':'Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/91.0.4472.124Safari/537.36'}#發(fā)送GET請求res=requests.get(url,headers)#查看編碼方式enconding=get_encodings_from_content(res.text)#打印網(wǎng)頁內(nèi)容html_doc=res.content.decode(enconding[0])returnhtml_doc步驟5:打開網(wǎng)站首頁(:50001/findjob/index1.html),然后在頁面空白區(qū)域點(diǎn)擊鼠標(biāo)右鍵,選擇“檢查”,在右邊“Elements”窗口查找div元素,對照左邊窗口的顯示,找到各崗位div對應(yīng)的頁面元素崗位div的XPath相對路徑為div[@class='j_joblist']/div[@class='e'],在爬蟲中用這個相對路徑匹配崗位div。步驟6:回到網(wǎng)站首頁,鼠標(biāo)停留在第1個崗位的職位名稱,然后點(diǎn)擊鼠標(biāo)右鍵后,選擇“檢查”,查找職位名稱的XPath路徑。從XPath路徑“div[@class='j_joblist']/div[@class='e']”開始,“職位名稱”字段對應(yīng)的XPath相對路徑為“a/p/span[@class='jnameat']/text()”。步驟7:鼠標(biāo)停留在左面窗口的單位名稱,然后點(diǎn)擊鼠標(biāo)右鍵后,選擇“檢查”,找到單位名稱的XPath路徑。從XPath路徑“div[@class='j_joblist']/div[@class='e']”開始,“崗位名稱”字段對應(yīng)的XPath相對路徑為“div[@class='er']/a/text()”。步驟8:類似上述步驟,查找單位屬性和發(fā)布時間的XPath路徑。從XPath路徑“div[@class='j_joblist']/div[@class='e']”開始,單位屬性對應(yīng)的XPath相對路徑為“div[@class='er']/p[@class='dcat']/text()”,發(fā)布時間對應(yīng)的XPath相對路徑為“a/p/span[@class='time']/text()”。步驟9:在findjob_spider.py中增加parse_page和website_crawl函數(shù),職位名稱、單位名稱、單位名稱和發(fā)布時間使用上面查找的XPath路徑。defparse_page(url):#解析頁面到html樹page_content=get_page(url)response=etree.HTML(page_content)#提取商品屬性node_list=response.xpath("http://div[@class='j_joblist']/div[@class='e']")fornodeinnode_list:#職位名稱span_value=node.xpath("./a/p/span[@class='jnameat']/text()")iflen(span_value)>0:jobName=re.sub("\s+","",span_value[0])else:jobName=""#單位名稱a_value=node.xpath("./div[@class='er']/a/text()")companyName=a_value[0]iflen(a_value)>0else""#單位屬性,例:['國企|500-1000人']p_value=node.xpath("./div[@class='er']/p[@class='dcat']/text()")iflen(p_value)>0:companyAttr=re.sub("\s+","",p_value[0])else:companyAttr=""#發(fā)布時間,例:06-14發(fā)布span_value=node.xpath("./a/p/span[@class='time']/text()")pubTime=span_value[0]iflen(span_value)>0else""#保存職位信息withopen('findjob_raw.csv','a',newline="",encoding='utf-8')asf:csv_write=csv.writer(f)csv_write.writerow([jobName,companyName,companyAttr,pubTime])defwebsite_crawl():current_page_url=list_base_urlparse_page(current_page_url)步驟10:在findjob_spider.py定義主函數(shù)。if__name__=='__main__':website_crawl()運(yùn)行findjob_spider.py,應(yīng)該在項目根目錄下看到文件findjob_raw.csv。打開findjob_raw.csv,看到如下結(jié)果:嵌入式硬件工程師,上海大唐移動通信設(shè)備有限公司,國企|500-1000人,06-14發(fā)布模擬電路工程師,上海磐諾儀器有限公司,民營公司|150-500人,06-14發(fā)布電子工程師(儀器研發(fā)),北京百晶生物技術(shù)有限公司,外資(非歐美)|少于50人,06-14發(fā)布高級硬件工程師,羅特尼克能源科技(北京)有限公司,合資|50-150人,06-14發(fā)布高級電氣應(yīng)用(調(diào)試)工程師,北京煜能電氣有限公司,民營公司|少于50人,06-14發(fā)布硬件工程師,煜象科技(杭州)有限公司,民營公司,06-14發(fā)布電氣設(shè)計工程師,華信永益(北京)信息技術(shù)有限公司,民營公司|500-1000人,06-14發(fā)布電子工程師,北京寶德儀器有限公司,民營公司|50-150人,06-14發(fā)布技術(shù)工程師(五險一金),廣東柏高保設(shè)備工程有限公司,民營公司|50-150人,06-14發(fā)布電池管理工程師,蔚藍(lán)空間飛行器有限公司,民營公司|少于50人,06-14發(fā)布儀表工程師,北京凱明陽熱能技術(shù)有限公司,民營公司|少于50人,06-14發(fā)布電氣技術(shù)員,北京金瀑布景觀藝術(shù)有限責(zé)任公司,民營公司|少于50人,06-14發(fā)布嵌入式電氣工程師,北京東孚久恒儀器技術(shù)有限公司,國企|50-150人,06-14發(fā)布電氣工程技術(shù)員,北京中治賽瑞科技有限責(zé)任公司,民營公司|少于50人,06-14發(fā)布硬件工程師,北京寶盈科技發(fā)展有限公司,民營公司|少于50人,06-14發(fā)布上面結(jié)果顯示15條記錄,恰好是1頁數(shù)據(jù),接下來繼續(xù)增強(qiáng)爬蟲,讓它具有翻頁爬取功能。步驟11:回到網(wǎng)站首頁,滑動頁面到最底端,鼠標(biāo)停留在最后一頁的頁碼“5”,然后點(diǎn)擊鼠標(biāo)右鍵后,選擇“檢查”,查看頁碼“5”的XPath路徑。頁碼“5”對應(yīng)的XPath路徑為“//div[@class="p_in"]/ul/li[last()-1]/a/text()”,“//”代表任意路徑,“l(fā)ast()”代表最后一個li子結(jié)點(diǎn),“l(fā)ast()-1”代表倒數(shù)第2個li子結(jié)點(diǎn)。步驟12:修改findjob_spider.py,定義list_base_url和offset,start_urls改變?yōu)榭商鎿Q的模板,完善website_crawl函數(shù),使爬蟲具有翻頁爬取功能。importrandomfromtimeimportsleeplist_base_url=":50001/findjob/index#offset#.html"defwebsite_crawl():#獲取首頁內(nèi)容start_url=list_base_url.replace("#offset#",str(1))first_page_doc=get_page(start_url)first_page_tree=etree.HTML(first_page_doc)#找到總頁數(shù)page_num=first_page_tree.xpath('//div[@class="p_in"]/ul/li[last()-1]/a/text()')page_num=(int)(page_num[0])iflen(page_num)>0else0ifpage_num:page_num=(int)(page_num)#訪問所有頁面foriinrange(1,page_num+1):current_page_url=list_base_url.replace("#offset#",str(i))#sleep(seconds)隨機(jī)間隔5~10秒爬取頁面,防止目標(biāo)網(wǎng)站攔截sleep(random.randint(5,10)+random.random())print("爬取第{}頁".format(i))parse_page(current_page_url)運(yùn)行findjob_spider.py,打開findjob_raw.csv。打開文件,看到如下結(jié)果:嵌入式硬件工程師,上海大唐移動通信設(shè)備有限公司,國企|500-1000人,06-14發(fā)布模擬電路工程師,上海磐諾儀器有限公司,民營公司|150-500人,06-14發(fā)布電子工程師(儀器研發(fā)),北京百晶生物技術(shù)有限公司,外資(非歐美)|少于50人,06-14發(fā)布高級硬件工程師,羅特尼克能源科技(北京)有限公司,合資|50-150人,06-14發(fā)布高級電氣應(yīng)用(調(diào)試)工程師,北京煜能電氣有限公司,民營公司|少于50人,06-14發(fā)布嵌入式硬件工程師,上海大唐移動通信設(shè)備有限公司,國企|500-1000人,06-14發(fā)布模擬電路工程師,上海磐諾儀器有限公司,民營公司|150-500人,06-14發(fā)布電子工程師(儀器研發(fā)),北京百晶生物技術(shù)有限公司,外資(非歐美)|少于50人,06-14發(fā)布高級硬件工程師,羅特尼克能源科技(北京)有限公司,合資|50-150人,06-14發(fā)布高級電氣應(yīng)用(調(diào)試)工程師,北京煜能電氣有限公司,民營公司|少于50人,06-14發(fā)布模擬IC設(shè)計工程師,北京芯動致遠(yuǎn)微電子技術(shù)有限公司,民營公司,06-14發(fā)布模擬電路資深設(shè)計工程師,辰芯半導(dǎo)體(深圳)有限公司,民營公司|少于50人,06-14發(fā)布FAE現(xiàn)場應(yīng)用工程師,北京維信諾光電技術(shù)有限公司,民營公司|50-150人,06-14發(fā)布任務(wù)2:Pandas清洗數(shù)據(jù)findjob_raw.csv包含90條記錄,其中前15條是重復(fù)數(shù)據(jù),需要刪除。另外,要從頁面字段“單位屬性”中解析出單位類型。接下來,采用Pandas完成數(shù)據(jù)清洗任務(wù)。步驟1:在項目根目錄New->PythonFile,創(chuàng)建data_clean.py,讀入findjob_raw.csv到DataFrame類型。importpandasaspdlabels=["職位名稱","單位名稱","單位屬性","發(fā)布時間"]df=pd.read_csv('findjob_raw.csv',names=labels,encoding='utf-8')print(df.head())運(yùn)行data_clean.py,PyCharm控制臺輸出如下結(jié)果:職位名稱單位名稱單位屬性發(fā)布時間0嵌入式硬件工程師上海大唐移動通信設(shè)備有限公司國企|500-1000人06-14發(fā)布1模擬電路工程師上海磐諾儀器有限公司民營公司|150-500人06-14發(fā)布2電子工程師(儀器研發(fā))北京百晶生物技術(shù)有限公司外資(非歐美)|少于50人06-14發(fā)布3高級硬件工程師羅特尼克能源科技(北京)有限公司合資|50-150人06-14發(fā)布4高級電氣應(yīng)用(調(diào)試)工程師北京煜能電氣有限公司民營公司|少于50人06-14發(fā)布步驟2:完善data_clean.py,刪除重復(fù)記錄。#去重df=df.drop_duplicates()print("去重后記錄行數(shù):{}".format(df.shape[0]))運(yùn)行data_clean.py,PyCharm控制臺輸出如下結(jié)果:去重后記錄行數(shù):72步驟3:完善data_clean.py,從“單位屬性”列抽取出單位類型和規(guī)模。#字段“單位屬性”裂變成二列:單位類型,規(guī)模。pattern="(?P<單位類型>.+)\|(?P<規(guī)模>.+)"compdesc_df=df["單位屬性"].str.extract(pattern)df["單位類型"]=compdesc_df["單位類型"]df["規(guī)模"]=compdesc_df["規(guī)模"]df.drop(["單位屬性"],axis=1,inplace=True)print(df[["單位類型","規(guī)模"]].head())運(yùn)行data_clean.py,PyCharm控制臺輸出如下結(jié)果:單位類型規(guī)模0國企500-1000人1民營公司150-500人2外資(非歐美)少于50人3合資50-150人4民營公司少于50人步驟4:完善data_clean.py,刪除“發(fā)布時間”列的“發(fā)布”后綴。#字段“發(fā)布時間”去掉“發(fā)布”后綴。df["發(fā)布時間"]=df["發(fā)布時間"].str.replace("發(fā)布","")print(df["發(fā)布時間"].head())運(yùn)行data_clean.py,PyCharm控制臺輸出如下結(jié)果:006-14106-14206-14306-14406-14步驟4:完善data_clean.py,保存清洗后的數(shù)據(jù)。#保存清洗后的數(shù)據(jù)df.to_csv("findjob_clean.csv",index=False)3.3.3任務(wù)3:Pandas分析數(shù)據(jù)經(jīng)過數(shù)據(jù)清洗后,采用Pandas按照經(jīng)銷商分組統(tǒng)計評價數(shù)。步驟1:在項目根目錄New–>PythonFile,創(chuàng)建data_analysis.py,讀入findjob_clean.csv到DataFrame類型。importpandasaspd#讀入csv文件到Dataframe對象df=pd.read_csv("findjob_clean.csv",header=0,encoding="utf-8")print(df.head())運(yùn)行data_analysis.py,PyCharm控制臺輸出如下結(jié)果:職位名稱單位名稱發(fā)布時間單位類型規(guī)模0嵌入式硬件工程師上海大唐移動通信設(shè)備有限公司06-14國企500-1000人1模擬電路工程師上海磐諾儀器有限公司06-14民營公司150-500人2電子工程師(儀器研發(fā))北京百晶生物技術(shù)有限公司06-14外資(非歐美)少于50人3高級硬件工程師羅特尼克能源科技(北京)有限公司06-14合資50-150人4高級電氣應(yīng)用(調(diào)試)工程師北京煜能電氣有限公司06-14民營公司少于50人步驟2:完善data_analysis.py,記錄按照單位類型分組后,統(tǒng)計招聘崗位數(shù)量。#按單位類型統(tǒng)計崗位數(shù)量stats_stats=df.groupby(["單位類型"]).count()[["職位名稱"]].reset_index().rename(columns={"職位名稱":"崗位數(shù)量"})print(stats_stats)運(yùn)行data_analysis.py,PyCharm控制臺輸出如下結(jié)果:單位類型崗位數(shù)量0上市公司21合資262國企73外企代表處14外資(歐美)55外資(非歐美)46民營公司18有了上面的結(jié)果,手工復(fù)制到ECharts圖表,完成可視化任務(wù)。3.3.4任務(wù)3:ECharts可視化數(shù)據(jù)ECharts提供了多種圖表,比如柱狀圖、餅形圖、雷達(dá)圖等,這里采用常見的餅圖對比各單位類型的崗位招聘數(shù)量比例。步驟1:在項目根目錄New->Directory,創(chuàng)建app目錄。步驟2:在app目錄下New->Directory,創(chuàng)建目錄static,然后把echarts.min.js復(fù)制到app/static目錄。步驟3:在app目錄下New->Directory,創(chuàng)建templates目錄。步驟4:在templates目錄下NewHTMLFile,創(chuàng)建single_chart.html。<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>單圖</title></head><body></body></html>步驟5:在single_chart.html中引入依賴的JS文件。<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>單圖</title><scriptsrc="../static/echarts.min.js"></script></head><body></body></html>步驟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><script>varmychart1=echarts.init(document.getElementById("chart1"));varpie_data=[{value:2,name:"上市公司"},{value:26,name:"合資"},{value:7,name:"國企"},{value:1,name:"外企代表處"},{value:5,name:"外資(歐美)"},{value:4,name:"外資(非歐美)"},{value:18,name:"民營公司"}];varoption={title:{text:'各類型公司招聘崗位比例',x:'center',textStyle:{color:'red',fontWeight:'bold',fontSize:'20'}},series:[{type:'pie',//設(shè)置圖表類型為餅圖radius:'55%',//餅圖的半徑,外半徑為可視區(qū)尺?(容器?寬中較??項)的55%長度。data:pie_data}]};mychart1.setOption(option);</script></body></html>鼠標(biāo)移到single_chart.html編輯窗口的任意位置,出現(xiàn)瀏覽器浮動窗口。選擇Chrome打開single_chart.html,可視化結(jié)果如圖3-2所示。教師備課首頁蘇州工業(yè)職業(yè)技術(shù)學(xué)院教師備課首頁SuzhouInstituteOfIndustrialTechnology第1頁課題項目四招聘Requests項目實戰(zhàn)課型理實一體授課班級大數(shù)據(jù)22C1、大數(shù)據(jù)22C2授課時數(shù)8教學(xué)目標(biāo)(1)掌握Scrapy爬蟲框架用法。(2)掌握Xpath的用法。(3)掌握從CSV文件讀取到DataFrame。(4)掌握DataFrame列裂變。(5)掌握DataFrame文字替換。(6)掌握DataFrame列數(shù)據(jù)類型轉(zhuǎn)換。(7)掌握DataFrame保存到CSV文件。(8)掌握在數(shù)據(jù)庫中新建數(shù)據(jù)表。(9)從CSV文件讀取到MySQL數(shù)據(jù)表。(10)掌握MySQL查詢數(shù)據(jù)表。(11)掌握Flask框架可視化圖表。教學(xué)重點(diǎn)(1)掌握Scrapy爬蟲用法。(2)掌握Flask框架可視化圖表。教學(xué)難點(diǎn)Flas
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 股東廠房協(xié)議合同
- 2025年城市管道智能監(jiān)測系統(tǒng)可行性研究報告
- GBT 38428.2-2021數(shù)據(jù)中心和電信中心機(jī)房安裝的信息和通信技術(shù)(ICT)設(shè)備用直流插頭插座 第2部分:5.2 kW插頭插座系統(tǒng)專題研究報告
- 采購與招標(biāo)部招標(biāo)工程師筆試考試題庫含答案
- 中煤集團(tuán)機(jī)電裝備部副部長管理能力考試題集含答案
- 行政人員面試要點(diǎn)與題目解析
- 中儲糧高級經(jīng)濟(jì)師專業(yè)知識考試大綱含答案
- 設(shè)計部設(shè)計師面試題及創(chuàng)意作品集評估含答案
- 2025年區(qū)域電子商務(wù)生態(tài)圈建設(shè)可行性研究報告
- 2025年第三方支付安全技術(shù)研究項目可行性研究報告
- 培訓(xùn)學(xué)校教師安全教育課件
- 2025年12月“第一議題”學(xué)習(xí)內(nèi)容清單
- 2025年高考化學(xué)習(xí)題分類練:化學(xué)反應(yīng)機(jī)理的探究
- 2025年關(guān)于意識形態(tài)工作自檢自查報告
- 觀賞鳥的營養(yǎng)需要
- 財稅托管托管合同范本
- 發(fā)現(xiàn)自己的閃光點(diǎn)課件
- 2025建筑節(jié)能工程監(jiān)理實施細(xì)則
- 2025-2026學(xué)年蘇教版(新教材)小學(xué)科學(xué)三年級上冊科學(xué)期末復(fù)習(xí)卷及答案
- 發(fā)電廠汽輪機(jī)副操崗位考試試卷及答案
- 阿里合伙人合同
評論
0/150
提交評論