2016-03-29 6 views
1

Ich begann Scrapy für ein kleines Projekt zu verwenden, und ich kann die Verknüpfung nicht extrahieren. Anstelle der URL erhalte ich nur "[]" für jedes Mal, wenn die Klasse gefunden wird. Fehle ich etwas Offensichtliches?Scrapy bekommen href aus div

sel = Selector(response) 
for entry in sel.xpath("//div[@class='recipe-description']"): 
    print entry.xpath('href').extract() 

Probe von der Website:

<div class="recipe-description"> 
    <a href="http://www.url.com/"> 
     <h2 class="rows-2"><span>SomeText</span></h2> 
    </a> 
</div> 
+0

Ich denke, Ihre XPath-Abfrage ist falsch verwenden. Sie müssen den Link auswählen und dann das href-Attribut abrufen. Etwas wie das: // a [@href] – narko

Antwort

5

Ihre XPath-Abfrage ist falsch

for entry in sel.xpath("//div[@class='recipe-description']"): 

in dieser Zeile Sie unsere divs tatsächlich Iterieren, die kein Href Attribut haben

für die richtige Einstellung sollten Sie achor Elemente inauswählen:

for entry in sel.xpath("//div[@class='recipe-description']/a"): 
    print entry.xpath('href').extract() 

bestmögliche Lösung ist href Attribut in for Schleife

for href in sel.xpath("//div[@class='recipe-description']/a/@href").extract(): 
    print href 

der Einfachheit halber direkt extrahieren können Sie auch CSS-Selektoren

for href in sel.css("div.recipe-description a::attr(href)").extract(): 
    print href 
+0

Vielen Dank, das hat funktioniert. Es scheint, als hätte ich die Idee hinter Xpath missverstanden. – Trollbrot