Beautiful Soup标准库是一个可以从HTML/XML文件中提取数据的Python库,它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式,Beautiful Soup将会节省数小时的工作时间。pymongo标准库是MongoDb NoSql数据库与python语言之间的桥梁,通过pymongo将数据保存到MongoDb中。结合使用这两者来爬去喜马拉雅电台的数据...

Beautiful Soup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,其中一个是 lxml。本文使用的就是lxml,对于这个的安装,请看 python 3.6 lxml标准库lxml的安装及etree的使用注意
同时,本文使用了XPath来解析我们想要的部分,对于XPath与Beautiful Soup的介绍与使用请看 Beautiful Soup 4.4.0 文档 XPath 简介
本文涉及到的Beautiful Soup与XPath的知识不是很深,看看官方文档就能理解,而且我还加上了注释...
对于pymongo标准库,我就不多扯淡了,详情请看 python标准库之pymongo模块次体验

有时候,我们需要判断当前向服务器发出请求的客户端的类型,也就是通常所说的User-Agent,简称UA,我们在浏览网页时所使用的浏览器就是UA的一种,换言之,UA就是浏览器,在HTTP协议中,通过User-Agent请求头说明用户浏览器的类型,操作系统,浏览器内核等信息的标识。通过这个标识,用过所访问的网站可以显示不同的版本,从而为用户提供更好的体验或者进行信息统计。而有些网站正式利用UA来防止黑客或是像我们这种无聊的人来爬去网站的数据信息。
因此,本文代码首先就把所有的UA都给列取出来,以方便后续的爬取工作。

好了,下面来明确下我们要爬取得数据是什么:

我们需要的是图片的链接,alt等

随后我们点击图片链接之后,获取里面的详情,如果有些电台是多页的,那么我们用过xpath来依次访问。同时我们获取页面中专辑里的声音模块的sound_id...

程序如下:

import random
import requests
from bs4 import BeautifulSoup
import json
from lxml import etree
import pymongoclients = pymongo.MongoClient("localhost", 27017)
db = clients["XiMaLaYa"]
collection_1 = db["album"]
collection_2 = db["detail"]UA_LIST = ["Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1","Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6","Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6","Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1","Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5","Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3","Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SE 2.X MetaSr 1.0; SE 2.X MetaSr 1.0; .NET CLR 2.0.50727; SE 2.X MetaSr 1.0)","Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3","Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3","Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3","Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24","Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1","Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6","Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6","Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1","Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5","Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3","Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3","Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3","Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3","Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3","Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3","Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24","Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"
]
headers1 = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8','Accept-Encoding': 'gzip, deflate, sdch','Accept-Language': 'zh-CN,zh;q=0.8,en;q=0.6','Cache-Control': 'max-age=0','Proxy-Connection': 'keep-alive','Upgrade-Insecure-Requests': '1','User-Agent': random.choice(UA_LIST)  # User_agence表示用户代理
}
headers2 = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8','Accept-Encoding': 'gzip, deflate, sdch','Accept-Language': 'zh-CN,zh;q=0.8,en;q=0.6','Cache-Control': 'max-age=0','Proxy-Connection': 'keep-alive','Referer': 'http://www.ximalaya.com/dq/all/2','Upgrade-Insecure-Requests': '1','User-Agent': random.choice(UA_LIST)
}# Beautiful库用来处理XML和HTML...
# 主要就是利用BeautifulSoup模块来处理requests模块获取的Html源码
# 利用lxml模块将html源码解析成树结构,xpath来处理树节点.
def get_url():start_urls = ["http://www.ximalaya.com/dq/all/{}".format(num) for num in range(1,85)]# start_urls = ["http://www.ximalaya.com/dq/all/1"]for start_url in start_urls:html = requests.get(start_url, headers=headers1).textsoup = BeautifulSoup(html, "lxml")  # 使用lxml来处理for item in soup.find_all(class_="albumfaceOutter"):  # 解析并查找xml节点content = {'href': item.a["href"],'title': item.img['alt'],'img_url': item.img['src']}collection_1.insert(content)# another(item.a["href"])print('写入完成...')# 进入电台具体页面 http://www.ximalaya.com/15836959/album/303085,并处理分页录音...
def another(url):html = requests.get(url, headers=headers1).text# / :表示从根节点选取....# // :表示匹配选择的当前节点选择文档中的节点,而不考虑他们的位置...ifanother = etree.HTML(html).xpath('//div[@class="pagingBar_wrapper"]/a[last()-1]/@data-page')  # 页面链接地址  ifanother是list类型...if len(ifanother):  # 判断一个video的录音是否分割成了多页....num = ifanother[0]  # 获取页面数...print('本频道保存在' + num + '个页面')for n in range(1, int(num)):url2 = url + '?page={}'.format(n)get_m4a(url2)get_m4a(url)# 获取分页录音页面的详细数据...
def get_m4a(url):html = requests.get(url, headers=headers2).textnumlist = etree.HTML(html).xpath('//div[@class="personal_body"]/@sound_ids')[0].split(',')for i in numlist:murl = 'http://www.ximalaya.com/tracks/{}.json'.format(i)html = requests.get(murl, headers=headers1).textdic = json.loads(html)collection_2.insert(dic)if __name__ == "__main__":get_url()

