《Perl程序設(shè)計與數(shù)據(jù)挖掘》課程設(shè)計報告_第1頁
《Perl程序設(shè)計與數(shù)據(jù)挖掘》課程設(shè)計報告_第2頁
《Perl程序設(shè)計與數(shù)據(jù)挖掘》課程設(shè)計報告_第3頁
《Perl程序設(shè)計與數(shù)據(jù)挖掘》課程設(shè)計報告_第4頁
《Perl程序設(shè)計與數(shù)據(jù)挖掘》課程設(shè)計報告_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡介

《Perl程序設(shè)計與數(shù)據(jù)挖掘》課程設(shè)計報告姓名:程輝班級:計算機(jī)06-2學(xué)號:0611310201問題描述:我們常用百度MP3搜索來下載歌曲,但需要一首一首地來下載,而且下載每首歌需要打開多個頁面,甚是麻煩。平時常用的迅雷下載工具非常適合批量下載,若能從百度MP3網(wǎng)頁中批量獲取歌曲的URL,并存入文件,建立迅雷能夠識別的下載列表,此問題即解決。編程思路:以百度的“歌曲TOP500”列表頁為例:/topso/mp3topsong.html?top2。分以下幾步驟:下載列表頁,并存入臨時文件;分析列表頁HTML,抽取每道歌的歌名,作者,以歌曲的搜索頁。以排名第一的歌曲為例:歌名是《北京歡迎你》,作者是群星,搜索頁是:/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%B1%B1%BE%A9%BB%B6%D3%AD%C4%E3+%C8%BA%D0%C7;將2中搜索頁地址傳遞給processURL1,此函數(shù)打開并下載該網(wǎng)頁,分析HTML,抽取第一個搜索項(xiàng)的URL:2/m?ct=134217728&tn=baidusg,%B1%B1%BE%A9%BB%B6%D3%AD%C4%E3%20%20&word=mp3,/dz/month_0804/Y2JjbGVqaHGQZ5RrlmZsbpZmbJVpZ2uaaWtqmWumsYiUrJ1rfp1uo2oy.mp3,,[%B1%B1%BE%A9%BB%B6%D3%AD%C4%E3+%C8%BA%D0%C7]&si=%B1%B1%BE%A9%BB%B6%D3%AD%C4%E3;;%C8%BA%D0%C7;;0;;0&lm=16777216,并將此地址傳遞給processURL2;processURL2打開該網(wǎng)頁,找到歌曲下載的真正地址:/dz/month_0804/20080419_5a7a056e49a414b897e6pzPczj7Ig7k9.mp3,并返回給Main函數(shù);Main函數(shù)將歌名、作者、下載地址寫入Log.lst文件,供迅雷下載使用。程序源碼:見Task.pl或附件。輸入數(shù)據(jù):見圖1.輸出數(shù)據(jù):Log.lst中數(shù)據(jù)如下:1、群星-北京歡迎你/Upload/bjwelcome.wma2、楊丞琳-左邊/Skyclass/Courseware/Blog/Blog60/070324226951.wma3、張棟梁-北極星的眼淚/2018/f/wma/beiji.wma4、蔡依林-日不落/01.mp35、徐譽(yù)滕-等一分鐘/1min.mp36、周杰倫-青花瓷/qhc.mp37、海鳴威-老人與海/mp3/老人與海.mp38、弦子-舍不得6/wm1223/1207539029.wma9、吳克群-為你寫詩/hm_fm103/upfiles/排行榜/音樂排行榜(港臺)/牽牽牽手%20%20吳克群.mp310、梁靜茹-會呼吸的痛/3gp2_new2/20071223/梁靜茹()會呼吸的痛.3gp歌曲列表已經(jīng)下載完成!將此文件導(dǎo)入迅雷即可下載。圖1:輸入數(shù)據(jù)及終端顯示結(jié)果過程描述及編程體會:整個過程花了兩天時間,第一天把課件全部重新看了一遍,并把重要例題都實(shí)現(xiàn)了。第一天晚上及第二天上午在網(wǎng)上補(bǔ)充學(xué)習(xí)課件中不詳細(xì)的地方,如CFAN模塊的使用,子程序,正則表達(dá)式等內(nèi)容。并研討了幾個綜合實(shí)例。下午程序核心功能完成,然后開始調(diào)試查錯,調(diào)試過程中發(fā)現(xiàn)了很多可以改進(jìn)的地方,如開始設(shè)計只能下載一個列表,然后修改正則式,則可以下載百度MP3中幾乎所有歌曲列表,并添加了選擇列表功能及控制下載數(shù)量。查錯過程還比較順利,分別測試每個模塊,都沒問題了,再組裝到一起。Perl的錯誤提示也比較有效,基本都能找到錯誤點(diǎn)。但有一個錯誤卻花了不少時間,就是程序的中間有個花括號方向錯了,應(yīng)該是},卻寫成了{(lán),錯誤提示一直指到程序的最末一行。最后一行一行地檢查才找到這個錯誤。存在的問題及思考:網(wǎng)速過慢時,下載過多歌曲列表時會讓人有點(diǎn)受不了。教育網(wǎng)內(nèi)如果不用代理,速度則很慢,下載十首歌的列表時需要一兩分鐘,而用代理則只需要幾秒鐘。不知百度的蜘蛛是如何做到快速地在遍歷全球WEB站點(diǎn)的??梢韵氲降霓k法是用無數(shù)的蜘蛛以極大的寬帶來遍歷,當(dāng)然還得需要優(yōu)良的算法。正則表達(dá)式是如何做到快速匹配的?它的效率是不是很高?對它的原理還不清楚,以后學(xué)習(xí)過程中需要花時間來研究它。附件:Task.pl#####################################程序名:百度MP3小蜘蛛#作用:獲取百度MP3網(wǎng)站上歌曲列表(如歌曲TOP500等列表)中每首歌曲的信息及下載地址(URL)#作者:程輝freedomhui@#函數(shù):Main:獲取歌曲的名字、作者及歌曲的搜索頁的URL,并將URL傳遞給processURL1。#processURL1:從歌曲的搜索頁中抽取第一項(xiàng)搜索結(jié)果的URL,并傳遞給processURL2。#processURL2:此時的URL頁面中已經(jīng)包含歌曲的真正下載地址,找到并傳給主函數(shù)Main中處理。#說明:由于百度MP3列表頁HTML可能變化,導(dǎo)致此程序失效,此時只需要修改幾個正則式即可。#由于網(wǎng)速原因,可能獲取速度可能很慢??上葴y試瀏覽器訪問的速度,再決定抓取多少歌曲URL。#適用平臺:WINDOWS/LINUX/UNIX。編譯器:PerlV5.8.8#####################################!/usr/bin/perlusestrict"refs";usestrict'vars';useLWP::Simple;my$line;my$tempFile='temp.txt';my$logFile='Log.lst';my%tops=(1=>'/list/newhits.html?top1',2=>'/topso/mp3topsong.html?top2',3=>'/list/movies.html?top4',4=>'/list/tvs.html?top5',5=>'/list/oldsong.html?top6',6=>'/list/duichang.html?top9',7=>'/list/xiangsheng.html?top17',8=>'/list/qingyinyue.html?top19',9=>'/minge/mp3topsong.html?top12',);print"可以下載的歌曲列表:\n";print"1、新歌TOP100\n2、歌曲TOP500\n3、電影金曲\n4、電視金曲\n5、經(jīng)典老歌\n6、熱門對唱\n7、相聲小品薈萃\n8、輕音樂\n9、中國民樂\n";print"請選擇列表編號:";chomp(my$choice=<STDIN>);print"請輸入下載數(shù)目(1~500):";chomp(my$number=<STDIN>);my$ListURL=$tops{$choice};&Main; subMain{my$i=1;my($author,$musicName,$musicURL);open(IN,">$tempFile")ordie"Cannotopen$tempFile,because:$!";print"Begindownloading$ListURL\n";printINget($ListURL);closeIN;print"DownloadFinished!\n";open(LOG,">>$logFile")ordie"Cannotopen$tempFile,because:$!";open(TMP,"<$tempFile")ordie"Cannotopen$tempFile,because:$!";while(my$line=<TMP>){if($line=~m/<input\stype=hidden\sname=refreshtime\svalue=\@\+RESBODY\+@>/)#歌曲列表之前的唯一標(biāo)識。以下為列表開始。{last;}}print"Begincollectsong'sURL...\n";while(my$line=<TMP>){if($line=~m/<input\stype=hidden\sname=refreshtime\svalue=\@\-RESBODY\-@>/)#歌曲列表之后的唯一標(biāo)識。到此列表結(jié)束。{last;}else{if($line=~m/class=\"border\"><a\shref=\"(.*)\"\starget=_blank>(.*)<\/a>/i)#找歌名及搜索頁URL。{$musicURL=$1;$musicName=$2;$musicName=~s/^<b>//;$musicName=~s/<\/b>//;while($line=<TMP>){if($line=~m/target=_blank>(.*)<\/a>\)/)#找歌曲作者。有三種情況,此處為只有一個作者的情況。{$author=$1;print"CollectingNo.$isong:$author-$musicName\n";last;}elsif($line=~m/\(<A\s\shref=\".*\"\s\s\starget=_blank>(.*)<\/a>\/<a\s\shref=\".*\"\s\s\starget=_blank>(.*)<\/a>\)/i)#此處為有兩個作者的情況。{ $author=$1."/".$2;print"CollectingNo.$isong:$author-$musicName\n";last;}else#此處為沒有作者的情況。{$author="佚名";print"CollectingNo.$isong:$author-$musicName\n";last;}next;}processURL1($musicURL);#在歌曲搜索頁中找第一項(xiàng)搜索結(jié)果。processURL2($musicURL);#找到真正的下載地址。printLOG"$i、$author-$musicName\n$musicURL\n";#將列表信息輸出到Log.lst $i++;if($i>$number){ last; }}}next;} printLOG"歌曲列表已經(jīng)下載完成!將此文件導(dǎo)入迅雷即可下載。\n";close(LOG);close(TMP); print"下載歌曲的URL列表已經(jīng)保存到Log.lst!"; system("deltemp.txttemp1.txttemp2.txt");#刪除臨時文件。WINDOWS用此語句,LINUX/UNIX用下面的。 #system("rmtemp.txttemp1.txttemp2.txt");}subprocessURL1{my$tempFile="temp1.txt";my$mURL=$_[0];my$line;open(TMP1,">$tempFile")ordie"Cannotopen$tempFile,because:$!";printTMP1get($mURL);closeTMP1;open(TMP1,"<$tempFile")ordie"Cannotopen$tempFile,because:$!";while($line=<TMP1>){if($line=~/<td\sclass=tdn>1<\/td>/){last;}}

溫馨提示

  • 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

提交評論