scraping example español python web-crawler scrapy scrapy-spider

python - example - scrapy vs beautifulsoup



Cómo usar la clase Rule en scrapy (1)

Puede estar seguro ya que este es el comportamiento predeterminado de los extractores de enlaces en Scrapy ( código fuente ).

Además, el argumento restrict_xpaths no debe apuntar al atributo @href , sino que debe apuntar a a elemento o contenedor que tenga a elemento como descendiente. Además, restrict_xpaths se puede definir como una cadena.

En otras palabras, reemplace:

restrict_xpaths=(''//li[@class="next"]/a/@href'',)

con:

restrict_xpaths=''//li[@class="next"]/a''

Además, debe cambiar a LxmlLinkExtractor desde SgmlLinkExtractor :

Los extractores de enlaces basados ​​en SGMLParser no se mantienen y se desaconseja su uso. Se recomienda migrar a LxmlLinkExtractor si todavía está utilizando SgmlLinkExtractor.

Personalmente, suelo usar el atajo LxmlLinkExtractor para LxmlLinkExtractor :

from scrapy.contrib.linkextractors import LinkExtractor

Para resumir, esto es lo que tendría en las rules :

rules = [ Rule(LinkExtractor(restrict_xpaths=''//li[@class="next"]/a''), follow=True) ]

Estoy tratando de usar la clase Rule para ir a la siguiente página de mi rastreador. Aquí está mi código

from scrapy.contrib.spiders import CrawlSpider,Rule from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor from crawler.items import GDReview class GdSpider(CrawlSpider): name = "gd" allowed_domains = ["glassdoor.com"] start_urls = [ "http://www.glassdoor.com/Reviews/Johnson-and-Johnson-Reviews-E364_P1.htm" ] rules = ( # Extract next links and parse them with the spider''s method parse_item Rule(SgmlLinkExtractor(restrict_xpaths=(''//li[@class="next"]/a/@href'',)), follow= True) ) def parse(self, response): company_name = response.xpath(''//*[@id="EIHdrModule"]/div[3]/div[2]/p/text()'').extract() ''''''loop over every review in this page'''''' for sel in response.xpath(''//*[@id="EmployerReviews"]/ol/li''): review = Item() review[''company_name''] = company_name review[''id''] = str(sel.xpath(''@id'').extract()[0]).split(''_'')[1] #sel.xpath(''@id/text()'').extract() review[''body''] = sel.xpath(''div/div[3]/div/div[2]/p/text()'').extract() review[''date''] = sel.xpath(''div/div[1]/div/time/text()'').extract() review[''summary''] = sel.xpath(''div/div[2]/div/div[2]/h2/tt/a/span/text()'').extract() yield review

Mi pregunta es sobre la sección de reglas. En esta regla, el enlace extraído no contiene el nombre de dominio. Por ejemplo, devolverá algo como "/Reviews/Johnson-and-Johnson-Reviews-E364_P1.htm"

¿Cómo puedo asegurarme de que mi rastreador anexará el dominio al enlace devuelto?

Gracias