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

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

爬虫案例—抓取找歌词网站的按歌词找歌名数据
找个词网址: https://www.91ge.cn/lxyyplay/find/

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

一共46页数据

网站截图如下:
image.png

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

源码如下:

import asyncio
import time
import aiohttp
from aiohttp import TCPConnector  # 处理ssl验证报错
from lxml import etree

headers = {
   
    '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:
                    pass
                div_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:
                pass


if __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}秒')

运行结果如下图:

image.png

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

相关文章
|
9天前
|
数据采集 搜索推荐 数据安全/隐私保护
Referer头部在网站反爬虫技术中的运用
Referer头部在网站反爬虫技术中的运用
|
5天前
|
数据采集 安全 定位技术
使用代理IP爬虫时数据不完整的原因探讨
在信息化时代,互联网成为生活的重要部分。使用HTTP代理爬取数据时,可能会遇到失败情况,如代理IP失效、速度慢、目标网站策略、请求频率过高、地理位置不当、网络连接问题、代理配置错误和目标网站内容变化等。解决方法包括更换代理IP、调整请求频率、检查配置及目标网站变化。
34 11
|
25天前
|
数据采集 JSON JavaScript
如何通过PHP爬虫模拟表单提交,抓取隐藏数据
本文介绍了如何使用PHP模拟表单提交并结合代理IP技术抓取京东商品的实时名称和价格,特别是在电商大促期间的数据采集需求。通过cURL发送POST请求,设置User-Agent和Cookie,使用代理IP绕过限制,解析返回数据,展示了完整代码示例。
如何通过PHP爬虫模拟表单提交,抓取隐藏数据
|
25天前
|
数据采集 JavaScript 网络安全
为什么PHP爬虫抓取失败?解析cURL常见错误原因
豆瓣电影评分是电影市场的重要参考,通过网络爬虫技术可以高效采集评分数据,帮助电影制作和发行方优化策略。本文介绍使用PHP cURL库和代理IP技术抓取豆瓣电影评分的方法,解决反爬机制、网络设置和数据解析等问题,提供详细代码示例和优化建议。
为什么PHP爬虫抓取失败?解析cURL常见错误原因
|
1月前
|
数据采集 JavaScript 程序员
探索CSDN博客数据:使用Python爬虫技术
本文介绍了如何利用Python的requests和pyquery库爬取CSDN博客数据,包括环境准备、代码解析及注意事项,适合初学者学习。
76 0
|
1月前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
105 6
|
4月前
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
215 4
|
4月前
|
数据采集 存储 搜索推荐
打造个性化网页爬虫:从零开始的Python教程
【8月更文挑战第31天】在数字信息的海洋中,网页爬虫是一艘能够自动搜集网络数据的神奇船只。本文将引导你启航,用Python语言建造属于你自己的网页爬虫。我们将一起探索如何从无到有,一步步构建一个能够抓取、解析并存储网页数据的基础爬虫。文章不仅分享代码,更带你理解背后的逻辑,让你能在遇到问题时自行找到解决方案。无论你是编程新手还是有一定基础的开发者,这篇文章都会为你打开一扇通往数据世界的新窗。
|
5月前
|
数据采集 存储 JSON
从零到一构建网络爬虫帝国:HTTP协议+Python requests库深度解析
【7月更文挑战第31天】在网络数据的海洋中,使用Python的`requests`库构建网络爬虫就像探索未知的航船。HTTP协议指导爬虫与服务器交流,收集信息。HTTP请求包括请求行、头和体,响应则含状态行、头和体。`requests`简化了发送各种HTTP请求的过程。
95 4
|
2月前
|
数据采集 存储 数据挖掘
深入探索 Python 爬虫:高级技术与实战应用
本文介绍了Python爬虫的高级技术,涵盖并发处理、反爬虫策略(如验证码识别与模拟登录)及数据存储与处理方法。通过asyncio库实现异步爬虫,提升效率;利用tesseract和requests库应对反爬措施;借助SQLAlchemy和pandas进行数据存储与分析。实战部分展示了如何爬取电商网站的商品信息及新闻网站的文章内容。提醒读者在实际应用中需遵守法律法规。
209 66