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>&nbsp;(.*?)<br />',response,re.S|re.M)
if len(styles) == 0:
style = '未知'
else:
style = styles[0].strip()
publish_time = re.findall('<span class="pl">发行时间:</span>&nbsp;(.*?)<br />',response,re.S|re.M)[0].strip()
publish_users= re.findall('<span class="pl">出版者:</span>&nbsp;(.*?)<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)的更多相关文章

  1. python定时器爬取豆瓣音乐Top榜歌名

    python定时器爬取豆瓣音乐Top榜歌名 作者:vpoet mail:vpoet_sir@163.com 注:这些小demo都是前段时间为了学python写的,现在贴出来纯粹是为了和大家分享一下 # ...

  2. Python爬虫:现学现用xpath爬取豆瓣音乐

    爬虫的抓取方式有好几种,正则表达式,Lxml(xpath)与BeautifulSoup,我在网上查了一下资料,了解到三者之间的使用难度与性能 三种爬虫方式的对比. 这样一比较我我选择了Lxml(xpa ...

  3. Python爬取豆瓣指定书籍的短评

    Python爬取豆瓣指定书籍的短评 #!/usr/bin/python # coding=utf-8 import re import sys import time import random im ...

  4. 利用Python爬取豆瓣电影

    目标:使用Python爬取豆瓣电影并保存MongoDB数据库中 我们先来看一下通过浏览器的方式来筛选某些特定的电影: 我们把URL来复制出来分析分析: https://movie.douban.com ...

  5. 5分钟掌握智联招聘网站爬取并保存到MongoDB数据库

    前言 本次主题分两篇文章来介绍: 一.数据采集 二.数据分析 第一篇先来介绍数据采集,即用python爬取网站数据. 1 运行环境和python库 先说下运行环境: python3.5 windows ...

  6. Python爬取豆瓣《复仇者联盟3》评论并生成乖萌的格鲁特

    代码地址如下:http://www.demodashi.com/demo/13257.html 1. 需求说明 本项目基于Python爬虫,爬取豆瓣电影上关于复仇者联盟3的所有影评,并保存至本地文件. ...

  7. Python爬取豆瓣电影top

    Python爬取豆瓣电影top250 下面以四种方法去解析数据,前面三种以插件库来解析,第四种以正则表达式去解析. xpath pyquery beaufifulsoup re 爬取信息:名称  评分 ...

  8. Python爬虫小白入门(七)爬取豆瓣音乐top250

      抓取目标: 豆瓣音乐top250的歌名.作者(专辑).评分和歌曲链接 使用工具: requests + lxml + xpath. 我认为这种工具组合是最适合初学者的,requests比pytho ...

  9. python 爬取豆瓣书籍信息

    继爬取 猫眼电影TOP100榜单 之后,再来爬一下豆瓣的书籍信息(主要是书的信息,评分及占比,评论并未爬取).原创,转载请联系我. 需求:爬取豆瓣某类型标签下的所有书籍的详细信息及评分 语言:pyth ...

随机推荐

  1. PHP开发中多种方案实现高并发下的抢购、秒杀功能

    抢购.秒杀是如今很常见的一个应用场景,主要需要解决的问题有两个: 1 高并发对数据库产生的压力 2 竞争状态下如何解决库存的正确减少("超卖"问题) 对于第一个问题,已经很容易想到 ...

  2. Android Stdio 如何自定义生成APK的名称

    Android Stdio自动默认生成的app的名称都是app-release或者app-debug,生成完后还要手动更改apk的名称,很是麻烦. 自定义生成APK的名称的方法:在\app\build ...

  3. SDL 2.0 如何在 windows 上使用?

    https://wiki.libsdl.org/APIByCategory http://adolfans.github.io/sdltutorialcn/sdl-2-dot-0-tutorial-i ...

  4. nyoj61 传纸条(一) dp

    思路:两人一个从左上角出发只能向右和向下,另一人从右下角出发只能向左和向上,可以看做两人都是从右下角出发,且只能向左和向上传纸条,并且两条路径不会相交,因为一个人只会传一次,那么随便画一个图就能知道两 ...

  5. java读取数据写入txt文件并将读取txt文件写入另外一个表

    package com.xsw.test; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.F ...

  6. 网站入住各大搜索引擎的seo优化技巧

    最近在公司上班的时候做了一个工业物联网的项目,上层主管提出要求,让这个网站入住各大搜索引擎,也就是说在各大搜索引擎中输入与网站相关的关键字就能搜索到我们自己的网站.刚开始自己一脸懵逼,因为之前自己并没 ...

  7. MySQL基础学习笔记

    一.数据库基本概念 1.1 数据库 - Database 从字面意思看,数据库就是一个存储数据的仓库.从计算机的角度来讲,数据库(Datebase)是按照数据结构来组织.存储和管理数据的仓库. 简单来 ...

  8. 面试为什么需要了解JVM

    匠心零度 转载请注明原创出处,谢谢! 说在前面 如果你经常注意面试题,你会发现现在面试题多多少少会含有jvm相关的面试题,之前也把一些jvm面试题汇总了下:面试题系列一,那么为什么现在面试需要了解或者 ...

  9. c# try-finally有什么用

     finally 代码块中的代码是 try-catch 结构执行完后无论有无异常发生都会执行的.finally 代码块中的代码是 try-catch 结构执行完后无论有无异常发生都会执行的.final ...

  10. 【前端】Vue2全家桶案例《看漫画》之番外篇、express上传漫画(可选)

    转载请注明出处:http://www.cnblogs.com/shamoyuu/p/vue_vux_app_extra_1.html 项目github地址:https://github.com/sha ...