2017-12-17 11 views
-1

나는 이것을 golang package 웹 사이트 이미지를 긁어 내기 위해 사용해 보려고합니다.골란 (Golang)은 일치를 정의하는 방법을 마칩니다.

이것은 내가 고칠 필요가있는 html 노드입니다.

<ul class="list clearfix"> 
<li> 
    <div> 
      <a href=www.example.com/asda"> 
        <img src="..sadsada./ssa/3.jpg"> 
     </a> 
     </div> 
    </li> 
<li> 
    <div> 
      <a href=www.example.comsdsds/sds"> 
        <img srr="..sadsada./ssa/2.jpg"> 
     </a> 
     </div> 
    </li> 
<li> 
    <div> 
      <a href=www.example.com/sdds"> 
        <img src="..sadsada./ssa/1.jpg"> 
     </a> 
     </div> 
    </li> 
    ....... 
</ul> 

이미지를 어떻게 가져 옵니까?

matcher := func(n *html.Node) bool { 

     if n.DataAtom == atom.A && n.Parent != nil && n.Parent.Parent != nil && n.Parent.Parent.Parent != nil && n.Parent.Parent.Parent.Parent != nil { 

      return scrape.Attr(n.Parent.Parent.Parent.Parent, "class") == "list clearfix" 
     } 
     return false 
    } 

    images := scrape.FindAll(root, matcher) 

그러나 그것은 작동하지 않습니다 여기에

내가 시도 일치합니다.

+1

당신은 무엇을 얻습니까? –

+0

질문에만 붙여 넣기 문제인지 모르겠지만 HTML이 유효하지 않습니다 (따옴표가 맞지 않습니다) – Acidic

답변

0

고정 코드 :

matcher := func(n *html.Node) bool { 
    if n.Data == "img" && // Is img tag 
     n.Parent != nil && // Parent exists 
     n.Parent.DataAtom == atom.A && // Parent is <a> 
     n.Parent.Parent != nil && // Parent's Parent exists (div) 
     n.Parent.Parent.Parent != nil && // Parent's Parent's Parent exists (li) 
     n.Parent.Parent.Parent.Parent != nil { // Parent's Parent's Parent's Parent exists (ul) 
     return scrape.Attr(n.Parent.Parent.Parent.Parent, "class") == "list clearfix" 
    } 
    return false 
} 

images := scrape.FindAll(root, matcher) 
for i, img := range images { 
    src := scrape.Attr(img, "src") 
    fmt.Printf("Image %d src=%s\n", i, src) 
} 

난 그냥 당신이 가지고 있던 문제를 해결하기 위해 matcher FUNC를 수정했습니다.

질문에 사용 된 HTML이 유효하지 않습니다. 약간의 "이 mispelt src 속성과 함께 누락되었습니다.

+0

답변 해 주셔서 감사합니다. 실제로 html에는 구문 오류가 있습니다. 실수입니다. 그러나 지금은이 패키지 https://github.com/anaskhan96/soup를 사용하여 손쉽게 다룰 수 있습니다. 어쨌든 훌륭한 답변을 주셔서 감사합니다. –