思路
1. 构造请求页面的URL
每个页面由歌手分类和歌手名字的大写字母值构成,比如,”http://music.163.com/discover/artist/cat?id=1001&initial=65“,就是请求华语男歌手,字母为”A”的所有歌手
2. 请求数据
请求数据使用的是requests包,当请求的网址没有错误并且status_code为200时,返回网页的内容。
注意:这里并没改变请求的headers,也没有使用代理
3. 解析数据
使用lxml包进行html解析,抓取包括歌手id,name,cat,userhome四个信息
4. 存储到MongoDB
存储时将歌手id作为数据表的’_id’,由于歌手id唯一性,可以防止数据库中的文档重复插入
import requests
from requests.exceptions import RequestException
from lxml import etree
from pymongo import MongoClient
from concurrent import futures
CATS = {
'1001': '华语男歌手',
'1002': '华语女歌手',
'1003': '华语组合/乐队',
'2001': '欧美男歌手',
'2002': '欧美女歌手',
'2003': '欧美乐队/组合',
'6001':