Python - Ayuda: Scrapy Bumeran!

 
Vista:

Ayuda: Scrapy Bumeran!

Publicado por Janixx (1 intervención) el 06/06/2024 16:54:34
Ayuda, estoy intentando hacer un webscraping de la página bumeran de forma horizontal y vertical, pero mi json sale vacío. No sé en qué puedo estar fallando.

from scrapy.item import Field, Item
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from scrapy.loader.processors import MapCompose
from scrapy.loader import ItemLoader
from scrapy.crawler import CrawlerProcess

class Trabajo(Item):
empresa = Field()
titulo = Field()
lugar = Field()
modalidad = Field()

class BUMERANCrawler(CrawlSpider):
name = 'Bumeranjobs'

custom_settings = {
'USER_AGENT': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/71.0.3578.80 Chrome/71.0.3578.80 Safari/537.36',
'CLOSESPIDER_PAGECOUNT': 100, # Un poco alto
'FEED_EXPORT_FIELDS': ['titulo', 'calificacion', 'fecha_de_publicacion', 'contenido'],
'FEED_EXPORT_ENCODING': 'utf-8' # Para que se muestren bien los caracteres especiales (ej. acentos)
}

download_delay = 1
allowed_domains = ['bumeran.com.pe']
start_urls = ['https://www.bumeran.com.pe/empleos-seniority-junior.html?landing-jovenes-profesionales=true']

rules = (
Rule( # REGLA #1 => HORIZONTALIDAD POR PAGINACION
LinkExtractor(
allow=r'/empleos-seniority-junior.html\?landing-jovenes-profesionales=true&page=\d+' # Patron en donde se utiliza "\d+", expresion que puede tomar el valor de cualquier combinacion de numeros
), follow=True
), # no tiene callback
Rule( # REGLA #2 => VERTICALIDAD AL DETALLE DE LOS PRODUCTOS
LinkExtractor(
allow=r'/empleos/',
restrict_xpaths= ['//div[@id="listado-avisos"//a[@class="sc-gIjDWZ jkMzvm"]']
), follow=True, callback='parse_items'), # Al entrar al detalle de los productos, se llama al callback con la respuesta al requerimiento
)

def parse_items(self, response):
item = ItemLoader(Trabajo(), response)
item.add_xpath('titulo', '//h1/text()')
item.add_xpath('empresa', '//div[@class="sc-gKXmdW ksmoLD"]//h3[@class="sc-BnpkU cyFyou"]/text()')
item.add_xpath('lugar','//div[@class="sc-gzVnrw iYorrZ"]//h2[@class="sc-flYCIj doSVbj"]/text()')

item.add_xpath('modalidad', '//div[@class="sc-EHOje kMhwpB"]//h2[@class="sc-flYCIj doSVbj"]/text()')

yield item.load_item()

process = CrawlerProcess({
'FEED_FORMAT': 'json',
'FEED_URI': 'bumeran_datos.json'
})

process.crawl(BUMERANCrawler)
process.start()
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder