2017-01-26 7 views
0

Ich versuche, eine scrapy zu tun, finden und drucken alle href von einer Startseite finden:scrapy Python href Verweise rekursiv

class Ejercicio2(scrapy.Spider): 
    name = "Ejercicio2" 
    Ejercicio2 = {} 
    category = None 
    lista_urls =[] #defino una lista para meter las urls 

def __init__(self, *args, **kwargs): 
    super(Ejercicio2, self).__init__(*args, **kwargs) 
    self.start_urls = ['http://www.masterdatascience.es/'] 
    self.allowed_domains = ['www.masterdatascience.es/'] 
    url = ['http://www.masterdatascience.es/'] 


def parse(self, response): 
    print(response) 
    # hay_enlace=response.css('a::attr(href)') 
    # if hay_enlace: 
    links = response.xpath("a/@href") 
    for el in links: 
     url = response.css('a::attr(href)').extract() 
     print(url) 
     next_url = response.urljoin(el.xpath("a/@href").extract_first()) 
     print(next_url) 
     print('pasa por aqui') 
     yield scrapy.Request(url, self.parse()) 
     # yield scrapy.Request(next_url, callback=self.parse) 
     print(next_url) 

Aber nicht wie erwartet funktioniert, nicht nach den „href“ Referenzen angetroffen , nur der erste.

+0

Können Sie versuchen, die nachstehende '/' in 'allowed_domains' zu entfernen? ('self.allowed_domains = ['www.masterdatascience.es']' ') –

Antwort

-2

Sie versuchen, Ihre XPath ändern könnte/@ href

0

den Code unten drucken Sie das href alle auf der Seite wird //:

import scrapy 

class stackoverflow20170129Spider(scrapy.Spider): 
    name = "stackoverflow20170129" 
    allowed_domains = ["masterdatascience.es"] 
    start_urls = ["http://www.masterdatascience.es/",] 

    def parse(self, response): 
     for href in response.xpath('//a/@href'): 
      url = response.urljoin(href.extract()) 
      print url 
#   yield scrapy.Request(url, callback=self.parse_dir_contents) 

eine Sache auch: wert Fallenlassen des www. von den "allowed_domains" - wenn Sie tiefer in die Website einsteigen und zu Seiten wie anewpage.masterdatascience.es gelangen, dann einschließlich des www. wird diese Seite blockieren