爬虫案例—抓取找歌词网站的按歌词找歌名数据

爬虫案例—抓取找歌词网站的按歌词找歌名数据

找个词网址:https://www.91ge.cn/lxyyplay/find/

目标:抓取页面里的所有要查的歌词及歌名等信息,并存为txt文件

一共46页数据

网站截图如下:

Screenshot 2024-01-21 at 20.03.39

抓取完整歌词数据,如下图:

Screenshot 2024-01-21 at 20.04.26

源码如下:

import asyncio
import time
import aiohttp
from aiohttp import TCPConnector  # 处理ssl验证报错
from lxml import etreeheaders = {'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}# 返回每首歌的href函数
async def get_song_url(page_url):async with aiohttp.ClientSession(headers=headers, connector=TCPConnector(ssl=False)) as session:async with session.get(page_url) as res:html = await res.text()tree = etree.HTML(html)url_lst = tree.xpath('//div[@class="des"]/a/@href')return url_lst# 获取每首歌的详细信息
async def get_song_word(song_url):async with aiohttp.ClientSession(headers=headers, connector=TCPConnector(ssl=False)) as session:async with session.get(song_url) as res:html = await res.text()tree = etree.HTML(html)if tree is not None:song_question = tree.xpath('//div[@class="logbox"]')if song_question:song_q = song_question[0].xpath('./h1/text()')[0]else:passdiv_word = tree.xpath('//div[@class="logcon"]')if div_word:where_song = div_word[0].xpath('./h2[1]/text()')[0]question_song = div_word[0].xpath('./p[1]/text()')[0]answer_song = div_word[0].xpath('./p[2]/text()')[0]song_words = div_word[0].xpath('./p[position()>2]//text()')# song_name = div_word.xpath('./h2[2]/text()')[0].strip('\r\n\t')song_words = ''.join(song_words[:-1]).strip('\r\n\t')with open(f'songs/{song_q}.txt', 'a') as f:f.write(where_song + '\n' + question_song + '\n' + answer_song + '\n\n' + song_words)else:passif __name__ == '__main__':t1 = time.time()loop = asyncio.get_event_loop()for n in range(1, 47):song_url = f'https://www.91ge.cn/lxyyplay/find/list_16_{n}.html'urls = loop.run_until_complete(get_song_url(song_url))tasks = [get_song_word(url) for url in urls]loop.run_until_complete(asyncio.gather(*tasks))print(f'耗时:{time.time() - t1:.2f}秒')

运行结果如下图:

Screenshot 2024-01-21 at 20.08.09

利用协程抓取数据,效率很高。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/639427.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DevOps系列文章之 GitLab CI/CD

CICD是什么? 由于目前公司使用的gitlab,大部分项目使用的CICD是gitlab的CICD,少部分用的是jenkins,使用了gitlab-ci一段时间后感觉还不错,因此总结一下 介绍gitlab的CICD之前,可以先了解CICD是什么 我们的开发模式…

司铭宇老师:房地产中介销售经理培训:如何激发房产中介销售人员的斗志与激情

房地产中介销售经理培训:如何激发房产中介销售人员的斗志与激情 在房产中介行业,销售人员的斗志与激情直接影响着业绩的高低。一个有动力的销售团队能够积极应对市场的变化,更好地服务客户,从而实现销售目标。本文将探讨如何通过有…

CGLIB动态代理(AOP原理)(面试重点)

推荐先看JDK 动态代理(Spring AOP 的原理)(面试重点) JDK 动态代理与 CGLIB 动态代理的区别 JDK 动态代理有⼀个最致命的问题是其只能代理实现了接⼝的类. 有些场景下,我们的业务代码是直接实现的,并没有接⼝定义.为了解决这个问…

【C++干货基地】namespace超越C语言的独特魅力(文末送书)

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引入 哈喽各位铁汁们好啊,我是博主鸽芷咕《C干货基地》是由我的襄阳家乡零食基地有感而发,不知道各位的…

HarmonyOS4.0系统性深入开发24启动DataAbility

DataAbility组件概述 DataAbility,即"使用Data模板的Ability",主要用于对外部提供统一的数据访问抽象,不提供用户交互界面。DataAbility可由PageAbility、ServiceAbility或其他应用启动,即使用户切换到其他应用&#x…

Debian11下编译ADAravis和Motor模块的一条龙过程

Debian11编译EPICS ADAravis记录 一年前整理的上面文,这几天重新走了一遍,有些地方会碰到问题,需要补充些环节,motor模块以前和areaDetector一条龙编译时,总是有问题,当时就没尝试了,这几天尝试…

位运算的魅力:使用Redis Bitmap高效处理百万级布尔值

欢迎来到我的博客,代码的世界里,每一行都是一个故事 位运算的魅力:使用Redis Bitmap高效处理百万级布尔值 前言1. Bitmap的基本概念Bitmap的定义和原理为什么Bitmap特别适合处理大量布尔值 2. Redis中的Bitmap操作基础命令高级命令 实际应用场…

低压防雷箱综合选型应用方案

低压防雷箱是一种用于保护低压配电系统免受雷电过电压的影响的装置,它主要由防雷箱模块、浪涌保护器SPD、接地线等组成。本文将介绍低压防雷箱的作用原理和行业应用解决方案,以及低压防雷箱的选型方法。 低压防雷箱的作用原理 低压防雷箱的作用原理是利…

股东出资透明度提升:企业股东出资信息API的应用

前言 在当今商业环境中,股东出资信息的透明度对于投资者、监管机构以及企业自身的健康发展至关重要。随着企业信息公开化的推进,企业股东出资信息API应运而生,为各方提供了一个便捷、高效的信息获取渠道。本文将探讨企业股东出资信息API如何…

HCIA NAT练习

目录 实验拓扑 实验要求 实验步骤 1、IP分配 2、使用ACL使PC访问外网 3、缺省路由 4、边界路由器公网ip端口配置 测试 实验拓扑 实验要求 1、R2为ISP路由器,其上只能配置ip地址,不得再进行其他的任何配置 2、PC1-PC2可以ping通客户平板和DNS服…

【OJ】牛客链表刷题

题目 1. 链表分割1.1 题目分析1.2 代码 2. 链表的回文结构2.1 题目分析2.2 代码 这里两道与链表有关的题目均来自牛客。 1. 链表分割 1.1 题目分析 因为这里代码不能选择用c语言写,所以选择用c,因为c兼容c。 题目要求分割链表,我们可以直接弄成两个带哨…

基于CanvasLabel的Leaflet矢量数据免切片属性标注实践

目录 前言 一、Leaflet.CanvasLabel 1、开源地址 2、设置参数说明 二、组件集成 1、新建html文件 2、声明样式 3、定义矢量文本渲染器 4、定义地图 5、添加矢量数据 6、最终效果 总结 前言 在一般的业务场景中,针对小量的矢量数据,比如POI兴…

云轴科技ZStack位列IDC云系统软件市场教育行业TOP2

近日,全球IT市场研究和咨询公司IDC发布 《中国云系统软件市场跟踪报告2023H1》 ZStack作为产品化的云基础软件提供商 位居云系统软件市场第一梯队 市场份额位列独立云厂商*第一 营收同比增速最快 教育行业TOP2 在教育行业,云计算已成为教育行业信息化的…

Python 安装 QtDesigner

Python 安装 QtDesigner 对于最新版本的 PyQt6 模块,可以直接使用如下代码来安装 Designer 软件。 pip install PyQt6-tools 安装好以后,需要到 Python 安装目录中寻找对应的启动 exe 文件。 C:\Softwares\Python 3.11.5\Lib\site-packages\qt6_applica…

[小程序]页面事件

一、下拉刷新 1.开启和配置 小程序中开启下拉刷新的方式有两种: ①全局开启下来刷新 在app.json的window节点中,设置enablePullDownRefresh设为ture。 ②局部开启下来刷新 在页面对应的json文件的的window节点中,设置enablePullDownRefresh设…

Qt应用开发(安卓篇)——Hello Qt On Android

一、前言 这一篇从实际出发,讲述如何创建、编译和部署Qt On Android项目。 二、ADB调试 ADB的全称为Android Debug Bridge,就是起到调试桥的作用,主要用于连接计算机与Android 设备,以便进行调试和数据传输。ADB 可以实现以下主要…

uniapp组件库SwipeAction 滑动操作 使用方法

目录 #平台差异说明 #基本使用 #修改按钮样式 #点击事件 #API #Props #Event 该组件一般用于左滑唤出操作菜单的场景,用的最多的是左滑删除操作。 注意 如果把该组件通过v-for用于左滑删除的列表,请保证循环的:key是一个唯一值,可以…

HNU-数据挖掘-实验3-图深度学习

数据挖掘课程实验实验3 图深度学习 计科210X 甘晴void 202108010XXX 文章目录 数据挖掘课程实验<br>实验3 图深度学习实验背景实验要求数据集解析实验内容&#xff08;0&#xff09;基础知识&#xff1a;基于图的深度学习方法浅识&#xff1a;图卷积网络 (GCN)浅识&…

【Linux】第三十二站:命名管道

文章目录 一、命名管道介绍二、编码1.mkfifo2.unlink3.一个简单的例子4.修改 一、命名管道介绍 管道应用的一个限制就是只能在具有共同祖先&#xff08;具有亲缘关系&#xff09;的进程间通信。 如果我们想在不相关的进程之间交换数据&#xff0c;可以使用FIFO文件来做这项工作…

14 STM32 - IIC (时序图+软件源码)

14.1 IIC简介 IIC&#xff08;Inter-Integrated Circuit&#xff09;&#xff0c;中文集成电路总线&#xff0c;是一种串行通信总线&#xff0c;使用多主从架构。I2C串行总线一般有两根信号线&#xff0c;一根是双向的数据线SDA&#xff0c;另一根是时钟线SCL。所有接到I2C总线…