转载于:https://www.cnblogs.com/zhiyong-ITNote/p/7172433.html

python标准库Beautiful Soup与MongoDb爬喜马拉雅电台的总结相关推荐

  1. Python爬虫库-Beautiful Soup的使用

    Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库,简单来说,它能将HTML的标签文件解析成树形结构,然后方便地获取到指定标签的对应属性. 如在上一篇文章通过爬虫 ...

  2. Python中的Beautiful Soup库(笔记)

    介绍 BeautifulSoup是一种可以从html和xml中快速提取内容的python库,共有四种类型,对于爬虫解析来说,主要用其中的遍历文档树和搜索文档树.BeautifulSoup最主要的功能是 ...

  3. python爬虫之Beautiful Soup库,基本使用以及提取页面信息

    一.Beautiful Soup简介 爬虫正则表达式参考:Python 爬虫正则表达式和re库 在爬虫过程中,可以利用正则表达式去提取信息,但是有些人觉得比较麻烦.因为花大量时间分析正则表达式.这时候 ...

  4. python——爬虫学习——Beautiful Soup库的使用-(2)

    Beautiful Soup库 执行pip install beautifulsoup4安装Beautiful Soup库 Beautiful Soup库的简介 Beautiful Soup是一个可以 ...

  5. python爬虫bs4库_04 Python爬虫之Beautiful Soup库

    Beautiful Soup库的安装 Win平台: 以管理员身份运行 cmd 执行 pip install beautifulsoup4 Beautiful Soup库的安装小测 首先,获取网页源码保 ...

  6. python第三方库排行-140种Python标准库、第三方库和外部工具

    导读:Python数据工具箱涵盖从数据源到数据可视化的完整流程中涉及到的常用库.函数和外部工具.其中既有Python内置函数和标准库,又有第三方库和工具. 这些库可用于文件读写.网络抓取和解析.数据连 ...

  7. 140种Python标准库、第三方库和外部工具都有了

    导读:Python数据工具箱涵盖从数据源到数据可视化的完整流程中涉及到的常用库.函数和外部工具.其中既有Python内置函数和标准库,又有第三方库和工具. 这些库可用于文件读写.网络抓取和解析.数据连 ...

  8. cassandra可视化工具_耗时1个月整理!160种Python标准库、第三方库和外部工具都有了...

    耗时1个月整理!160种Python标准库.第三方库和外部工具都有了 北京尚学堂 2019-12-09 14:59:15 Python数据工具箱涵盖从数据源到数据可视化的完整流程中涉及到的常用库.函数 ...

  9. [转载] 140种Python标准库、第三方库和外部工具

    参考链接: Python | 使用openpyxl在Excel文件中进行算术运算 这些库可用于文件读写.网络抓取和解析.数据连接.数清洗转换.数据计算和统计分析.图像和视频处理.音频处理.数据挖掘/机 ...

最新文章

  1. 搜索框内容自动提示bootstrap ajax
  2. Oracle:select into 查询没有记录的解决办法
  3. MaxCompute 中的Code Generation技术简介
  4. Java网络编程-1
  5. 2019.08.27BOM的六个子对象(2)
  6. 1011 A+B 和 C (15 分)—PAT (Basic Level) Practice (中文)
  7. IEEE Transactions Latex模板使用经验总结
  8. 数据库分页的几种实现
  9. 【opencv-python】寻找矩形框
  10. python语言说句心里话歌词_python数据分析:民谣歌词汇总,告诉你他们到底在唱什么...
  11. 苹果手机软件闪退怎么解决_《NBA2K21》闪退怎么办 闪退异常问题解决方法
  12. fa常用脚本,资产类表的字段详解
  13. 第三章 隐藏通信隧道技术
  14. java超简单计算器_Java实验--超级简单的计算器
  15. 内存泄漏检测工具asan
  16. 10部令人泣不成声的经典电影
  17. 测试无法测试的几乎苹果api实时搜索示例
  18. as ssd测试软件得分少,教大家AS SSD Benchmark如何测试硬盘性能
  19. 支付宝 当面付(扫描支付) 对接逻辑
  20. mb63.net/ios.html,Document

热门文章

  1. java实现斐波拉契数列
  2. 从搭讪开始,总有一款追女攻略你需要【精彩】
  3. virtual box Ubuntu 连接手机
  4. 中国三维计量软件市场趋势报告、技术动态创新及市场预测
  5. V8 手机在线安装方法 igrimace 平安易贷 借贷宝
  6. C++/MFC工程[3]——像素点的绘制
  7. 2020流动式起重机司机考试及流动式起重机司机操作证考试
  8. 在线协作助力团队合作:解析多种高效工具实现团队协同
  9. Console.WriteLine()方法
  10. this.PreviousPage.FindControl遇到MasterPage,如何查找控件?