网易云音乐热门作品名字和链接抓取(正则表达式篇)

IT共享之家

共 988字,需浏览 2分钟

 · 2022-05-17

点击上方“Python共享之家”,进行关注

回复“资源”即可获赠Python学习资料

问姓惊初见,称名忆旧容。

大家好,我是皮皮。

一、前言

前几天在Python白银交流群有个叫【O|】的粉丝问了一道关于网易云音乐热门作品名字和链接抓取的问题,获取源码之后,发现使用xpath匹配拿不到东西,从响应来看,确实是可以看得到源码的。

二、实现过程

究其原因是返回的响应里边并不是规整的html格式,所以直接使用xpath是拿不到的。这里【Python进阶者】给了一个使用正则表达式的方法来实现的代码,代码如下。

# coding:utf-8

# @Time : 2022/5/9 23:46
# @Author: 皮皮
# @公众号: Python共享之家
# @website : http://pdcfighting.com/
# @File : 网易云音乐热门作品名字和链接(正则表达式).py
# @Software: PyCharm

#
#                             _ooOoo_
#                            o8888888o
#                            88" . "88
#                            (| -_- |)
#                            O\  =  /O
#                         ____/`---'\____
#                       .'  \\|     |//  `.
#                      /  \\|||  :  |||//  \
#                     /  _||||| -:- |||||-  \
#                     |   | \\\  -  /// |   |
#                     | \_|  ''\---/''  |   |
#                     \  .-\__  `-`  ___/-. /
#                   ___`. .'  /--.--\  `. . __
#                ."" '<  `.___\_<|>_/___.'  >'"".
#               | | :  `- \`.;`\ _ /`;.`/ - ` : | |
#               \  \ `-.   \_ __\ /__ _/   .-` /  /
#          ======`-.____`-.___\_____/___.-`____.-'======
#                             `=---='
#         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#                   ☀佛祖保佑☀   卍   ☀永无BUG☀
import requests
from lxml import etree
from fake_useragent import UserAgent
import re


class Wangyiyun(object):
    def __init__(self):
        self.base_url = 'https://music.163.com/discover/artist'
        self.headers = {
            'user-agent': UserAgent().random,
            'referer''https://music.163.com/',
            'accept''text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9'
        }

    def get_xpath(self, url):
        res = requests.get(url, headers=self.headers)
        # print(res.text)
        # return etree.HTML(res.text)
        html = res.text.replace('<适合才重要>''适合才重要')
        return html

    def singers_parse(self, url, items):
        html = self.get_xpath(url)
        song_dict = {}
        # a_lis = html.xpath('//div[@id="song-list-pre-cache"]/ul/li/a')  # "song-list-pre-cache"
        # trs = html.xpath('//*[@id="auto-id-z9nqqUPu9d9PcmOB"]/tbody/tr')  # "song-list-pre-cache"
        # print(len(trs))
        # for tr in trs:
        #     song_name = tr.xpath('./td[2]//span/a/b//text()')[0]
        #     print(song_name)
        #     song_url = 'https://music.163.com' + tr.xpath('./td[2]//span/a/@href')[0]
        #     print(song_url)
            # song_dict[song_name] = song_url

        # pattern = re.compile(r'
  • <(?P.*?)>
  • ', re.S)

            pattern = re.compile(r'>
  • (?P.*?)
  • .*?'
    , re.S)
            items = re.finditer(pattern, html)
            for item in items:
                song_url = item.group("song_url")
                song_name = item.group("song_name")
                print(song_url, song_name)

            # items['所有歌曲:'] = song_dict
            # print(items)
            # name = items['歌手名:']
            # print(f'歌手:{name} 的歌曲已经获取完毕!即将写入文件!')
            # time.sleep(1)
            # self.writer_data(items)
            # print(f'歌手:{name} 的歌曲已经写入完毕!')


    Wangyiyun().singers_parse(url='https://music.163.com/artist?id=50653542', items={})

    这个代码亲测好使,运行之后结果如下。

    三、总结

    大家好,我是皮皮。网易云音乐热门作品名字和链接抓取(正则表达式篇),行之有效,难点在于那个正则表达式的构造。也欢迎大家积极尝试,一起学习。接下来的几篇文章,我们依次使用xpathbs4pyquery库来进行实现,帮助大家巩固下Python选择器基础。

    最后感谢粉丝【O|】提问,感谢【dcpeng】、【月神】、【甯同学】、【凡人不烦人】等人参与学习交流。

    小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎加我好友,我拉你进Python学习交流群共同探讨学习。

    ------------------- End -------------------

    往期精彩文章推荐:

    欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持

    想加入Python学习群请在后台回复【

    万水千山总是情,点个【在看】行不行

    浏览 9
    点赞
    评论
    收藏
    分享

    手机扫一扫分享

    举报
    评论
    图片
    表情
    推荐
    点赞
    评论
    收藏
    分享

    手机扫一扫分享

    举报