Python爬取新概念英语第一册所有mp3内容
女儿开始学英语,上不起补习班,买了一套新概念英语竟然没有听力部分,所以下载一下吧…送给类似这种状况的大叔们。
网址:
目标:每课的名字和对应的听力部分mp3内容
查到对应的链接:
点开每课的链接,找到MP3的链接:
思路:
1,获取每课的名称和链接
2,点开课程的链接获取MP3的链接
3,下载MP3, 并按照课程名称保存
完整代码如下:
‘’‘###直接用记得copy之后path中内容改成自己的###’’’
import re
import time
import requests
import os
session = requests.session()
#step1, get each course name and href
def get_course(url):
global course_link_list, course_name_list
url_content = session.get(url).content.decode()
course_link = re.compile(r'<h3 class="list-title">.*?<a href="(.*?)".*?', re.S)
course_name = re.compile(r'<h3 class="list-title">.*?title="(.*?)".*?', re.S)
course_link_list = re.findall(course_link, url_content)
course_name_list = re.findall(course_name, url_content)
#step2, open each course href and find each audio
def get_audio(course_link_list):
global audio_list
audio_list = []
for i in range(0, len(course_link_list)):
audio_url_content = session.get(course_link_list[i]).content.decode()
audio_links = re.compile(r'<audio class=.*?src="(.*?)" />.*?', re.S)
audio_link = re.findall(audio_links, audio_url_content)[0]
time.sleep(0.05)
audio_list.append(audio_link)
#print(audio_list)
return audio_list
#step3, download and re_name each audio
def download_audio(audio_list, course_name_list):
path = r'C:\Users\Documents\python test\download_1109'
path_list = []
for i in range(len(course_name_list)):
paths = os.path.join(path, str(course_name_list[i]).strip('?') + '.mp3')
#课程名字中有特殊符号,不然会报OSError
path_list.append(paths)
for audio in enumerate(audio_list):
content = session.get(audio[1]).content
with open(path_list[audio[0]], 'wb') as f:
f.write(content)
time.sleep(0.5)
#可以增加print查看正在下载的内容
if __name__ == '__main__':
initial_url = 'http://www.hlyy.in/category/neceng/nce-1'
get_course(initial_url)
get_audio(course_link_list)
download_audio(audio_list, course_name_list)
输出的内容:
大家可以尝试第二册,第三册等其他内容。当然好多APP中已有,可以忽略。