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. 代码内容

 1 #!/usr/bin/python2 #-*- coding:utf8 -*-3 #author: HappyLau,blog:http://www.cnblogs.com/cloudlab/4 #目的:爬取豆瓣top250的音乐信息,将爬取的数据存入到MongoDB数据库中5 6 import re7 import sys8 import requests9 import pymongo
10 from time import sleep
11 from lxml import etree
12
13 reload(sys)
14 sys.setdefaultencoding('utf8')
15
16
17 def get_web_html(url):
18     '''
19     @params: url 通过requests获取web站点的HTML源代码数据,并返回
20     '''
21     headers = {
22         "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0"
23     }
24     try:
25         req = requests.get(url,headers=headers)
26         if req.status_code == 200:
27             response = req.text.encode('utf8')
28         else:
29             response = ''
30     except Exception as e:
31         print e
32     return response
33
34 def get_music_url(url):
35     '''
36     @params: url提供页面的url地址,获取音乐详细的URL地址,通过正则表达式获取
37     '''
38     music_url_list = []
39     selector = etree.HTML(get_web_html(url))
40     music_urls = selector.xpath('//div[@class="pl2"]/a/@href')
41     for music_url in music_urls:
42         music_url_list.append(music_url)
43         sleep(1)
44     return music_url_list
45
46 def get_music_info(url):
47     '''
48     @params: 爬取url地址中音乐的特定信息
49     '''
50     print "正在获取%s音乐地址的URL地址信息..." % (url)
51     response = get_web_html(url)
52     selector = etree.HTML(response)
53     music_name = selector.xpath('//div[@id="wrapper"]/h1/span/text()')[0].strip()
54     author = selector.xpath('//div[@id="info"]/span/span/a/text()')[0].strip()
55     styles = re.findall(r'<span class="pl">流派:</span>&nbsp;(.*?)<br />',response,re.S|re.M)
56     if len(styles) == 0:
57         style = '未知'
58     else:
59         style = styles[0].strip()
60     publish_time = re.findall('<span class="pl">发行时间:</span>&nbsp;(.*?)<br />',response,re.S|re.M)[0].strip()
61     publish_users= re.findall('<span class="pl">出版者:</span>&nbsp;(.*?)<br />',response,re.S|re.M)[0].strip()
62     if len(publish_users) == 0:
63         publish_user = '未知'
64     else:
65         publish_user = publish_users[0].strip()
66     scores = selector.xpath('//strong[@class="ll rating_num"]/text()')[0].strip()
67     music_info_data = {
68         "music_name": music_name,
69         "author": author,
70         "style": style,
71         "publish_time": publish_time,
72         "publish_user": publish_user,
73         "scores": scores
74     }
75     write_into_mongo(music_info_data)
76
77 def write_into_mongo(data):
78     '''
79     @params: data,将数据封装为字典,然后将其写入到MongoDB数据库中
80     '''
81     print "正在插入数据%s" % (data)
82     try:
83         client = pymongo.MongoClient('localhost',27017)
84         db = client.db
85         table = db['douban_book']
86         table.insert_one(data)
87     except Exception as e:
88         print e
89
90 def main():
91     '''主函数'''
92     urls = ['https://music.douban.com/top250?start={}'.format(i) for i in range(0,230,25)]
93     for url in urls:
94         for u in get_music_url(url):
95             get_music_info(u)
96
97
98 if __name__ == "__main__":
99     main()

4. 小结

  使用正则re表达是获取音乐的流派时,通过"查看源代码元素"获取的代码内容和requests获取的数据结果有所差别,以requests.get()获取的结果为准。同时,在数据获取的过程中,使用re无法截取到有效的数据,后发现是编码问题导致,通过修改web网站数据的编码为utf8,即修改为req.text.encode('utf8')或者修改为req.content也能够实现相同的效果。

