2017-12-17 1 views
-1

Ich versuche, diese golang package zu verwenden, um Webseitenbilder zu kratzen.Golan scrape, wie man Übereinstimmungen definiert

Dies ist der HTML-Knoten, den ich kratzen muss.

<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> 

Wie bekomme ich das Bild src? Hier

ist die Spiele habe ich versucht:

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) 

Aber es funktioniert nicht.

+1

Was bekommen Sie? –

+0

Ich bin mir nicht sicher, ob dies ein Pasting-Problem nur für die Frage ist, aber das HTML ist ungültig (Zitate stimmen nicht überein) – Acidic

Antwort

0

Festcode:

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) 
} 

ich geändert nur Ihre matcher func um die Probleme zu beheben, Sie hatten.

Beachten Sie auch, dass Ihr HTML in Ihrer Frage ungültig ist. Es gab ein paar fehlende " zusammen mit einem falschen src Attribut.

+0

Danke für die Antwort. Tatsächlich hat es Syntaxfehler in HTML, mein Fehler. Jedoch benutze ich jetzt dieses Paket https://github.com/anaskhan96/soup, um zu kratzen, es ist einfacher zu verwenden. Trotzdem danke immer noch für die tolle Antwort. –