|
楼主 |
发表于 2016-12-26 20:52:13
|
显示全部楼层
我的思路又变了,再爬取文本的过程中,我发现太慢了,而且爬了20页以后的,原来的正则表达式不适合当前的文本了,我绝对把程序切成3部分,lrc,mp3,和txt.
下面是更新的mp3:
MP3下载的更新内容如下:
1)增加了从第几页爬到第几页的功能
2)mp3文件的命名问题被我搞定了,现在的名字能体现具体的年月日了,哈哈哈哈哈哈===>(16-11-8) assisting-agriculture-in-kyrgyzstan-72473.mp3
3)文件创建文件是否重名检查,以便一次下载不完,可以多次来下载的.
4)增加一个记录的txt文件,记录当前下载的情况,防止自己忘记了,哈哈=====>2016-12-26 19:30 PM 从第61页下载到62页
5)最后我再笑几下,哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
- #51VOA下载爬虫,目前只有106页,2012-2016的更新
- import urllib.request
- import re
- import os
- import urllib.error
- import time
- def open_url(url):#打开地址用的
- req=urllib.request.Request(url)
- req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0')
- page=urllib.request.urlopen(req)
- html=page.read()
- return html
- def get_mainadd(url):#主网页返回网址列表
- html =open_url(url).decode('utf-8')
- p = r'<a href="/VOA_Standard_English/([^"]+\.html)"'
- page_addrs = re.findall(p, html)
- return page_addrs
- def get_pagedate(url):
- html =open_url(url).decode('utf-8')
- p = r'</a> ([^"]+)</li>'
- page_date = re.findall(p, html)
- return page_date
- def get_mp3add(url):
- html=open_url(url).decode('utf-8')
- p=r'<a id="mp3" href="([^"]+\.mp3)"'
- mp3_addrs=re.findall(p,html)
- return mp3_addrs
- def save_mp3(mp3_name,mp3_adds):
- with open(mp3_name,'wb') as f:
- f.write(mp3_adds)
-
- def save_ac(txt_name,txt_adds):
- with open(txt_name,'a') as f:
- f.write(txt_adds+'\n')
- f.write('-------我是可耻的换行符-------\n')
- x=1
- if __name__=='__main__':
- #工作目录
- get_cwd=os.getcwd()
- new_cwd=get_cwd+'\\51VOA_Standard'
- if os.path.exists(new_cwd) == True:
- os.chdir(new_cwd)
- else:
- os.mkdir(new_cwd)
- os.chdir(new_cwd)
- #页面输入
- num1=input('请输入开始页面:')
- num2=input('请输入结束页面:')
- a='http://www.51voa.com/VOA_Standard_'
- global x
- for i in range(int(num1),int(num2)+1):
- try:
- y=0 #爬取名字列表用的
- url=a+str(i)+'.html' #总网页,可分页
- page_url=get_mainadd(url) #返回的列表还是有问题的,网址缺少了头部.
- page_date=get_pagedate(url) #返回主页面各个时间的列表
- for j in page_url:
- new_url='http://www.51voa.com/VOA_Standard_English/'+j #分网页
- print(new_url)
- print('正在爬取第%d页,第%d个网页'%(i,x))
- x+=1
- mp3_addrs=get_mp3add(new_url) #mp3所在的网址
- for k in mp3_addrs:
- #b=k.split('/')[-2]+'-'+k.split('/')[-1]
- mp3_open=open_url(k) #打开网址
- b=page_date[y]+' '+j #命名用
- b=b.replace('html','mp3')
- y+=1
- mp3_save=save_mp3(b,mp3_open) #保存mp3,这里的程序名不能有特殊符号的,如/?等
- except urllib.error.URLError as e:
- if hasattr(e, 'code'):
- print(e.code)
- continue
- elif hasattr(e, 'reason'):
- print(e.reason)
- continue
- print('恭喜,下载结束.本次从%d页下载到%d页'%(int(num1),int(num2)))
- print(' (-*-)努力学习吧(-*-) ')
- tt=time.strftime("%Y-%m-%d %H:%M %p", time.localtime())
-
- yy=tt+' '+'mp3从第'+num1+'页下载到'+num2+'页'
- aa=save_ac('下载记录.txt',yy)
复制代码 |
|