爬取豆瓣音乐TOP250的数据
参考网址:https://music.douban.com/top250
因为详细页的信息更丰富,本次爬虫在详细页中进行,因此先爬取进入详细页的网址链接,进而爬取数据。
需要爬取的信息有:歌曲名、表演者、流派、发行时间、出版者和评分等。
将数据分别使用TXT、JSON、CSV存储。
import re
import csv
import time
import json
import requests
from bs4 import BeautifulSoup
from requests import RequestException def get_one_page(url):
try:
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36'
+ '(KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'}
response = requests.get(url, headers=headers)
#response.encoding = response.apparent_encoding
if response.status_code == 200:
return response.text
return None
except RequestException:
return None def get_detailurl(text):
detailurl = []
soup = BeautifulSoup(text, 'lxml')
nbg = soup.find_all(name='a', class_='nbg')
for i in nbg:
detailurl.append(i['href'])
return detailurl def parse_one_page(text):
soup = BeautifulSoup(text, 'lxml') #使用lxml XML 解析库
performer = soup.select('#info > span > span > a')
#有标签没有属性的情况下用select, 否则用find_all
song = soup.select('#wrapper > h1 > span') style = re.findall('流派:</span> (.*?)<br', text, re.S) #.*?非贪婪匹配
#re.S使.匹配包括换行在内的所有字符
if len(style) == 0: #有的页面没有流派,用NULL填充
style.append('NULL')
publisher = re.findall('出版者:</span> (.*?)?<br', text, re.S)
if len(publisher) == 0: #有的页面没有出版者,用NULL填充
publisher.append('NULL')
pattern = re.compile('发行时间:</span> (.*?)?<br', re.S)
#compile()将正则字符串编译成正则对象,方便之后复用
time = re.findall(pattern, text) score = soup.find_all(name='strong', class_="ll rating_num")
#有标签有属性的情况下用find_all
yield {
'performer': performer[0].string,
'song': song[0].string,
'style': style[0].strip(),
'time': time[0].strip(),
'publisher': publisher[0].strip(),
'score': score[0].string,
} def write_to_file(content):
with open('doubanMusicTop250.txt', 'a', encoding='utf-8') as f:
f.write(json.dumps(content, ensure_ascii=False)+'\n')
#dumps将json对象转化为字符串 def write_to_json(content):
with open('doubanMusicTop250.json', 'a', encoding='utf-8') as f:
f.write(json.dumps(content, ensure_ascii=False)+'\n') def write_to_csv(content):
with open('doubanMusicTop250.csv', 'a', encoding='utf-8') as f:
fieldnames = ['publisher', 'style', 'song', 'score', 'performer', 'time']
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader()
writer.writerows(content) if __name__ == '__main__':
url = 'https://music.douban.com/top250?start={}'
urls = [url.format(page) for page in range(0,256,25)]
content = []
for url in urls:
text1 = get_one_page(url)
detailurl = get_detailurl(text1)
for i in detailurl:
text2 = get_one_page(i)
for item in parse_one_page(text2):
print(item)
write_to_file(item)
content.append(item)
time.sleep(1)
write_to_csv(content)
write_to_json(content)
爬取豆瓣音乐TOP250的数据的更多相关文章
- Python爬虫小白入门(七)爬取豆瓣音乐top250
抓取目标: 豆瓣音乐top250的歌名.作者(专辑).评分和歌曲链接 使用工具: requests + lxml + xpath. 我认为这种工具组合是最适合初学者的,requests比pytho ...
- 实例学习——爬取豆瓣音乐TOP250数据
开发环境:(Windows)eclipse+pydev+MongoDB 豆瓣TOP网址:传送门 一.连接数据库 打开MongoDBx下载路径,新建名为data的文件夹,在此新建名为db的文件夹,d ...
- 一起学爬虫——通过爬取豆瓣电影top250学习requests库的使用
学习一门技术最快的方式是做项目,在做项目的过程中对相关的技术查漏补缺. 本文通过爬取豆瓣top250电影学习python requests的使用. 1.准备工作 在pycharm中安装request库 ...
- Python爬虫:现学现用xpath爬取豆瓣音乐
爬虫的抓取方式有好几种,正则表达式,Lxml(xpath)与BeautifulSoup,我在网上查了一下资料,了解到三者之间的使用难度与性能 三种爬虫方式的对比. 这样一比较我我选择了Lxml(xpa ...
- python2.7爬取豆瓣电影top250并写入到TXT,Excel,MySQL数据库
python2.7爬取豆瓣电影top250并分别写入到TXT,Excel,MySQL数据库 1.任务 爬取豆瓣电影top250 以txt文件保存 以Excel文档保存 将数据录入数据库 2.分析 电影 ...
- scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250
scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250 前言 经过上一篇教程我们已经大致了解了Scrapy的基本情况,并写了一个简单的小demo.这次我会以爬取豆瓣电影TOP250为例进一步为大 ...
- python 爬虫&爬取豆瓣电影top250
爬取豆瓣电影top250from urllib.request import * #导入所有的request,urllib相当于一个文件夹,用到它里面的方法requestfrom lxml impor ...
- 【转】爬取豆瓣电影top250提取电影分类进行数据分析
一.爬取网页,获取需要内容 我们今天要爬取的是豆瓣电影top250页面如下所示: 我们需要的是里面的电影分类,通过查看源代码观察可以分析出我们需要的东西.直接进入主题吧! 知道我们需要的内容在哪里了, ...
- Scrapy中用xpath/css爬取豆瓣电影Top250:解决403HTTP status code is not handled or not allowed
好吧,我又开始折腾豆瓣电影top250了,只是想试试各种方法,看看哪一种的方法效率是最好的,一直进行到这一步才知道 scrapy的强大,尤其是和selector结合之后,速度飞起.... 下面我就采用 ...
随机推荐
- 杭电------2048神上帝以及老天爷(C语言写)
#include<stdio.h> ] = { -,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,- }; ] = { }; long long jiec ...
- Android更改popupmenu背景并显示图标
似乎popupmenu是无法单独设置style的,好像是由context决定的,前几天需要设置style,找了很久才找一一个办法,似乎是通过 ContextThemeWrapper 包装一个 Cont ...
- npm/gulp/nodejs
npm淘宝镜像:https://npm.taobao.org/ vscode先安装npm淘宝镜像 再安装gulp:https://www.cnblogs.com/xiaoleiel/p/1116056 ...
- Java中的合并与重组(上)
通过优锐课核心java学习笔记中,我们可以看到,码了很多专业的相关知识, 分享给大家参考学习. 虽然在Git中合并和重组是相似的,但它们具有两种不同的功能. 要保持自己的历史记录整洁或完整,这是你应该 ...
- python爬虫步骤 (新手备学 )爬虫编程。
Python爬虫是用Python编程语言实现的网络爬虫,主要用于网络数据的抓取和处理,相比于其他语言,Python是一门非常适合开发网络爬虫的编程语言,大量内置包,可以C Python爬虫可以做的事情 ...
- 五种编程语言解释数据结构与算法——顺序表3(JavaScript与Python语言实现)
7.JavaScript语言实现 7.1.用ES6语法编写顺序表类 //1.创建类 class MyList { //1. initList(&L):初始化表.构造一个空的线性表.放回值应该是 ...
- Angular文件基本结构
main.ts(应用程序主入口) → app.module.ts app.module.ts //这个根模块会告诉Angular如何组装该应用 //引入模块 import { BrowserModul ...
- 迅雷X v10.1.29.698-免安装SVIP去广告精简版+骨头版+便携版+手雷+Mac精简版
迅雷X 10.1版本开始,采用Electron软件框架完全重写了迅雷主界面.使用新框架的迅雷X可以完美支持2K.4K等高清显示屏,界面中的文字渲染也更加清晰锐利.新框架的界面绘制.事件处理等方面比老框 ...
- 第二章.学习halcon的准备工作
*图片读取 read_image (Test1, 'C:/Users/Administrator/Desktop/new/Test1.jpg') *文件夹读取 list_files ('C:/User ...
- opencv —— 官方 示例程序
OpenCV 官方提供的示例程序,具体位于...\opencv\sources\samples\cpp 目录下. ...\opencv\sources\samples\cpp\tutorial_cod ...