Avisos de stock / Seguimiento de precios - NVIDIA RTX, AMD RX, PS5, XBOX...

I

Hoy he pillado la 3070 gracias el bot. Estoy en el canal del bot de EOL y a esta hora entre la gente que hay ese grupo nos hemos gastado 24k en graficas xD

1
NBlack

#233 ¿por qué estáis usando selenium?
requests hace una petición inmediata sin tener que renderizar y ganais un huevo de tiempo.
El bot de EOL funciona con eso y en 5 segundos ha scrapeado 10 webs.

1 respuesta
JuGuLaToR

#240 Y por eso solo se puede descargar la factura proforma una vez haces el pago, y no la factura definitiva.

spymv

#242 yo tenía entendido que el de EOL usaba selenium webdriver también.

NBlack

#242 te prometo que no, que lo he programado yo :sweat_smile:

while not validResponse:
try:
response = requests.get(
buscar_en['pccomponentes'].format(busqueda), headers=headers, timeout=5)

1 respuesta
spymv

#245 Y eso te funciona para webs que lanzan javascrips y cambia el DOM? como: esta

Porque si usas la web general de pccom (por categorias) te aviso de que se actualiza menos veces que las individuales. Nos pasó en #190 #194
Yo usaba beautifulsoup de python y tuve que cambiar a selenium.

1 respuesta
NBlack

#246 el bot es casi inmediato (digo casi porque no quiero hacer un ataque a las webs con demasiadas peticiones :innocent:). Estoy trabajando sin cache.
Este bot no tira de JS. Todo lo trabajo con el DOM y query parameters.
Ya han (y digo han porque la que yo quiero se resiste) conseguido 76 tarjetas desde que lo arrancamos a pleno rendimiento hace 48 horas (las que se han registrado por pccom) más las otras 10 páginas que no dejan registro. Pero estimando, unas 100 tarjetas en 48 horas.

1 respuesta
spymv

#247 Creo que no me explicado bien. No digo que tu código tire de JS, sino que al hacer un request a una web como la que he puesto arriba, esta, tu DOM no contiene ciertos datos que cargan los javascrips de la web unos milisegundos más tarde. Modificando, datos como disponibilidad, el botón de comprar, etc..

Fíjate en la web que he puesto primero sale el botón de comprar y luego cambia.

1 respuesta
NBlack

#247 Eso es porque renderizas la web. Cualquier renderizado lleva tiempo con un estado "default" y luego se modifica según la petición que haces de forma dinámica (watchers, states....), ¿pero si te saltas el renderizado y coges la información que quieres?, eliminas el delay
¿Igual tienes problemas de asincronía?. Con requests puedes hacerlo perfectamente y funciona :thumbsup: te lo prometo
También igual estamos leyendo diferentes partes de la web. Yo estoy trabajando con componentes estáticos para no depender de actualizaciones del DOM.

3 respuestas
spymv
#249NBlack:

También igual estamos leyendo diferentes partes de la web

Yo creo que esto es la clave, tu habrás pillado unos elementos que no cambian. Yo me centré en el botón, que si cambia y entonces te puede dar falsos positivos y/o no avisar de que hay stock. Aclarado.

Google está lleno de gente preguntando como scrapear webs dinámicas sin Selenium, pero NOP.

MrWiskers

#249 te puedo decir que hubo stock de procesadores y tú bot no me avisó pero el de aquí si, no digo con esto que el tuyo no funciona pero en este caso específico no funcionó

1 respuesta
NBlack

#251 Si fue el X5800 decidimos apagar durante 24 horas el crawler de ese modelo porque pccomponentes estaba cambiando el stock constantemente y estaba enviando demasiados mensajes a los foreros. ¡Gracias por avisar! Ninguno es perfecto :)
Al ser un grupo abierto todo queda en consenso. Para mi este bot es de los EOLianos (y los usuarios que entran por terceras vías)

1 respuesta
MrWiskers

#252 fue el 5600x

1 respuesta
NBlack

#253 Pues toca revisar :wink: le activo trazas para ver que ocurre.
Gracias por el feedback

