как выбрать второй элемент ‹p› с помощью Xpath

Я пытаюсь очистить полные отзывы с этого страница в Интернете. (Полные обзоры - после нажатия кнопки «Подробнее»). Я делаю это с помощью RSelenium. Я могу выделить и извлечь текст из первого элемента <p>, используя код

reviewNodes <- mybrowser$findElements(using = 'xpath', "//p[@id][1]")

что для меньшего количества рецензий.

Но не может извлечь полнотекстовые обзоры с помощью кода

reviewNodes <- mybrowser$findElements(using = 'xpath', "//p[@id][2]")

or

reviewNodes <- mybrowser$findElements(using = 'xpath', "//p[@itemprop = 'reviewBody']")

Он показывает пустые элементы списка. Я не знаю, что не так. Пожалуйста помогите..


person Rishabh Soni    schedule 01.04.2016    source источник
comment
Что возвращает первый запрос? Это отдельный узел или коллекция? Я ожидал, что на основе структуры страницы он получит коллекцию всех p элементов, атрибут id которых начинается с "lessReviewContent", поскольку они являются первыми <p> дочерними элементами своих родителей. Я прав?   -  person CiaPan    schedule 01.04.2016
comment
да ... вы правы ... он извлекает коллекцию.   -  person Rishabh Soni    schedule 02.04.2016
comment
даже когда я набираю запрос xpath // p [@id] [2] во вспомогательном расширении chrome xpath, он извлекает предполагаемый текст. Но тот же xpath в коде не работает. Не могу понять причину ....   -  person Rishabh Soni    schedule 02.04.2016


Ответы (2)


Отбросьте двойную косую черту и попробуйте использовать явную ось descendant:

/descendant::p[@id][2]

(см. примечание из документа W3C по XPath, которое я упоминал в этом ответе)

person CiaPan    schedule 01.04.2016

Когда вы имеете дело со списком, вы должны сначала найти элементы списка, например с помощью селектора CSS

div.srm

На основе этих элементов вы можете выполнять поиск внутри элементов списка, например с помощью селектора CSS

p[itemprop='reviewBody']

Конечно, вы также можете сделать это в одном выражении, но это не так аккуратно, imho:

div.srm p[itemprop='reviewBody']

Или в XPath (что я бы не рекомендовал):

//div[@class='srm']//p[@itemprop='reviewBody']

Если ни один из них не работает для вас, проблема должна быть где-то в другом месте.

person Kim Homann    schedule 01.04.2016