网页抓取数据百度百科(Python爬取QQ音乐单曲之前分析目标(策略:url))
优采云 发布时间: 2022-01-30 11:24网页抓取数据百度百科(Python爬取QQ音乐单曲之前分析目标(策略:url))
一、前言
前段时间尝试爬取网易云音乐的歌曲,这次打算爬取QQ音乐的歌曲信息。网易云音乐歌单通过iframe展示,iframe的页面元素可以借助Selenium获取。
另一方面,QQ音乐采用异步加载方式,套路不同。这是主流的页面加载方式。爬起来有点难,但也是对自己的挑战。
二、Python爬取QQ音乐单曲
我之前看过的的一个视频,很好地解释了编写爬虫的一般步骤,我们也将遵循这一点。
爬虫步骤
1.确定目标
首先,我们要明确目标。这次我们爬取了QQ音乐歌手刘德华的单曲。
(百度百科)->分析目标(策略:url格式(范围)、数据格式、网页编码)->编写代码->执行爬虫
2.分析目标
歌曲链接:#tab=song&
从左边的截图可以看到,歌曲信息是分页排列的,每页显示30条,一共30页。点击页码或最右边的“>”跳转到下一页,浏览器会向服务器发送异步ajax请求。从链接中,您可以看到 begin 和 num 参数,它们代表开始歌曲的下标(截图在第 2 页)。,起始下标为30),一页返回30,服务器响应返回json格式的歌曲信息(MusicJsonCallbacksinger_track({"code":0,"data":{"list":[{"Flisten_count1 ":...]})),如果只想单独获取歌曲信息,可以直接拼接链接请求,解析返回的json格式数据。这里没有使用直接解析数据格式的方法,我使用Python中的Selenium方法,获取并解析一页单条信息后,点击“>”跳转到下一页继续解析,直到解析完所有单条信息并记录下来。最后索取各单曲的链接,获取详细信息。单信息。
右边的截图是网页的源代码。所有歌曲信息都在类名为 mod_songlist 的 div 的浮动层中。在类名为 songlist_list 的无序列表 ul 下,每个子元素 li 显示一首单曲,类名是 songlist__album 标签下的 a,收录单曲的链接、名称和时长等。
3.写代码
1)下载网页内容。这里使用的是Python的Urllib标准库,自己封装了一个下载方法:
<p> 1 def download(url, user_agent='wswp', num_retries=2):
2 if url is None:
3 return None
4 print('Downloading:', url)
5 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'}
6 request = urllib.request.Request(url, headers=headers) # 设置用户代理wswp(Web Scraping with Python)
7 try:
8 html = urllib.request.urlopen(request).read().decode('utf-8')
9 except urllib.error.URLError as e:
10 print('Downloading Error:', e.reason)
11 html = None
12 if num_retries > 0:
13 if hasattr(e, 'code') and 500