2009-11-27 15 views
9

Estoy tratando de hacer que el SgmlLinkExtractor funcione.Scrapy SgmlLinkExtractor pregunta

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=()

Así, entro

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

Así, la url inicial es 'http://www.whitecase.com/jacevedo/' y estoy entrando en allow=('/aadler',) y esperar También se escaneará '/aadler/'. 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 utilizado Scrapy con éxito que pueda ayudarme a terminar esta araña?

Gracias por la ayuda.

que incluyen 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 deja publicar más de 1 url de modo sustituir la URL inicial cuando sea necesario. Lo siento por eso.

Respuesta

10

está sustituyendo al "analizar" método de lo que parece. "Parse", es un método privado en CrawlSpider utiliza para seguir los vínculos.

+1

¿Se refiere a esta línea:... devolución de llamada = 'parse' – Zeynel

+0

Sí. No use la devolución de llamada "parse" en su Regla CrawlSpider. –

+0

Y cambie su método 'parse' para que sea' parse_item' – Eduardo

1

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

+1

bien, pero nada cambió Aún arrastra sólo el URL inicial – Zeynel

1

usted se echa en falta una coma después del primer elemento de "reglas" a ser una tupla ..

rules = (Rule(SgmlLinkExtractor(allow=('/careers/n.\w+',)), callback='parse', follow=True),) 
3

si marca una documentación "Advertencia" está claramente escrito

"Al escribir las reglas de crawl spider, evite usar el análisis sintáctico como devolución de llamada, ya que Crawl Spider usa el método parse para implementar su lógica. Así que si reemplaza el método de análisis sintáctico, la araña de rastreo ya no funcionará "

url for verification

Cuestiones relacionadas