Web-анализ Python с проблемой синтаксиса xpath - PullRequest
0 голосов
/ 03 июня 2018

Я новичок в 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()')]

На странице чередуется.Есть предложения?

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Необходимо ли использовать 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)
0 голосов
/ 04 июня 2018

Я думаю, что получил правильный синтаксис для XPath.Кажется, что песни соответствуют артистам, несмотря на чередующиеся узлы элементов для артистов.Я сделал это:

artists = [x.strip() for x in tree.xpath('//*[@class="chart-row__artist"]/text()')]

Префикс // * выбрал весь документ, затем сопоставил его с именем класса, так что это охватывало как элементы 'a', так и элементы 'span'.

...