Scrapy SgmlLinkExtractor pregunta
-
05-07-2019 - |
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.
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;
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),)