python实现网络爬虫
概述
在这一篇博客中,我会用python来实现一个简单的网络爬虫。简单的爬取一下一些音乐网站(以网易云音乐 (163.com)为例)的付费音乐。
环境准备
Python和IDE安装
首先安装python,我使用的是3.11.4. python版本迭代很快,不过这次的测试爬虫比较简单,你可以安装更新的版本如3.12.3,不会出现兼容性问题。
Python最新版本的下载地址
https://www.python.org/downloads/windows/
选择windows安装包install Now即可。下面两个选项可以选上。
IDE可用vscode或pycharm。不论你哪一个,知道怎么打开终端(Terminal)就可以。
Vscode的命令行一开始是隐藏的。用鼠标拖动下部边缘,向上拉起就能看到了。
Requests库的安装
requests属于第三方库,Python不内置,因此需要我们手动安装。无论是Windows、Linux还是Mac,都可以通
过包管理工具pip来安装requests。
在编译器的终端界面运行如下命令,即可完成requests库的安装:
pip install requests
Pycharm的终端在这里打开
使用vscode并在终端里完成pip install requests。
安装完成后可以验证一下。
•首先在编译器的终端(Terminal)中启用python环境
•在命令行中输入import requests库来测试requests是否安装成功。
没出现报错信息,则说明requests库安装成功。
另一个方法,新建一个.py文件,输入import requests,如果没有出现下划波浪线,则说明该库可以正常使用。
对网页进行分析:
通过对每首歌曲打开,进行网页源代码分析不难发现,本网页的10首歌曲都有一个共同的特点:
即前面的网址为 https://music.163.com/m/song?id= 加每首歌曲的 id 号,这很简单。
然而,我们永远想得过于简单了,到目前为止,我们仅仅是找到了些许规律,但是要真正下载到每一首歌曲,还遥不可及。
因为我们进行了这么久的分析,并没有找到歌曲的真正链接。
通过对这些内容的查找,我们是可以说,根本就无法找到音乐文件(MPEG、MP3、MPEG-4、MIDI、WMA、M4A等)。
对文件进行筛选后,我们可以找到MP3文件,当点击这些文件打开时会发现,有一个新的 Request URL
编写代码
首先,我们需要导入所需的库:
1 | import requests |
然后,我们可以创建一个函数,指定了要发送请求的URL。
1 | def get_music_url(): |
接下来使用BeautifulSoup对网页进行解析;然后,根据网页结构找到目标元素;接着,从该元素中提取出音乐文件的URL;最后,将这个URL保存在music_url
变量中并返回。
response = requests.get(url)
if response.status_code == 200:
soup = BeautifulSoup(response.text, 'html.parser')
# 在这里使用BeautifulSoup解析页面,找到包含音乐文件URL的元素
# 进行相应的操作,提取音乐文件URL
music_url = '' # 这里存储你获取到的音乐文件URL
return music_url
else:
print('Failed to access the website.')
return None
这里我们编写一个函数来下载音乐文件:
1 | def download_music(music_url, file_name): |
这个函数设计有两个输入参数:music_url
,它指向音乐文件的网络地址;file_name
,它定义了音乐文件在本地存储时的名称(这个名称需要包含文件的扩展名,例如.mp3
)。
函数内部会调用requests.get
方法来访问music_url
所指向的音乐文件。一旦成功获取到文件内容,函数会将这些内容保存到本地,文件名由file_name
参数指定。
最后,我们可以编写一个主函数来使用上述两个函数:
1 | def main(): |
运行程序以后我们可以再终端里看到下载成功的提示
可以看到,MP3文件已经被下载下来了。