Python爬取豆瓣音乐存储MongoDB数据库(Python爬虫实战1)相关推荐

  1. python爬取电影网站存储于数据库_python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析...

    字符串常用方法 # 去掉左右空格 'hello world'.strip() # 'hello world' # 按指定字符切割 'hello world'.split(' ') # ['hello' ...

  2. 利用python爬取豆瓣音乐_Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析

    节点的子节点,获取排名的代码为:li.span.text 绿色框中A节点中是歌曲的链接和图片链接,获取歌曲链接的代码为:li.a['href'] 蓝色框中是歌曲的名字.演唱者和播放次数,歌曲名是在cl ...

  3. python爬取豆瓣电影top250的代码_Python爬虫——爬取豆瓣电影Top250代码实例

    利用python爬取豆瓣电影Top250的相关信息,包括电影详情链接,图片链接,影片中文名,影片外国名,评分,评价数,概况,导演,主演,年份,地区,类别这12项内容,然后将爬取的信息写入Excel表中 ...

  4. 利用python爬取豆瓣音乐_Python爬虫小白入门(七)爬取豆瓣音乐top250

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

  5. python爬取boss直聘招聘信息_Python爬虫实战-抓取boss直聘招聘信息

    Python Python开发 Python语言 Python爬虫实战-抓取boss直聘招聘信息 实战内容:爬取boss直聘的岗位信息,存储在数据库,最后通过可视化展示出来 PS注意:很多人学Pyth ...

  6. python爬取腾讯视频弹幕_网络爬虫实战(四):爬取腾讯视频电视剧弹幕-Go语言中文社区...

    文章目录 实战背景 说到被翻拍最多的大概就是金庸先生的剧了,有华人的地方就会有金庸剧.而在他的多部小说中,翻拍次数最多的无疑就是<倚天屠龙记>了,而且次数已经高达十四次.最早的是1963香 ...

  7. python爬取电影网站存储于数据库_Python零基础爬虫教程(实战案例爬取电影网站资源链接)...

    前言 好像没法添加链接,文中的链接只能复制到浏览器查看了 这篇是我写在csdn的,那里代码格式支持更好,文章链接 https://blog.csdn.net/d497465762/article/de ...

  8. 利用python爬取豆瓣音乐_python爬虫之豆瓣音乐top250

    回家很久了,实在熬不住,想起来爬点数据玩一玩,之前自己笔记本是win7加ubuntu16.04双系统,本打算在ubuntu里写代码的,可是回到家ubuntu打开一直是紫屏,百度知乎方法用了也没解决,厉 ...

  9. python爬取豆瓣代码_小白的python爬虫,40代码教你爬取豆瓣小说

    这篇文章写了很久了,一直没有发布: 爬虫学的差不多了,觉得这篇文章对新手实践还是有些作用的.毕竟这也是我刚学爬虫的时候练习的,爬取了比较好爬的网站,也比较经典:多余的解释不说了,代码里每一行都有注释, ...

最新文章

  1. QIIME 2用户文档. 20命令行界面q2cli(2019.7)
  2. 如何在页面加载完成后再去做某事?什么方法可以判断当前页面加载已完成?...
  3. 图解RadASM使用初步
  4. 设计模式--模板方法(Template Method)模式
  5. CSDN编程挑战——《交替字符串》
  6. JQuery--事件
  7. 推荐系统相关资源搜集
  8. 信息学奥赛一本通 1033:计算线段长度 | OpenJudge NOI 1.3 16
  9. Numpy 通用函数
  10. 哈希表 哈希函数 时间_您需要了解的哈希函数
  11. 第三十一章 与昔一何殊勇怯(一之全)
  12. 开源软件修改的必要性
  13. php 速卖通产品采集,AliExpress(速卖通)关键词搜索结果采集 - 八爪鱼采集器
  14. 好好说话之off-by-one
  15. adobe xd_如何在Adobe XD中创建Finance App UI设计
  16. PS进阶篇——如何PS软件给公司单位图片加版权水印(六)
  17. el-badge 标记
  18. memcpy 内存越界分析
  19. 周鸿祎力荐|纽约客16000字重磅刊文:区块链是回归互联网本质的唯一希望
  20. 接互联网外包项目方案

热门文章

  1. Contrast Invariant SNR and Isotonic Regressions
  2. Excel中计算平方和的技巧
  3. 网站建设发展的几点中肯建议
  4. 【调剂】防灾科技学院资源与环境(专硕)专业接受地下水科学与工程、工程地质等多个专业考生调剂...
  5. 音乐的版权算不算是属于著作权
  6. 网购珠宝需谨慎:配套细则待完善
  7. Java支付宝登录API列表
  8. 利用css实现黑白版img图片切换
  9. Android 录音实现方法、仿微信语音、麦克风录音、发送语音、解决5.0以上BUG
  10. Git之GitFlow工作流 | Gitflow Workflow(万字整理,已是最详)