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. ubuntu上lamp环境搭建

    首先,介绍个彻底删除linux已经安装的软件的方法. sudo apt-get purge mysql-server mysql-client mysql-common mysql-server-5. ...

  2. Go语言学习_Win10下安装Go开发环境

    关于Go语言有多么值得学习,这里就不做介绍了,既然看了这篇文章,想必是对有学习意向. 这里是在Windows下安装Go环境,去中文社区的下载栏目,https://studygolang.com/dl ...

  3. Eclipse搭建Maven项目之准备工作

    Maven是优秀的Java项目对象模型解决方案,意为知识的积累(意地绪文),Maven可以方便的解决Java项目包依赖问题,通过配置pom.xml引入依赖,并自动引入其他依赖. 操作系统版本:wind ...

  4. xadmin与admin设置

    xadmin : 导入xadmin pip install xadmin 路由设置: import xadmin urlpatterns = [ url(r'^xadmin/', xadmin.sit ...

  5. SmileyFace——基于OpenCV的人脸人眼检测、面部识别程序

    项目地址 https://github.com/guoyaohua/SmileyFace 开发环境 Visual Studio 2010 MFC + OpenCV 功能描述 静态图像人脸检测 视频人脸 ...

  6. Linux shell的问题

    1.uptime命令可以查看当前系统的启动时间: w命令显示当前登录者top命令显示当前任务ps命令显示所有进程信息 uptime命令可以查看系统启动时间   2.使用shell时,默认的环境变量放在 ...

  7. 基于Python的Flask的开发实战(第一节Flask安装)

    1.安装python虚拟环境 easy_install virtualenv easy_install pip cd /home/admin virtualenv flask-website sour ...

  8. Phpstrom操作Git从服务器端克隆代码到本地

    1.第一步点开Git 2.添加项目的路径 第一个框是你所在的项目路径,后缀名是.git,这里我用的是HTTPS的方式(还有一种是SSH) 第二是你要克隆到所在目录,我的是在Apache下面的htdoc ...

  9. ORACLE虚拟索引(Virtual Index)

    ORACLE虚拟索引(Virtual Index)   虚拟索引概念 虚拟索引(Virtual Indexes)是一个定义在数据字典中的假索引(fake index),它没有相关的索引段.虚拟索引的目 ...

  10. linux之x86裁剪移植---字符界面sdl开发入门

    linux下有没有TurboC2.0那样的画点.线.圆的图形函数库,有没有grapihcs.h,或者与之相对应或相似的函数库是什么?有没有DirectX这样的游戏开发库?SDL就是其中之一. SDL( ...