本帖最后由 reinhand 于 2018-9-27 15:29 编辑
今天给儿子下载一些儿歌等到MP3,发现一个不错的网站http://www.youban.com/mp3/
资源还是挺多的嘛~~点开唐诗三百首进去看看
还挺多的,点开一个进去,可以看得到进去是简介,再点击立面的下载才到下载页面。。。一个一个下载太费事。。
仔细观察了一下,网站全是静态网页,以《春晓》为例,简介网址为http://www.youban.com/mp3-4300.html,下载网址为http://www.youban.com/mp3-d4300.html,只差一个d(管理员真懒。。)
再来看一下下载页面的源代码
,可以看到下载的真实地址就在源代码呢。。。再往上也有这个音频的名称,我们要的信息都有了,<a href="/mp3/">音频</a>><a href="/mp3-4300.html">春晓</a>这是存放名称的标签,有个href属性,记下
现在的问题时要批量下载,回到唐诗三百首专辑的页面查看原代码,
,我们要的地址出来了。。都在<a>标签里面,其中第二个<a>标签有个属性class="mp3PlayIco",而且
其他所有的子项网址都在。。好了,掏出利器开始收集网址吧,requests和beautifulsoup4模块
[Python] 纯文本查看 复制代码 import requests
from bs4 import BeautifulSoup
r = requests.get('http://www.youban.com/mp3-t4416.html')
soup = BeautifulSoup(r.text,'lxml')
a=soup.find_all('a',class_='mp3PlayIco')
urls=[]
nn=[]
for i in a:
u = i['href'].split('/')
urls.append(base+u[3].replace('mp3-','mp3-d'))
nn.append('/'+u[3])
#这里的nn存放的就是上面说到的存放名称标签的href属性的值
好了,url拿到了,开始下载,这里采用的单线程下载
[Python] 纯文本查看 复制代码 for i in range(len(a)):
try:
url1 = urls[i]
c = requests.get(url1)
soup = BeautifulSoup(c.text,'lxml')
durl = soup.find_all('a',text=u'本地网通')[0]['href']
savename = soup.find_all('a',href=nn[i])[0].text+'.mp3'
r = requests.get(durl)
with open(savename, "wb") as code:
code.write(r.content)
print 'Done'
except:
print url1
好啦,至此唐诗三百首专辑的所有MP3就下载完成啦~~ |