Как вы анализируете веб-страницу и извлекаете все ссылки href?
Я хочу проанализировать веб-страницу в Groovy и извлечь все ссылки href и связанный с ней текст.
Если страница содержит эти ссылки:
<a href="#" onclick="location.href='http://www.google.com'; return false;">Google</a><br />
<a href="#" onclick="location.href='http://www.apple.com'; return false;">Apple</a>
вывод будет:
Google, http://www.google.com<br />
Apple, http://www.apple.com
Я ищу ответ Groovy. AKA. Простой способ!
Ответы
Ответ 1
Предполагая хорошо сформированный XHTML, slurp xml, собираем все теги, находим теги "a" и распечатываем href и текст.
input = """<html><body>
<a href = "http://www.hjsoft.com/">John</a>
<a href = "http://www.google.com/">Google</a>
<a href = "http://www.stackoverflow.com/">StackOverflow</a>
</body></html>"""
doc = new XmlSlurper().parseText(input)
doc.depthFirst().collect { it }.findAll { it.name() == "a" }.each {
println "${it.text()}, ${[email protected]()}"
}
Ответ 2
Быстрый поиск в Google показал приятную перспективу, TagSoup.
Ответ 3
Я не знаю java, но я думаю, что xpath намного лучше, чем классические регулярные выражения, чтобы получить один (или более) html-элементов.
Также легче писать и читать.
<html>
<body>
<a href="1.html">1</a>
<a href="2.html">2</a>
<a href="3.html">3</a>
</body>
</html>
С помощью html выше это выражение "/html/body/a" будет перечислять все элементы href.
Вот хороший шаг за шагом учебник http://www.zvon.org/xxl/XPathTutorial/General/examples.html
Ответ 4
Используйте XMLSlurper для анализа HTML как XML-документа, а затем используйте метод find с соответствующим закрытием для выбора тегов, а затем используйте метод list на GPathResult, чтобы получить список тегов. Затем вы сможете извлечь текст в виде дочерних элементов GPathResult.
Ответ 5
Попробуйте регулярное выражение. Что-то вроде этого должно работать:
(html =~ /<a.*href='(.*?)'.*>(.*?)<\/a>/).each { url, text ->
// do something with url and text
}
Взгляните на Groovy - Учебник 4 - Основы регулярных выражений и Anchor Tag Regular Expression Breaking.
Ответ 6
Анализ с использованием XMlSlurper работает только в том случае, если HTMl корректно сформирован.
Если ваша HTMl-страница имеет не-правильно сформированные теги, используйте регулярное выражение для разбора страницы.
Пример: <a href="www.google.com">
здесь, 'a' не закрывается и, следовательно, не образуется.
new URL(url).eachLine{
(it =~ /.*<A HREF="(.*?)">/).each{
// process hrefs
}
}
Ответ 7
Html parser + Регулярные выражения
Любой язык будет делать это, хотя я бы сказал, что Perl является самым быстрым решением.