Pregunta

Estoy tratando de hacer que el SgmlLinkExtractor funcione.

Esta es la firma:

SgmlLinkExtractor(allow=(), deny=(), allow_domains=(), deny_domains=(), restrict_xpaths(), tags=('a', 'area'), attrs=('href'), canonicalize=True, unique=True, process_value=None)

Sólo estoy usando allow=()

Por lo tanto, entro

rules = (Rule(SgmlLinkExtractor(allow=("/aadler/", )), callback='parse'),)

Entonces, la url inicial es 'http://www.whitecase.com/jacevedo/' y estoy ingresando allow = ('' / aadler ',) y espera que '/ aadler /' también se escaneará. Pero en cambio, la araña escanea la url inicial y luego se cierra:

[wcase] INFO: Domain opened
[wcase] DEBUG: Crawled </jacevedo/> (referer: <None>)
[wcase] INFO: Passed NuItem(school=[u'JD, ', u'Columbia Law School, Harlan Fiske Stone Scholar, Parker School Recognition of Achievement in International and Foreign Law, ', u'2005'])
[wcase] INFO: Closing domain (finished)

¿Qué estoy haciendo mal aquí?

¿Hay alguien aquí que haya usado Scrapy con éxito y que pueda ayudarme a terminar esta araña?

Gracias por la ayuda.

Incluyo el código de la araña a continuación:

from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
from scrapy.item import Item
from Nu.items import NuItem
from urls import u

class NuSpider(CrawlSpider):
    domain_name = "wcase"
    start_urls = ['xxxxxx/jacevedo/']

    rules = (Rule(SgmlLinkExtractor(allow=("/aadler/", )), callback='parse'),)

    def parse(self, response):
        hxs = HtmlXPathSelector(response)

        item = NuItem()
        item['school'] = hxs.select('//td[@class="mainColumnTDa"]').re('(?<=(JD,\s))(.*?)(\d+)')
        return item

SPIDER = NuSpider()

Nota: SO no me permitirá publicar más de 1 url, así que sustituya la url inicial según sea necesario. Lo siento por eso.

¿Fue útil?

Solución

Estás anulando " parse " Método que aparece. " parse " ;, es un método privado en CrawlSpider usado para seguir enlaces.

Otros consejos

si verifica la documentación a " Advertencia " esta claramente escrito

" Al escribir las reglas de la araña de rastreo, evite usar el análisis como devolución de llamada, ya que la araña de rastreo usa el método de análisis para implementar su lógica. Por lo tanto, si anula el método de análisis, la araña de rastreo ya no funcionará. & Quot;

url para verificación

allow = (r '/ aadler /', ...

Le falta una coma después del primer elemento para " reglas " para ser una tupla ..

rules = (Rule(SgmlLinkExtractor(allow=('/careers/n.\w+', )), callback='parse', follow=True),)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top