Как Вы анализируете веб-страницу и извлекаете все ссылки href?

15
задан 7 revs, 3 users 83%anon 2 June 2016 в 12:18
поделиться

6 ответов

Принятие правильно построенного XHTML, хлебайте xml, соберите все теги, найдите теги и распечатайте 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()}"
}
17
ответ дан 1 December 2019 в 03:25
поделиться

Быстрый поиск Google поднял симпатичную возможность, TagSoup.

4
ответ дан 1 December 2019 в 03:25
поделиться

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

2
ответ дан 1 December 2019 в 03:25
поделиться

Используйте XMLSlurper, чтобы проанализировать HTML как XML-документ и затем использовать метод находки с соответствующим закрытием, чтобы выбрать теги и затем использовать метод списка на GPathResult для получения списка тегов. Необходимо тогда быть в состоянии извлечь текст как дети GPathResult.

1
ответ дан 1 December 2019 в 03:25
поделиться

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

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

Смотрят на Groovy - Учебное руководство 4 - основы Регулярных выражений и Регулярное выражение Тега привязки, Повреждающееся .

0
ответ дан 1 December 2019 в 03:25
поделиться

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

-2
ответ дан 1 December 2019 в 03:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: