웹페이지를 어떻게 구문 분석하고 모든 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

Groovy 답변을 찾고 있습니다.일명.쉬운 방법!

도움이 되었습니까?

해결책

올바른 형식의 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를 모르지만 하나 이상의 html 요소를 얻으려면 xpath가 기존 정규 표현식보다 훨씬 낫다고 생각합니다.

쓰기도 읽기도 더 쉽습니다.

<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 메소드를 사용하여 태그를 선택한 다음 GPathResult에서 list 메소드를 사용하여 태그 목록을 가져옵니다.그러면 GPathResult의 하위 항목으로 텍스트를 추출할 수 있습니다.

정규식을 사용해 보세요.다음과 같이 작동해야 합니다.

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

보세요 Groovy - 튜토리얼 4 - 정규식 기초 그리고 앵커 태그 정규식 분리.

XMlSlurper를 사용한 구문 분석은 HTML이 올바른 형식인 경우에만 작동합니다.

HTML 페이지에 잘못된 형식의 태그가 있는 경우 정규 표현식을 사용하여 페이지를 구문 분석하세요.

전: <a href="www.google.com">

여기서 'a'는 닫혀 있지 않아 제대로 구성되지 않았습니다.

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

HTML Parser + 정규식 모든 언어는이를 수행 할 수 있지만 Perl이 가장 빠른 솔루션이라고 말합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top