爬取豆瓣音乐Top250详细教程

您所在的位置:网站首页 豆瓣电影top250怎么评的 爬取豆瓣音乐Top250详细教程

爬取豆瓣音乐Top250详细教程

2024-07-09 16:49| 来源: 网络整理| 查看: 265

作者:土木钟同学→→时间:2019.8.24 MongoDB数据库的使用 pymongo:在python环境中创建数据库和集合,数据库相当于Excel文件,而集合相当于其中的表格。目的: 1.创建数据库和集合2.插入爬虫得到的数据3.把集合导出为CSV文件 注意:全程不能关闭启动窗口(命令行窗口) import pymongo #导入库用于在python环境中创建数据库和集合 client = pymongo.MongoClient('localhost',27017) #连接数据库,27017为本地服务器默认地址 mydb = client['mydb'] #新建mydb数据库,列表形式存放 test = mydb['test'] #新建test数据集合,列表形式存放 test.insert_one({ 'name':'Tom', 'sex':'男', 'grade':'95' }) #插入数据,保证运行成功的前提是保证mongodb服务启动并连接,即不关闭命令行窗口

mongodb自带导出工具,通过在bin文件夹下打开命令行,输入以下命令可完成 集合 向 CSV文件 的导出:

mongexport -d mydb -c test --csv -f name,sex,grade -o test.csv其中: -d 表示数据库-c 表示集合(数据)-f 表示要导出的字段 成功后会在bin文件夹下导出test.csv文件 前期准备 用到的库: requests:请求网页lxml:解析网页re:正则表达式,用来提取数据 网页分析: 第一页:https://music.douban.com/top250 等价于 https://music.douban.com/top250?start=0第二页:https://music.douban.com/top250?start=25以此类推,每页25首歌,共10页,构造推导式:urls = [‘https://music.douban.com/top250?start={}’.format(i) for i in range(0,250,25)],其中参数三为步长。 网页结构观察: 先从主网页分析,通过审查元素找到每条音乐链接的结构,找到统一规则构建xpath代码提取250首歌的详细页url,返回列表使用循环依次读取列表中每个url,调用获取详细信息函数写入到mongodb数据库(文档型) 需要的信息: 歌曲名:用xpath获取表演者:用re获取,因为用xpath获取会出现个别错误,规则不统一流派:用re获取,因为xpath比较乱,多个标签嵌套,还有乱码的符号发行时间:用re获取,因为xpath比较乱,多个标签嵌套,还有乱码的符号出版者:用re获取,因为xpath比较乱,多个标签嵌套,还有乱码的符号评分:用xpath获取 详细代码解释

1.导入库

import requests #请求库 from lxml import etree #解析库 import re #提取库 import pymongo #数据库操作库 import time #防反爬库

2.数据库设置

client = pymongo.MongoClient('localhost',27017) #连接数据库,27017为本地服务器默认地址 mydb = client['mydb'] #新建mydb数据库,列表形式存放 doubanmusictop250 = mydb['doubanmusictop250'] #新建doubanmusictop250数据集合,列表形式存放

3.伪装浏览器设置 除了请求头还可以加入很多,在Network中的All中的Headers中可以看到

headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36'+ '(KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0' } #加入请求头

4.获取所有歌曲url

#观察网页结构,获取250首歌曲的详细url def get_url(url): html = requests.get(url,headers = headers) #发起请求 parse = etree.HTML(html.text) #使用HTML模式解析网页源代码 all_urls = parse.xpath('//a[@class='nbg']/@href') #从解析好的源码中按某一统一规则提取所有的歌曲url,组成一个集合,用列表存放 for each_url in all_urls: #循环读取每首歌的url get_informations(each_url) #调用获取歌曲详细信息的函数

5.获取每首歌url的详细信息

#观察网页结构,获取所需信息 def get_informations(url): html = requests.get(url,headers = headers) #发起请求 parse = etree.HTML(html.text) #使用HTML模式解析网页源代码 #开始获取各项所需信息,每一个信息都需要单独调试,慢慢摸索经验 name = parse.xpath('//*[@id="wrapper"]/h1/span/text()')[0] #用xpath获取歌手信息 #author = parse.xpath('//*[@id="info"]/span[1]/span/text()') #xpath并不是对所有适用,故用正则 author = re.findall('表演者:.*?>(.*?)',html.text,re.S)[0] #参数一为规则,二为网页源码,三为换行,[0]为获取第一个满足的信息 styles = re.findall('流派:;(.*?)',html.text,re.S) #可能不存在或有很多,只取第一个 if len(styles) == 0: style = '未知' #当无信息时 else: style = styles[0].strip() #有多个时获取第一个,并去除首尾的空格 time = re.findall('发行时间:;(.*?)',html.text,re.S)[0].strip() #获取第一个,并去除首尾的空格 publishers = re.findall('出版者:;(.*?)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3