您的位置:首页 >聚焦 >

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

2022-05-17 11:05:02    来源:程序员客栈
点击上方“Python共享之家”,进行关注

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

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

大家好,我是皮皮。

一、前言

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

二、实现过程

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

#coding:utf-8#@Time:2022/5/923:46#@Author:皮皮#@公众号:Python共享之家#@website:http://pdcfighting.com/#@File:网易云音乐热门作品名字和链接(正则表达式).py#@Software:PyCharm##_ooOoo_#o8888888o#88"."88#(|-_-|)#O\=/O#____/`---"\____#."\\||//`.#/\\|||:|||//\#/_|||||-:-|||||-\#||\\\-///||#|\_|""\---/""||#\.-\__`-`___/-./#___`.."/--.--\`..__#."""<`.___\_<|>_/___.">""".#||:`-\`.;`\_/`;.`/-`:||#\\`-.\___\/___/.-`//#======`-.____`-.___\_____/___.-`____.-"======#`=---="#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#☀佛祖保佑☀卍☀永无BUG☀importrequestsfromlxmlimportetreefromfake_useragentimportUserAgentimportreclassWangyiyun(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"}defget_xpath(self,url):res=requests.get(url,headers=self.headers)#print(res.text)#returnetree.HTML(res.text)html=res.text.replace("<适合才重要>","适合才重要")returnhtmldefsingers_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))#fortrintrs:#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)foriteminitems: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={})

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

    三、总结

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

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

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

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

    往期精彩文章推荐:

    Pandas处理csv表格的时候如何忽略某一列内容?

    盘点一个正则表达式题目(惊艳写法)

    分享一个使用Python网络爬虫抓取百度关键词和链接的代码(xpath篇)

    分享一个使用Python网络爬虫抓取百度关键词和链接的代码(bs4篇)

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

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

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

    关键词: 正则表达式 网络爬虫 学习交流

    相关阅读