Подтвердить что ты не робот

Запрос html с использованием Yahoo YQL

При попытке разобрать html с использованием языка запросов Yahoo и возможностей xpath, предоставляемых YQL, я столкнулся с проблемами неспособности извлечь "text()" или значения атрибута.
Например, perma link

select * from html where url="http://stackoverflow.com" 
and xpath='//div/h3/a'

дает список якорей как xml

<results>
    <a class="question-hyperlink" href="/info/661184/filling-the-text-area-with-the-text-when-a-button-is-clicked" title="In ASP.net, I need the code to fill the text area (in the form) when a button is clicked. Can you help me through by showing a simple .aspx code containing the script tag? ">Filling the text area with the text when a button is clicked</a>...
</results> 

Теперь, когда я пытаюсь извлечь значение node, используя

select * from html where url="http://stackoverflow.com" 
and xpath='//div/h3/a/text()'

Я получаю конкатенированные результаты, а не список node например

<results>Xcode: attaching to a remote process for debuggingWhy is b
…… </results>

Как я могу разделить его на node списки и как мне выбрать значения атрибута?

Запрос вроде этого

select * from html where url="http://stackoverflow.com"
and xpath='//div/h3/a[@href]'

дал мне те же результаты для запроса div/h3/a

4b9b3361

Ответ 1

YQL требует, чтобы выражение xpath оценивалось с помощью элемента itemPath, а не node. Но как только у вас есть ItemPath, вы можете проектировать различные значения из дерева

Другими словами, ItemPath должен указывать на node в полученном HTML, а не на текстовом контенте/атрибутах. YQL возвращает все соответствующие узлы и их дочерние элементы при выборе * из данных.

Пример

select * from html where url="http://stackoverflow.com" and xpath='//div/h3/a'

Это возвращает все сопоставление xpath. Теперь, чтобы проецировать текстовый контент, вы можете проецировать его, используя

select content from html where url="http://stackoverflow.com" and xpath='//div/h3/a'

"content" возвращает текстовое содержимое, содержащееся в node.

Для проецирования атрибутов вы можете указать его относительно выражения xpath. В этом случае, поскольку вам нужен href, относящийся к a.

select href from html where url="http://stackoverflow.com" and xpath='//div/h3/a'

это возвращает <results> <a href="/info/663973/putting-a-background-pictures-with-leds"/> <a href="/info/663013/advantages-and-disadvantages-of-popular-high-level-languages"/> .... </results>

Если вам нужен атрибут "href" и textContent, вы можете выполнить следующий запрос YQL:

select href, content from html where url="http://stackoverflow.com" and xpath='//div/h3/a'

возвращает:

<results> <a href="/info/663950/double-pointer-const-issue-issue">double pointer const issue issue</a>... </results>

Надеюсь, что это поможет. сообщите мне, если у вас есть дополнительные вопросы по YQL.