(HTML Scraping) XPath изменения столбца в зависимости от цвета - PullRequest
0 голосов
/ 13 сентября 2018

Я пытаюсь проанализировать все значения в столбце этого веб-сайта (с различными биржевыми индексами) . Я работаю в Python и использую XPath для очистки данных HTML.

Допустим, я хочу извлечь значение «Изменение», которое в настоящее время составляет 0,62% (и зеленого цвета). Сначала я получу дерево на сайт, а затем скажу.

stockInfo_1 = tree.xpath('//*[@class="table-dark-row"]/td[12]/b/span/text()') 

Затем я получу массив значений, и последним элементом будет изменение значения.

Однако я заметил, что если значение в этом столбце имеет цвет, оно находится в /b/SPAN, в то время как если оно не имеет цвета, то интервал отсутствует, и его просто в /b.

Чтобы объяснить:

stockInfo_1 = tree.xpath('//*[@class="table-dark-row"]/td[12]/b/span/text()') 

^ этот массив будет иметь все значения в этом столбце, которые окрашены

while stockInfo_1 = tree.xpath('//*[@class="table-dark-row"]/td[12]/b/text()') 

^ будет иметь все значения в столбце, которые не имеют цвета.

Цвета не одинаковы для каждой акции. Некоторые акции имеют случайные значения, которые имеют цвета, а некоторые нет. Таким образом, это нарушает согласованность массивов /b/span и /b.

Как я могу получить массив переменных ВСЕХ значений (по порядку) в каждом столбце, независимо от того, находятся они в диапазоне или нет? Мне плевать на цвета, я просто забочусь о значениях.

Я могу объяснить больше, если нужно. Спасибо !!

1 Ответ

0 голосов
/ 13 сентября 2018

Вы можете напрямую пропустить промежуточные теги в xpath и получить все значения в списке, используя // inbetween.

Таким образом, фрагмент должен быть

tree.xpath('//*[@class="table-dark-row"]/td[12]/b//text()')

Пропускаются все промежуточные теги между текстом и текстом.

Я пытался использовать lxml. Вот код

import requests
from lxml import html
url="https://finviz.com/quote.ashx?t=acco&ty=c&ta=1&p=d"
resp=requests.get(url)
tree = html.fromstring(resp.content)
values = tree.xpath('//*[@class="table-dark-row"]/td[12]/b//text()')
print values

Что дает вывод следующим образом

['0.00%', '-2.43%', '-8.71%', '-8.71%', '7.59%', '-1.23%', '1.21', '0.30', '2.34% 2.38%', '12.05', '12.18', '1.04%']

Примечание: Если вы не хотите использовать жесткий код 12 в указанном выше Xpath, вы также можете использовать last() как tree.xpath('//*[@class="table-dark-row"]/td[last()]/b//text()')

шпаргалка Xpath для вашего доброго обращения.

Использование выражений "//" и ".//" в XPath Директивы поиска XML в ColdFusion

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...