在初步了解了关于爬虫的原理以及较为基本的技术后,尝试进行网页数据的爬取练习。首先使用requests和beautifulsoup来爬取网页上的部分信息。(以网易云音乐上的音乐排行榜信息爬取为例),记录遇到的相关问题以及解决方法。
一、获取文本内容
1、选取目标网址
import requests
kv={'user-agent':'Mozilla/5.0'}
r=requests.get("http://music.163.com/#/discover/toplist",headers=kv,timeout=30)
虽然r.status_code 是200,但是并没有出现我想要得到的网页信息。通过对得到的网页内容进行分析,发现出现问题的地方是在爬取的连接地方。将链接中的#去掉后,爬到了需要的内容。
r=requests.get("http://music.163.com/discover/toplist",headers=kv,timeout=30)
2、提取内容
在网页中其实需要提取的是榜单中对应的音乐名称以及歌手名字。有两个地方可以提取。分别在div标签下的li下面的a标签有歌名和id;另一个地方是
div下面的textarea的内容更加详细。在textarea里面,所有歌曲的信息以字典的形式放到了列表里面。所以直接提取textarea里面的文本内容
from bs4 import BeautifulSoup
soup=BeautifulSoup(r.text,'html.parser')
InfoText=soup.find_all('div',id="song-list-pre-cache").textarea.text
得到的InforText为字符串形式,考虑用正则表达式进行提取
通过json.loads(InfoText)将字符串转换为list