Python爬取豆瓣音乐存储MongoDB数据库(Python爬虫实战1)
1. 爬虫设计的技术
1)数据获取,通过http获取网站的数据,如urllib,urllib2,requests等模块;
2)数据提取,将web站点所获取的数据进行处理,获取所需要的数据,常使用的技术有:正则re,BeautifulSoup,xpath;
3)数据存储,将获取的数据有效的存储,常见的存储方式包括:文件file,csv文件,Excel,MongoDB数据库,MySQL数据库
2. 环境信息
1)python2.7
2)mongo2.6
3)使用模块包括re,requests,lxml,pymongo
3. 代码内容
#!/usr/bin/python
#-*- coding:utf8 -*-
#author: HappyLau,blog:http://www.cnblogs.com/cloudlab/
#目的:爬取豆瓣top250的音乐信息,将爬取的数据存入到MongoDB数据库中 import re
import sys
import requests
import pymongo
from time import sleep
from lxml import etree reload(sys)
sys.setdefaultencoding('utf8') def get_web_html(url):
'''
@params: url 通过requests获取web站点的HTML源代码数据,并返回
'''
headers = {
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0"
}
try:
req = requests.get(url,headers=headers)
if req.status_code == 200:
response = req.text.encode('utf8')
else:
response = ''
except Exception as e:
print e
return response def get_music_url(url):
'''
@params: url提供页面的url地址,获取音乐详细的URL地址,通过正则表达式获取
'''
music_url_list = []
selector = etree.HTML(get_web_html(url))
music_urls = selector.xpath('//div[@class="pl2"]/a/@href')
for music_url in music_urls:
music_url_list.append(music_url)
sleep(1)
return music_url_list def get_music_info(url):
'''
@params: 爬取url地址中音乐的特定信息
'''
print "正在获取%s音乐地址的URL地址信息..." % (url)
response = get_web_html(url)
selector = etree.HTML(response)
music_name = selector.xpath('//div[@id="wrapper"]/h1/span/text()')[0].strip()
author = selector.xpath('//div[@id="info"]/span/span/a/text()')[0].strip()
styles = re.findall(r'<span class="pl">流派:</span> (.*?)<br />',response,re.S|re.M)
if len(styles) == 0:
style = '未知'
else:
style = styles[0].strip()
publish_time = re.findall('<span class="pl">发行时间:</span> (.*?)<br />',response,re.S|re.M)[0].strip()
publish_users= re.findall('<span class="pl">出版者:</span> (.*?)<br />',response,re.S|re.M)[0].strip()
if len(publish_users) == 0:
publish_user = '未知'
else:
publish_user = publish_users[0].strip()
scores = selector.xpath('//strong[@class="ll rating_num"]/text()')[0].strip()
music_info_data = {
"music_name": music_name,
"author": author,
"style": style,
"publish_time": publish_time,
"publish_user": publish_user,
"scores": scores
}
write_into_mongo(music_info_data) def write_into_mongo(data):
'''
@params: data,将数据封装为字典,然后将其写入到MongoDB数据库中
'''
print "正在插入数据%s" % (data)
try:
client = pymongo.MongoClient('localhost',27017)
db = client.db
table = db['douban_book']
table.insert_one(data)
except Exception as e:
print e def main():
'''主函数'''
urls = ['https://music.douban.com/top250?start={}'.format(i) for i in range(0,230,25)]
for url in urls:
for u in get_music_url(url):
get_music_info(u) if __name__ == "__main__":
main()
4. 小结
使用正则re表达是获取音乐的流派时,通过"查看源代码元素"获取的代码内容和requests获取的数据结果有所差别,以requests.get()获取的结果为准。同时,在数据获取的过程中,使用re无法截取到有效的数据,后发现是编码问题导致,通过修改web网站数据的编码为utf8,即修改为req.text.encode('utf8')或者修改为req.content也能够实现相同的效果。
Python爬取豆瓣音乐存储MongoDB数据库(Python爬虫实战1)的更多相关文章
- python定时器爬取豆瓣音乐Top榜歌名
python定时器爬取豆瓣音乐Top榜歌名 作者:vpoet mail:vpoet_sir@163.com 注:这些小demo都是前段时间为了学python写的,现在贴出来纯粹是为了和大家分享一下 # ...
- Python爬虫:现学现用xpath爬取豆瓣音乐
爬虫的抓取方式有好几种,正则表达式,Lxml(xpath)与BeautifulSoup,我在网上查了一下资料,了解到三者之间的使用难度与性能 三种爬虫方式的对比. 这样一比较我我选择了Lxml(xpa ...
- Python爬取豆瓣指定书籍的短评
Python爬取豆瓣指定书籍的短评 #!/usr/bin/python # coding=utf-8 import re import sys import time import random im ...
- 利用Python爬取豆瓣电影
目标:使用Python爬取豆瓣电影并保存MongoDB数据库中 我们先来看一下通过浏览器的方式来筛选某些特定的电影: 我们把URL来复制出来分析分析: https://movie.douban.com ...
- 5分钟掌握智联招聘网站爬取并保存到MongoDB数据库
前言 本次主题分两篇文章来介绍: 一.数据采集 二.数据分析 第一篇先来介绍数据采集,即用python爬取网站数据. 1 运行环境和python库 先说下运行环境: python3.5 windows ...
- Python爬取豆瓣《复仇者联盟3》评论并生成乖萌的格鲁特
代码地址如下:http://www.demodashi.com/demo/13257.html 1. 需求说明 本项目基于Python爬虫,爬取豆瓣电影上关于复仇者联盟3的所有影评,并保存至本地文件. ...
- Python爬取豆瓣电影top
Python爬取豆瓣电影top250 下面以四种方法去解析数据,前面三种以插件库来解析,第四种以正则表达式去解析. xpath pyquery beaufifulsoup re 爬取信息:名称 评分 ...
- Python爬虫小白入门(七)爬取豆瓣音乐top250
抓取目标: 豆瓣音乐top250的歌名.作者(专辑).评分和歌曲链接 使用工具: requests + lxml + xpath. 我认为这种工具组合是最适合初学者的,requests比pytho ...
- python 爬取豆瓣书籍信息
继爬取 猫眼电影TOP100榜单 之后,再来爬一下豆瓣的书籍信息(主要是书的信息,评分及占比,评论并未爬取).原创,转载请联系我. 需求:爬取豆瓣某类型标签下的所有书籍的详细信息及评分 语言:pyth ...
随机推荐
- unbuntu 系统登录华南师范大学校园网的方法
最近刚装了unbuntu 系统,刚开始网络连接遇到了点小问题,原来是校园网不知道怎么认证,于是向好基友请教了下,得出快捷的方法如下: 下载学校网络的认证客户端,记住位置,一般都是默认下载地址是 Dow ...
- git 域名配置
在Godaddy购买的域名: 查找DNSpod解析域名,没什么难度,就是添加一条记录,保存而已,记得在添加域名到DNSpod之后,复制两个NS地址到godaddy的域名服务器下: Git项目根目录下创 ...
- .NET平台开源项目速览(20)Newlife.Core中简单灵活的配置文件
记得5年前开始拼命翻读X组件的源码,特别是XCode,但对Newlife.Core 的东西了解很少,最多只是会用用,而且用到的只是九牛一毛.里面好用的东西太多了. 最近一年时间,零零散散又学了很多,也 ...
- Winform美化MessageBox
现在在做的项目美工要求比较高,所以根据网上搜索的资料,自定义了一整套的弹出框,供大家参考,之网上其他大神有调用系统ICO的,容易导致异常,我在此使用本地资源ICO,效率高不异常.using Syste ...
- Yii如何使用数据库
1.Yii如何使用数据库 Yii通过数据库访问对象(Database Access Objects,简称DAO)来使用数据库的. DAO建立在"PHP数据对象(PDO)之上,并提供一套面向对 ...
- Mysql的sql_mode
(一) 基本介绍 set sql_mode="",即强制不设定MySql模式(如不作输入检测.错误提示.语法模式检查等)应该能提高性能,但有如下问题: 如果插入了不合适数据(错误类 ...
- PAT1001 A+B Format
思路:每三位分割,注意符号,首位不要出现逗号. AC代码 #include <stdio.h> #include <algorithm> using namespace std ...
- 网站入住各大搜索引擎的seo优化技巧
最近在公司上班的时候做了一个工业物联网的项目,上层主管提出要求,让这个网站入住各大搜索引擎,也就是说在各大搜索引擎中输入与网站相关的关键字就能搜索到我们自己的网站.刚开始自己一脸懵逼,因为之前自己并没 ...
- 基于DirectShow的MPEG-4视频传输系统的研究与实现
1 引言 近年来,随着国民经济的发展,社会各个部门对于视频监视系统的需求越来越多.但目前的很多监视系统都跟具体的硬件相关,必须要具体的采集卡的支持才能实现.所以有必要开发一种具有通用性的视频监 ...
- spring schedule定时任务(二):配置文件的方式
接着上一篇,这里使用spring配置文件的方式生成spring定时任务. 1.相应的web.xml没有什么变化,因此便不再罗列.同样的,相应的java代码业务逻辑改动也不大,只是在原来的基础上去掉@C ...