批量下載檔案(以xxx網站為例)

weixin_34253539發表於2016-03-12
爸爸經常拿個收音機聽評書,最近想幫爸爸在網上下個全集。開啟百度搜了下評書,發現有個叫評書網的網站。搜了下單田芳說的《白眉大俠》。但是隻能一回一次的單個點選下載,那不得點死。所以就想到了批量搞它。本文用的方法很簡單(大神勿噴)。
發現規律,http://www.5ips.net/down_120_001.htm這個是第一回的下載地址,用瀏覽器開啟顯示網頁原始碼發現下載地址就在裡邊那就好辦了。url[2]= "/pingshu/單田芳_白眉大俠/單田芳_白眉大俠_001.mp3?key=8de4ff27ca1e24e711d0772ebe13b454_511093084"這個是他後臺臨時生成的下載地址,過幾分鐘就會失效。規律得到了,url地址是_001表示第一回,檔案地址為_001.mp3, 如果是_002就表示第二回,檔案地址為_002.mp3。以此類推
好吧直接搞起。用urllib2直接拿到網頁
psurl0 = 'http://www.5ips.net/down_120_'
psurl0_0 = '.htm'
psurl1 = 'http://p33d.5ips.net/pingshu/單田芳_白眉大俠/單田芳_白眉大俠_'
def main(index):
    ji = "";
    if index < 10:
        ji = "00%d" %index;
    elif index < 100:
        ji = "0%d" %index;
    else:
        ji = "%d" %index
    
    url_p = psurl0 + ji + psurl0_0
    reque = urllib2.Request(url_p, headers = headers)
    content = urllib2.urlopen(reque).read()
    reg = '.mp3\?key=.*"'
    reslut = re.search(reg, content).group()
    reslut = reslut.replace('"', '')
    newpath = psurl1 + ji + reslut
    #down(newpath, ji + '.mp3')

psurl0,psurl0_0,psurl1都是固定的,變得只是下載的章數和動態生成的地址碼。由於下載地址直接顯示到網頁原始碼中了,所以不需要複雜的解析,直接用正則找到下載地址reslut

拿到下載地址了直接用urllib2.urlopen下載失敗了,但是把地址帖到瀏覽器可以播放,應該被網站禁止了。好吧,嘗試其他辦法。開啟命令列用weget下載成功。問題解決了。weget是linux系統自帶的下載工具,Mac和windows都需要自己安裝。
def down(url, file_name):
    option = 'wget -O ./白眉大俠/%s %s' %(file_name, url)
    pop = subprocess.Popen(target, stdin = subprocess.PIPE, stdout = subprocess.PIPE)
    pop.communicate(mess)

一個迴圈把320回的MP3全部搞下

相關文章