我是python的新手并试图将广告牌列为热门列表。我知道已经有一个图书馆,但我正在练习(而且它的完成方式不同)。我的问题是Billboard的歌曲列表与艺术家不匹配,因为选择艺术家的语法在“a”元素和“span”元素之间变化。如何包含两种都包含[@ class =“chart-row__artist”]的元素。
目前我有:
artists = [x.strip() for x in tree.xpath('//a[@class="chart-row__artist"]/text()')]
但这也会带来跨度的歌曲:
artists = [x.strip() for x in tree.xpath('//span[@class="chart-row__artist"]/text()')]
它在页面上交替显示。有什么建议吗?
答案 0 :(得分:1)
我认为我的XPath语法正确。尽管艺术家有交替的元素节点,但这些歌曲似乎与艺术家恰当匹配。我这样做了:
artists = [x.strip() for x in tree.xpath('//*[@class="chart-row__artist"]/text()')]
前缀// *选择整个文档然后与类名匹配,因此这涵盖了' a'元素和' span'元件。
答案 1 :(得分:0)
是否需要使用xpath?我很容易得到所有bs4艺术家的名单。
import requests
from bs4 import BeautifulSoup
response = requests.get('https://www.billboard.com/charts/hot-100')
soup = BeautifulSoup(response.content, 'lxml')
artists = [row.text.strip() for row in soup.select('.chart-row__artist')]
print(artists)