网易云音乐热门作品名字和链接抓取(pyquery篇)

大家好,我是皮皮。

一、前言

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

之前的文章,已经使用了正则表达式和xpathbs4进行了相关实现,网易云音乐热门作品名字和链接抓取(正则表达式篇),网易云音乐热门作品名字和链接抓取(xpath篇),网易云音乐热门作品名字和链接抓取(bs4篇)这篇文章我们使用pyquery来实现。

二、实现过程

这里【Python进阶者】给了一个使用pyquery的方法来实现的代码,代码如下。

代码语言:javascript
复制
# coding:utf-8

@Time : 2022/5/10 11:46

@Author: 皮皮

@公众号: Python共享之家

@website : http://pdcfighting.com/

@File : 网易云音乐热门作品名字和链接(pyquery).py

@Software: PyCharm

ooOoo

o8888888o

88" . "88

(| -_- |)

O\ = /O

_/`---'_

.' \| |// `.

/ \||| : |||// \

/ _||||| -:- |||||- \

| | \\ - /// | |

| _| ''---/'' | |

\ .-__ - ___/-. /

___. .' /--.--\ . . __

."" '< `._<|>/_.' >'"".

| | : - \.;\ _ /;./ - : | |

\ \ -. \_ __\ /__ _/ .- / /

======-.____-._/.-`__.-'======

`=---='

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

☀佛祖保佑☀ 卍 ☀永无BUG☀

import requests, re
from lxml import etree
from fake_useragent import UserAgent
from pyquery import PyQuery as pq

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):
    html = pq(url, headers=self.headers)
    # print(res.text)
    # html = res.replace(&#39;&lt;适合才重要&gt;&#39;, &#39;适合才重要&#39;)
    doc = pq(html)
    return doc

def singers_parse(self, url, items):
    doc = self.get_xpath(url)
    song_dict = {}
    a_lis = doc(&#39;#song-list-pre-cache &gt; ul li &gt; a&#39;).items()
    # a_lis = html.se(&#39;//div#id=&#34;song-list-pre-cache&#34;]/ul/li/a&#39;)  # &#34;song-list-pre-cache&#34;
    for a in a_lis:
        song_name = a.text()
        print(song_name)
        # print(a)  # &lt;a href=&#34;/song?id=1941028014&#34;&gt;Ngau Hung (慢改0.85)&lt;/a&gt;
        song_url = &#39;https://music.163.com&#39; + a.attr(&#34;href&#34;)
        print(song_url)
        # song_dict[song_name] = song_url
    items[&#39;所有歌曲:&#39;] = song_dict
    # print(items)
    # name = items[&#39;歌手名:&#39;]
    # print(f&#39;歌手:{name} 的歌曲已经获取完毕!即将写入文件!&#39;)
    # time.sleep(1)
    # self.writer_data(items)
    # print(f&#39;歌手:{name} 的歌曲已经写入完毕!&#39;)

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

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

难点在于掌握pyquery选择器的使用,获取值等等。

三、总结

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

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