Как проанализировать веб-страницу и извлечь все ссылки href?

StackOverflow https://stackoverflow.com/questions/99279

  •  01-07-2019
  •  | 
  •  

Вопрос

Я хочу проанализировать веб-страницу в Groovy и извлечь все ссылки href и связанный с ней текст.

Если страница содержала эти ссылки:

<a href="http://www.google.com">Google</a><br />
<a href="http://www.apple.com">Apple</a>

результат будет:

Google, http://www.google.com<br />
Apple, http://www.apple.com

Я ищу отличный ответ.АКА.Простой способ!

Это было полезно?

Решение

Предполагая, что XHTML правильно сформирован, проглотите 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()}, ${it.@href.text()}"
}

Другие советы

Быстрый поиск в Google выявил красивую возможность, ТегСуп.

Я не знаю 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

Используйте XMLSlurper для анализа HTML как документа XML, а затем используйте метод find с соответствующим замыканием, чтобы выбрать теги a, а затем используйте метод list в GPathResult, чтобы получить список тегов.После этого вы сможете извлечь текст как дочерний элемент GPathResult.

Попробуйте регулярное выражение.Что-то вроде этого должно работать:

(html =~ /<a.*href='(.*?)'.*>(.*?)<\/a>/).each { url, text -> 
    // do something with url and text
}

Взгляни на Groovy. Урок 4. Основы регулярных выражений и Нарушение регулярных выражений тега привязки.

Анализ с использованием XMlSlurper работает только в том случае, если HTML правильно сформирован.

Если на вашей HTML-странице есть теги неправильного формата, используйте регулярное выражение для анализа страницы.

Бывший: <a href="www.google.com">

здесь «а» не закрыто и, следовательно, неправильно сформировано.

 new URL(url).eachLine{
   (it =~ /.*<A HREF="(.*?)">/).each{
       // process hrefs
   }
}

HTML Parser + Регулярные выражения любого языка сделает это, хотя я бы сказал, что Perl - самое быстрое решение.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top