Ответ 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.