< -- 星星之火,可以燎原 -- >
首  页Python 电脑应用股票操盘经典收藏摄影学习网站设计学习资料杂感随笔留言本
热门话题:人生股票故事操盘系统生活燎原股市投资古典阿零经典
当前到访用户:天涯游客        
6
python网站爬虫源代码实例:抓取有声媒体文件存储到本地
2019-12
作者:燎原 | 来源:本站原创 | 分类:Python | 阅读:337 次 | 评论:0 条

不得不说,python真的是好东西,几十行python代码写一个网页爬虫程序,就可以把音乐评书这些网页上的媒体文件下载下来。这几天迷上了听评书,跑步时听评书感觉很享受!建议刚开始计划锻炼身体的朋友也试一试,一边听一边跑,跑起来不那么累,有助于您的坚持!在网上找了一部评书《包公案》,打包下载试听发现音质很差,好不容易找到一部满意的,但无法打包下载,只能一集一集的收听,很麻烦。

无奈之下,只得用python写了个小爬虫,到该网站去爬取网页内容,把有声媒体文件下载到手机上跑步时欣赏。如果朋友们也想要这部高清的《包公案》有声评书,有兴趣的朋友自己可以动手写一下这段python网页爬虫程序代码,实在想要又不想尝试的,留言我发打包下载的地址给大家。

先说明一下,这个python爬虫比上一个《python爬取网络小说存储为TXT的网页爬虫源代码实例》难度增加了一点,因为很多网站有反爬机制,简单用一个浏览器头定义已经欺骗不了它了,必须使用一个真实的浏览器进程,这个东西朋友们可以先到网上搜索一下,如果需要详细讲的可以留言,人多我下次再写篇博文说说我个人的理解。下面是该网站《包公案评书》的网页截图:


python爬虫程序实例截图

老方法,用非IE浏览器打开该页面,按F12键打开开发者页面进行分析,注意图中红圈处,第一是网页编码,如果您是用python写爬虫程序抓小说等文字内容,这个编码要一致,否则容易出现乱码等错误。第二是标题,就是你的爬虫要抓取的东西的名称,经常会用到。第三就是你要抓取的内容了,先找DIV容器,也就是要的东西在那个DIV里,方便程序代码定位,其次是你要的章节和地址链接。


python爬虫程序实例截图

打开一个具体的章节页面分析,我们这次要爬取不是文字内容,而是一个媒体音频文件,所以我要的是真实的媒体文件地址,看图中所示,它在一个audio标签里边,标签id为jp_audio_0。另外,请朋友们注意图示中下面第二个红圈,因为python爬虫抓取到文件后我们要把它重新按照章节顺序命名再保存,并且,手机中大部分音乐播放软件默认的排序是1,10,11,12,13……19,2,20,21这样子的,所以我把要下载的媒体文件按001,002,003……这样子命名,方便顺序播放。还有,是取得文件的扩展名,因为有的文件扩展名会有例外,可能是mp3之类的,所以先取得原文件扩展名,保存到本地时仍用原来的文件格式存储,增强python爬虫程序的兼容性和容错性。


python爬虫程序实例截图

写完爬虫程序源代码,按F5运行,运行效果如下图所示。


python爬虫程序实例截图

直接上这个python爬虫源代码程序了,勤快的自己动手写,懒惰的直接复制吧,注意python代码的缩进格式哦!爬虫程序中我就不一一注释了,有兴趣讨论的朋友请留言。

import os
import urllib
import urllib.request
from bs4 import BeautifulSoup
import re
import time
import requests

#下面两行打开chrome浏览器自动运行,以真实的浏览器进程达到网站反爬目的
from selenium import webdriver
chrome = webdriver.Chrome()

target="http://www.xxx.com/mp3/163.html"
print('页面抓取中……')
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 
(KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'}
mypath='E:\\'
bookserver='http://www.xxx.com'
html=requests.get(target,headers=headers)
time.sleep(1)

#网页的编码方式
html.encoding="GB2312"
texts=BeautifulSoup(html.text,'lxml')
bookname=texts.find('div',class_='right').find('div',class_='ttt').get_text()
booknum=int(len(texts.find('div',id='vlink_1').find('ul').find_all('li')))
booklinks=texts.find('div',id='vlink_1').find('ul').find_all('a')

print('开始下载媒体:《'+bookname+'》,共有 '+str(booknum)+' 节。')
i=0
for zjlink in booklinks:
     html2=requests.get(bookserver+zjlink['href'],headers=headers)
     chrome.get(bookserver+zjlink['href'])
     html2 = chrome.page_source
     time.sleep(1)
     texts2=BeautifulSoup(html2,'lxml')
     mysrc=texts2.find('audio',id='jp_audio_0')['src']
     mytype=os.path.splitext(mysrc)[-1]

     #os.path.splitext(file)[0]获得文件名;os.path.splitext(src1)[-1]获得扩展名
     print("开始下载第"+str(i+1)+"集......,媒体地址:"+mysrc)
     if i<10:
          codenum="00"+str(i+1)
     elif 9<i>100:
          codenum="0"+str(i+1)
     else:
          codenum=str(i+1)
     #把媒体文件写入本地
     urllib.request.urlretrieve(mysrc, str(mypath)+str(codenum)+mytype)
     i+=1
print('---------------------------\n'+bookname+'下载完成!\n---------------------------')

再次提示一下,python爬虫程序有一定的法律和道德风险,希望朋友们尊重别人的版权,不要随意去爬取别人有版权声明的东西,本文所示的python爬虫源代码仅限于学习和交流,不得用于非法牟利!

本文为【燎原博客】的原创文章,由阿零于【217天前】发表在【Python 】分类下,您可以对其【发表评论】,或者引用(转载)到您的个人博客或网站,但必须保留文章的出处、链接地址以及作者等相关信息。
【文章标题】:python网站爬虫源代码实例:抓取有声媒体文件存储到本地
【链接地址】:http://aoeboke.com/archives/1912061508.html
【文章标签】:python 网站爬虫 源代码 实例 媒体文件 
本文还没有评论,赶快去抢个沙发吧!
昵称:*
邮箱:*
网站:
验证:看不清?点一下 *
本站公告
欢迎各位朋友的到来,【燎原博客】是博主自己编写网站源码设计制作的个人博客,如果您在浏览中发现有不足的地方或者有什么建议,衷心希望能反馈给我,谢谢!
淘宝客
阅读排行
按月归档
网友评论
文章标签
最新发表
博客统计
文章总数:304 篇
评论总数:121 条
留言总数:23 条
注册会员:17 人
本周更新:0 篇
网站运行:2625 天
最后更新:2020/6/18 15:46
【燎原博客】部分内容来源于网络,版权归原作者所有,如有冒犯实属无意,请及时联系告之,博主在此先行向您致歉,并将在第一时间进行删改。
本站是博主自己设计制作并编写网站程序源码,主要记录个人生活、网站设计、学习电脑及网络应用知识,并介绍一些特色软件和股票指标公式的个人博客类网站。
Designed and Powered by zhlinpb CopyRight © 2013 燎原  All Rights Reserved  滇ICP备13002614号