Я новичок в Python и пытаюсь вытащить список горячих 100 рекламных щитов. Я знаю, что библиотека уже есть, но я практикуюсь (и это делается по-другому). Моя проблема в том, что список песен Billboard не совпадает с исполнителями, потому что синтаксис выбора исполнителя меняется между элементом «a» и элементом «span». Как включить оба типа элементов, оба из которых содержат [@ class = "chart-row__artist"].
На данный момент у меня есть:
artists = [x.strip() for x in tree.xpath('//a[@class = "chart-row__artist"]/text()')]
но это также подтягивает песни с помощью span:
artists = [x.strip() for x in tree.xpath('//span[@class = "chart-row__artist"]/text()')]
Он чередуется на странице. Какие-либо предложения?






Я думаю, что правильно понял синтаксис XPath. Кажется, что песни соответствуют исполнителям, несмотря на чередование узлов элементов для исполнителей. Я сделал это:
artists = [x.strip() for x in tree.xpath('//*[@class = "chart-row__artist"]/text()')]
Префикс // * выбирает весь документ, а затем сравнивает его с именем класса, так что это охватывает как элементы «a», так и элементы «span».
Необходимо ли использовать 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)
интересно! спасибо за ваш вклад. Это кажется проще.