2008年11月8日 星期六

Crawling Data in Amazon.com

最近因為research會用到music data,所以就利用Amazon提供的一個Web services(AWS) 。
第一步當然就先註冊一個userid,然後再看Amazon提供的programmer guide就可以抓data了。
不過有幾點事情比較有趣...主要的原因是因為需要music的content data,而Amazon所能提供的只有大概30秒左右的sample。當然,我還是把sample的曲目爬下來了...Orz(不知道有沒有違反著作權..不過我也只是做研究沒有商業用途)。
不過有趣的地方在於要找到某個mp3的原始url是一個耗時的地方(1. 從amazon抓html本身就耗時了; 2.要parse html找到正確的mp3 location也是個耗時的地方),所以就模擬了HTTP 1.1的作法...XD
先把系統預設(daemon thread)有10個可以跑的thread,然後每當要抓mp3 data的時候就叫醒一個thread(稱為mp3 thread)。 mp3thread只有一個動作就是抓mp3的url, 再利用stream的方式把mp3 download,然後繼續回去睡覺。daemon thread如果發現目前10個mp3thread都有再執行的話,就等待直到有其他mp3thread可以被使用為止。概念很簡單,不過卻是一個很基本的利用java做synchronize的問題。
不過mp3thread太多就會被Amazon reject掉,因為太短時間內有太多的request了..Orz