2012-05-29 16 views
8

a continuación es mi código de araña,Combinando url base con href resultante en scrapy

class Blurb2Spider(BaseSpider): 
    name = "blurb2" 
    allowed_domains = ["www.domain.com"] 

    def start_requests(self): 
      yield self.make_requests_from_url("http://www.domain.com/bookstore/new") 


    def parse(self, response): 
     hxs = HtmlXPathSelector(response) 
     urls = hxs.select('//div[@class="bookListingBookTitle"]/a/@href').extract() 
     for i in urls: 
      yield Request(urlparse.urljoin('www.domain.com/', i[1:]),callback=self.parse_url) 


    def parse_url(self, response): 
     hxs = HtmlXPathSelector(response) 
     print response,'------->' 

Aquí estoy tratando de combinar el enlace href con el enlace de base, pero estoy recibiendo el siguiente error,

exceptions.ValueError: Missing scheme in request url: www.domain.com//bookstore/detail/3271993?alt=Something+I+Had+To+Do 

Puede alguien que me haga saber por qué estoy recibiendo este error y cómo unirse url base con enlace href y el rendimiento de una solicitud

Respuesta

9

es porque no agregó el esquema, por ejemplo, http: // en su base url.

Probar: urlparse.urljoin('http://www.domain.com/', i[1:])

O incluso más fácil: urlparse.urljoin(response.url, i[1:]) como urlparse.urljoin clasificará a cabo la URL base en sí.

+1

Muchas gracias, recibí la respuesta. –

+0

Y al mismo tiempo puede decirme la diferencia entre urlparse y urljoin porque al usar cualquiera de ellos también puedo obtener la respuesta –

+0

Ambos métodos urlparse.urlparse y urlparse.urljoin son parte del módulo urlparse. Vea también: http://docs.python.org/library/urlparse.html –

0

Una solución alternativa, si no desea utilizar urlparse:

response.urljoin(i[1:])

Esta solución va aún más allá: aquí Scrapy se resuelve la base del dominio de unión. Y como puede ver, no tiene que proporcionar el obvio http://www.example.com para unirse.

Esto hace que su código reutiliza en el futuro si quiere cambiar el dominio que está rastreando.

Cuestiones relacionadas