MrWiskers

De nada 😉

D

#249 Selenium es el mejor en simular una navegacion por un sitio (que de hecho para eso fue diseñado). Pero al depender de un "navegador" headless o WebDriver es bastante lento en general, comparado a usar request.get o un simple curl. La gracia de selenium es que te da un porron de funciones para hacer lo que quieras, como esperar a un elemento a que cargue.

Request termina siendo lo mismo que usar CURL, con algunas diferencias. Pero las webs que usan frameworks frontend de Javascript (como Angular, Vue i otros) no cargan ni con request ni con CURL, porque tal como mencionan #248 a request el DOM le llega a medias. Solo carga el html vomitado por el servidor, sin procesar nada de javascript ni renderizando nada. Ahi selenium tiene ventaja. Ese es el caso por ejemplo, de la tienda de NVIDIA, que usan un framework de cliente javascript.

Pero si lo que scrapeas es estatico (solo HTML) request / curl es lo mejor, pues es instantaneo (o casi).
Para scrapear sitios como el de la tienda de nvidia, CURL o requests no sirve, por eso que comento.

De todas formas, en PCCOmpo tienen varias URL apuntando a su API que estan abiertas sin autentificacion de ninguna clase. Como esta:

https://www.pccomponentes.com/ajax_nc/articles/price_and_availability?idArticle=319020 => Responde JSON
https://www.pccomponentes.com/cart/addItem/319020 => Añadir elemento al carrito

2
Yekale7

Como ha comentado @damapla el selenium es mucho más funcional y "seguro". Haciendo un curl / request muy muy bien lo tienes que hacer para que no falle (tengo un script en bash que hace comprueba todos los enlaces en menos de 30 segundos, pero no es fiable).

Lo ideal de este bot, sería transladar los avisos de forma individualizada o realizar una "tabla" del stock activo para no hacer tanto spam. Como he comentado, si alguno quiere aportar es bienvenido (ideas, partes de código, mejoras, etc..)

1 respuesta
R

#240 Suerte con eso como no liquidéis el IVA, porque se devenga con el cobro anticipado.

1 respuesta
Prava

#258 Lo sé, pero sigue sin ser facturación (entendiendo facturación como venta de productos o servicios). Nosotros hacemos una factura DEPÓSITO al recibir el dinero, con su IVA y todo correctamente (de hecho telemáticamente enviamos las facturas como mucho a las 48h de emitirlas) pero hasta que el servicio no se ofrece no entra propiamente en facturación.

No somos "el bar Manolo". En anticipos recibimos millones de euros al año, de todos los países que te puedas imaginar. Encima el dpto. de contabilidad es muy tiquismiquis y si la ley dice "hasta 4" ellos cortan en 2,5 "por si acaso".

Recibimos requerimientos de nuestros clientes semanalmente y nunca hemos recibido uno en contra nuestra.

1 respuesta
R

#259 Sí, sí, lo decía porque al final tienes que facturar, otra cosa es a qué ejercicio corresponda el ingreso en función de cuándo se preste el servicio.

1 respuesta
Prava

#260 Sí, por supuestísimo que la factura tienes que hacerlo. Tener dinero por ahí no facturado es un no-no, a menos que vayas a usarlo a corto plazo, en cuyo caso sí que no hace falta hacer factura. Vamos, si me pagas 1000€ hoy por una factura que te haré en 2 semanas pues no hacemos factura. Pero si no tengo la seguridad de que el servicio existirá o será mucho más adelante facturamos y au.

PD: y para añadir contexto, pccomponentes solo te da una PROFORMA. Lo que significa que en ningún caso ese dinero va al ejercicio.

D
#257Yekale7:

Lo ideal de este bot, sería transladar los avisos de forma individualizada o realizar una "tabla" del stock activo para no hacer tanto spam.

No se como detectas el stock, imagino buscando algun "string" dentro de los elementos que buscas. Si es así, una vez encuentras ese "string", puedes hacer algo tan sencillo como guardar un archivo con el nombre del id del articulo. O tambien puedes generar un md5 del string de la URL que estes escaneando que es, en principio, unico y usarlo como nombre de archivo.

