怎么用Python写个听小说的爬虫
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,这篇文章主要介绍了怎么用Python写个听小说的爬虫的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用Python写个听小说的爬虫文章都会有所收获,下面我们一起来看看吧
千家信息网最后更新 2025年01月20日怎么用Python写个听小说的爬虫
这篇文章主要介绍了怎么用Python写个听小说的爬虫的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用Python写个听小说的爬虫文章都会有所收获,下面我们一起来看看吧。
书名和章节列表
随机点开一本书,这个页面可以使用 BeautifulSoup 获取书名和所有单个章节音频的列表。复制浏览器的地址,如:https://www.tingchina.com/yousheng/disp_31086.htm。
from bs4 import BeautifulSoupimport requestsimport reimport randomimport osheaders = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36'}def get_detail_urls(url): url_list = [] response = requests.get(url, headers=headers) response.encoding = 'gbk' soup = BeautifulSoup(response.text, 'lxml') name = soup.select('.red12')[0].strong.text if not os.path.exists(name): os.makedirs(name) div_list = soup.select('div.list a') for item in div_list: url_list.append({'name': item.string, 'url': 'https://www.tingchina.com/yousheng/{}'.format(item['href'])}) return name, url_list
音频地址
打开单个章节的链接,在 Elements 面板用章节名称作为搜索词,在底部发现了一个 script,这一部分就是声源的地址。
在 Network 面板可以看到,声源的 url 域名和章节列表的域名是不一样的。在获取下载链接的时候需要注意这一点。
def get_mp3_path(url): response = requests.get(url, headers=headers) response.encoding = 'gbk' soup = BeautifulSoup(response.text, 'lxml') script_text = soup.select('script')[-1].string fileUrl_search = re.search('fileUrl= "(.*?)";', script_text, re.S) if fileUrl_search: return 'https://t3344.tingchina.com' + fileUrl_search.group(1)
下载
惊喜总是突如其来,把这个 https://t3344.tingchina.com/xxxx.mp3 放入浏览器中运行居然是 404。
肯定是少了关键性的参数,回到上面 Network 仔细观察 mp3 的 url,发现在 url 后面带了一个 key 的关键字。如下图,这个 key 是来自于 https://img.tingchina.com/play/h6_jsonp.asp?0.5078556568562795 的返回值,可以使用正则表达式将 key 取出来。
def get_key(url): url = 'https://img.tingchina.com/play/h6_jsonp.asp?{}'.format(str(random.random())) headers['referer'] = url response = requests.get(url, headers=headers) matched = re.search('(key=.*?)";', response.text, re.S) if matched: temp = matched.group(1) return temp[len(temp)-42:]
最后的最后在 __main__
中将以上的代码串联起来。
if __name__ == "__main__": url = input("请输入浏览器书页的地址:") dir,url_list = get_detail_urls() for item in url_list: audio_url = get_mp3_path(item['url']) key = get_key(item['url']) audio_url = audio_url + '?key=' + key headers['referer'] = item['url'] r = requests.get(audio_url, headers=headers,stream=True) with open(os.path.join(dir, item['name']),'ab') as f: f.write(r.content) f.flush()
完整代码
from bs4 import BeautifulSoupimport requestsimport reimport randomimport osheaders = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36'}def get_detail_urls(url): url_list = [] response = requests.get(url, headers=headers) response.encoding = 'gbk' soup = BeautifulSoup(response.text, 'lxml') name = soup.select('.red12')[0].strong.text if not os.path.exists(name): os.makedirs(name) div_list = soup.select('div.list a') for item in div_list: url_list.append({'name': item.string, 'url': 'https://www.tingchina.com/yousheng/{}'.format(item['href'])}) return name, url_list def get_mp3_path(url): response = requests.get(url, headers=headers) response.encoding = 'gbk' soup = BeautifulSoup(response.text, 'lxml') script_text = soup.select('script')[-1].string fileUrl_search = re.search('fileUrl= "(.*?)";', script_text, re.S) if fileUrl_search: return 'https://t3344.tingchina.com' + fileUrl_search.group(1) def get_key(url): url = 'https://img.tingchina.com/play/h6_jsonp.asp?{}'.format(str(random.random())) headers['referer'] = url response = requests.get(url, headers=headers) matched = re.search('(key=.*?)";', response.text, re.S) if matched: temp = matched.group(1) return temp[len(temp)-42:]if __name__ == "__main__": url = input("请输入浏览器书页的地址:") dir,url_list = get_detail_urls() for item in url_list: audio_url = get_mp3_path(item['url']) key = get_key(item['url']) audio_url = audio_url + '?key=' + key headers['referer'] = item['url'] r = requests.get(audio_url, headers=headers,stream=True) with open(os.path.join(dir, item['name']),'ab') as f: f.write(r.content) f.flush()
关于"怎么用Python写个听小说的爬虫"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"怎么用Python写个听小说的爬虫"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。
地址
章节
小说
爬虫
浏览器
浏览
知识
书名
书页
代码
关键
内容
单个
域名
篇文章
链接
面板
音频
声源
输入
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全咋骗手抄报
供电公司网络安全风险点表现形式
怎么用炒股软件开发
服务器要挤爆了
美国软件开发招聘
德化县天气预报软件开发
互联网金融科技与产业融合
部队网络安全ppt课件免费
软件开发的核心活动
360转让网络安全吗
服务器马甲条拆除
网络安全市场前景无限
从数据库提取图片预览
上饶个人服务器大概费用
软件图中的数据库和实体的关系
服务器udp问题
云南惠普服务器
网络安全卡通图片可爱
网络安全防护最低等级
容桂有哪些软件开发公司
物竞数据库app
广东省软件开发电话
数据库安全怎么讲
南京贞观互联网科技有限公司
安仁软件开发学费多少
民办的计算机软件开发电话
smaba服务器的安全模式
数据库代理作业怎么备份
图元绘图软件开发
ai算力服务器股票