大家好,我是皮皮。
一、前言
前几天在Python白银交流群有个叫【O|】的粉丝问了一道关于网易云音乐热门作品名字和链接抓取的问题,获取源码之后,发现使用xpath
匹配拿不到东西,从响应来看,确实是可以看得到源码的。
之前的文章,已经使用了正则表达式和xpath
和bs4
进行了相关实现,网易云音乐热门作品名字和链接抓取(正则表达式篇),网易云音乐热门作品名字和链接抓取(xpath篇),网易云音乐热门作品名字和链接抓取(bs4篇)这篇文章我们使用pyquery
来实现。
二、实现过程
这里【Python进阶者】给了一个使用pyquery
的方法来实现的代码,代码如下。
# 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 pqclass 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('<适合才重要>', '适合才重要') doc = pq(html) return doc def singers_parse(self, url, items): doc = self.get_xpath(url) song_dict = {} a_lis = doc('#song-list-pre-cache > ul li > a').items() # a_lis = html.se('//div#id="song-list-pre-cache"]/ul/li/a') # "song-list-pre-cache" for a in a_lis: song_name = a.text() print(song_name) # print(a) # <a href="/song?id=1941028014">Ngau Hung (慢改0.85)</a> song_url = 'https://music.163.com' + a.attr("href") print(song_url) # song_dict[song_name] = song_url 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={})
这个代码亲测好使,运行之后结果如下。
难点在于掌握pyquery
选择器的使用,获取值等等。
三、总结
大家好,我是皮皮。网易云音乐热门作品名字和链接抓取(pyquery
篇),行之有效,难点在于构造pyquery
选择器。也欢迎大家积极尝试,一起学习。目前我们已经实现了使用正则表达式、xpath
和bs4
和pyquery
四种方法来进行操作,接下来的一篇文章,我们html5lib
库来进行实现,帮助大家巩固下Python选择器基础。
最后感谢粉丝【O|】提问,感谢【dcpeng】、【月神】、【甯同学】、【凡人不烦人】等人参与学习交流。