En ese archivo guardas solo la fecha y hora en la que has enviado la notificación, por ejemplo: 2020-12-11 13:45

Luego puedes definir un time interval personalizado, de 5 minutos por ejemplo. Si antes de esos 5 minutos has detectado stock, no envias notificación. Eso lo compruebas comparando la hora actual (datetime.datetime.now())

Es decir, el proceso seria:

  • Compruebas stock:
    • HAY STOCK: Compruebas si existe el archivo con el md5.
      • TRUE (Existe el archivo) => Miras si han pasado mas de 5 minutos.
        • TRUE (Mas de 5 minutos) => Notificas via el Canal y vuelves a crear el archivo en cuestión (con la fecha y hora actualizada)
        • FALSE (No han pasado todavia 5 minutos) => No haces nada
      • FALSE (No existe el archivo) => Notificas y creas el archivo.
    • NO HAY STOCK => Aqui tienes dos opciones:
      • 1) Si han pasado mas de 5 minutos eliminas el archivo. Asi evitas que si reponen y se agota en segundos, no vuelva a notificar, evitas SPAM.
      • 2) Eliminas siempre el archivo si existe. Esto provocara mas spam, porque a cada vez que se agote el stock, en la siguiente iteración que se detecte stock el programa volvera a notificar, sin importar el tiempo que hayas definido.
1 respuesta
Yekale7

#262 Sí, la idea de hacerlo o cómo implementarlo no es problema (hay que dedicar tiempo). Lo que comentas está bien, pero no reduce significativamente el SPAM.

Me refería a enviar una tabla de stock al canal de telegram cada 5 minutos, en vez de avisos individuales por productos. Así, solo envío un único mensaje cada 5 minutos si hay stock de algo. Lo puedo implementar con un array y tal... pero desconozco como enviar / formatear ese mensaje para que sea mostrado con sentido en telegram.

Básicamente, saber cómo envían los canales de chollos esos "mensajes complejos", con mayúsculas, títulos, imágenes, etc...

ZelD4

Me gustaría aportar una pequeña sugerencia que creo que podría estar bien... A mi al menos me iría bien.
Creo que se podría añadir el precio recomendado cada vez que se envíe un aviso, así sabremos si estamos comprando al precio recomendado sin tener que entrar en el enlace... Por ejemplo:

Disponible: AMD Ryzen 7 5800X 3.8GHz
Precio: 628.99 (PVPR 475,91)

En mi caso no voy a comprar nada que esté por encima de su precio recomendado y esto me iría de puta madre.

Otra idea que también podría estar bien es que avisara si el stock que hay disponible es de PCComponentes y no de una tienda externa (sería un puntazo).

Gracias por el curro!

2 respuestas
Yekale7

#264 Lo tengo en cuenta, podemos probar con las CPUs.
Lo que comentas es simple de implementar, luego lo añado

1
gabiii

#64 xD me a llegado hoy mmm a entrado perfectamente en la rvz02w y yo buscando cajas te odio jajajaja

1 respuesta
Prava

#266 ¿Foto? Porque yo me basaba simplemente en los datos que tanto el fabricante de la caja como el de la gráfica indicaban.

Pero me alegro, ojo, es una putada tener que cambiar de caja por eso.

1 1 respuesta
gabiii

#267 pues me entra mil veces mejor que la 970 strix , quedo perfecta gracias de nuevo al creador del hilo menudo pepino de tarjeta

https://imgur.com/V7nvmK4
https://imgur.com/kRt7CGh

HumiDLeeT

Entro para ver como está el stock de tarjetas gráficas, veo que la mitad de mensajes hablan de como programar bots para scrapear webs, me voy hasta el mes siguiente a ver si ha mejorado el stock

1 respuesta
Yekale7

#269 Con entrar a los grupos de Telegram te basta, ya he programado un bot...

1 respuesta
Tema cerrado

Usuarios habituales