I'm trying to scrap this website https://portales.bancochile.cl/personas/beneficios?categoria=marcas in particular the information of the cards, but the CSS selector does't find the information.
I'm worked at begings with bs4, but now, I'm working with scrapy. This is my basic spider.
import scrapy
from ..items import PracticescraperItem
import time
class BanChileSpider(scrapy.Spider):
name = 'banchile'
start_urls = [
'https://portales.bancochile.cl/personas/beneficios?categoria=marcas'
]
def parse(self, response):
items = PracticescraperItem()
time.sleep(5)
title = response.css('.new-beneficios-card-title d-flex::text').extract()
summary = response.css('.new-beneficios-card-subtitle d-flex::text').extract()
items['title'] = title
items['summary'] = summary
yield items
CodePudding user response:
The main reason is not to work CSS selectors is that the webpage is loaded dynamically by JavaScript and scrapy can't render JS contents but you can scrape the required data from API
with the help of scrapy easily.
Example:
from bs4 import BeautifulSoup
import scrapy
class TestSpider(scrapy.Spider):
name = 'test'
def start_requests(self):
headers= {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'}
api_url='https://portales.bancochile.cl/personas/contenidos.json?limit=999'
yield scrapy.Request(
url=api_url,
headers=headers,
callback= self.parse,
method="GET")
def parse(self, response):
resp=response.json()['contenidos']
#print(resp)
for item in resp:
d = item['description']
soup=BeautifulSoup(d,'html.parser')
p=soup.select_one('div[]')
p=p.get_text(strip=True) if p else None
#print(p)
yield {
'title':item['title'],
'description':p
}
Output:
{'title': 'Comenzó Operación Renta 2022', 'description': 'COMENZÓ EL PROCESO DE DECLARACIÓN DE IMPUESTOSPlanifícate
con Banco de Chile y no dejes pasar ni un día más.Al realizar tu declaración elige inscribir tu cuenta(1)del Banco de Chile para recibir tu abono de forma adelantada.Estas son las fechas oficiales para la devolución de este año 2022:Realízala entre:Recibe tu bono el:1 al 21 de abril12 de mayo22 al 29 de abril19 de mayo30 de abril al 10 de mayo26
de mayoSi eliges devolución con Cheque o pago por Caja, recibirás tu devolución a partir del 30 de mayo de 2022Te acompañamos en tus decisiones a través de nuestras plataformas digitalesBancochile.clBanchileinversiones.cl'}
2022-10-10 22:45:32 [scrapy.core.scraper] DEBUG: Scraped from <200 https://portales.bancochile.cl/personas/contenidos.json?limit=999>
{'title': 'Mujeres que inspiran', 'description': None}
2022-10-10 22:45:32 [scrapy.core.scraper] DEBUG: Scraped from <200 https://portales.bancochile.cl/personas/contenidos.json?limit=999>
{'title': 'Bienvenido', 'description': None}
2022-10-10 22:45:32 [scrapy.core.scraper] DEBUG: Scraped from <200 https://portales.bancochile.cl/personas/contenidos.json?limit=999>
{'title': 'Hero cuenta hazte cliente', 'description': None}
2022-10-10 22:45:32 [scrapy.core.scraper] DEBUG: Scraped from <200 https://portales.bancochile.cl/personas/contenidos.json?limit=999>
{'title': 'Solicitud enviada con éxito', 'description': 'Su solicitud se ha realizado con éxito'}
2022-10-10 22:45:32 [scrapy.core.scraper] DEBUG: Scraped from <200 https://portales.bancochile.cl/personas/contenidos.json?limit=999>
{'title': '¡Tienes un Crédito de Consumo preaprobado!', 'description': 'Tienes un Crédito de Consumo preaprobado,contrátalo 100% online yOBTÉN TU SOAP A COSTO $0Contrata tu Crédito de Consumo y abónalo a tu Cuenta FAN para obtener un100% de dcto. en tu SOAP contratado a través de APP Mi Seguro* hasta el 31 de marzo.(Válido sólo para autos, jeep o station wagon de uso particular)Hasta 60 mesesde plazo3 mesesde gracia2 mesesno consecutivos al año libres de pago
de cuota¿Cómo obtener tu SOAP a costo $0?Contrata tu Crédito de Consumo con abono a tu Cuenta FAN, desde tu Banco en Línea en bancochile.cl.Ingresa a APP Mi Seguro y contrata tu SOAP 2022para auto, jeep o sw de uso particular. Si no tienes la App, descárgala desde App Store o Google Play.Espera 48 hrs hábiles y verás abonado el monto de tu SOAP en tu Cuenta FAN.*Campaña exclusiva para clientes que hayan contratado un Crédito de Consumo FAN hasta el 31/03/2022
a las 18hrs. La Devolución de tu SOAP es efectuada HDI Seguros Generales Chile, S.A. sin participación de Banchile Corredores de Seguros Ltda. Stock limitado de 100 SOAP.'}
2022-10-10 22:45:32 [scrapy.core.scraper] DEBUG: Scraped from <200 https://portales.bancochile.cl/personas/contenidos.json?limit=999>
{'title': 'Derecho a retracto (Ley 19.496 artículo 3 bis, literal b)', 'description': None}
2022-10-10 22:45:32 [scrapy.core.scraper] DEBUG: Scraped from <200 https://portales.bancochile.cl/personas/contenidos.json?limit=999>
... so on