Вы можете сделать небольшое исправление ко второму XPath, измените это:
titles = songs.xpath('.//div[@class="chart-table-track"]/text()')
на следующее:
titles = songs.xpath('.//td[@class="chart-table-track"]/*/text()')
и заставьте себя называть эти названия песен и исполнителей, чтобы сделать что-то с их:
['Blinding Lights',
'by The Weeknd',
'The Box',
'by Roddy Ricch',
'Dance Monkey',
'by Tones And I',
"Don't Start Now",
'by Dua Lipa',
...
Намного проще использовать requests-html
(который использует lxml
внутри, если я не ошибаюсь):
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://spotifycharts.com/regional')
songs_elements = r.html.find('td.chart-table-track')[:10]
titles = [songs_element.text for songs_element in songs_elements]
print('\n'.join(titles))
Вывод:
Blinding Lights by The Weeknd
Dance Monkey by Tones And I
Don't Start Now by Dua Lipa
Roses - Imanbek Remix by SAINt JHN
In Your Eyes by The Weeknd
death bed (coffee for your head) (feat. beabadoobee) by Powfu
Say So by Doja Cat
Intentions (feat. Quavo) by Justin Bieber
Falling by Trevor Daniel
requests-html
также Кеннет Рейтц, как requests
.