Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

139
Vistas
Necesito ayuda para raspar la imagen de craigslist

He intentado todo lo que puedo pensar. Puedo obtener postUrl, fecha, título, precio y ubicación. Si va a https://sandiego.craigslist.org/search/sss?query=surfboards y pega el fragmento de código a continuación en la consola, obtendrá todas las imágenes. Pero cuando intento acceder a mi código, vuelve indefinido. ¡Cualquier ayuda en esto sería muy apreciada!

 $('#search-results > li').each((index, element) => { console.log( $(element).children().find('img').attr('src') ) })
 import axios from 'axios' import request from 'request-promise' import cheerio from 'cheerio' import express from 'express' import path from 'path' const __dirname = path.resolve(); const PORT = process.env.PORT || 8000; const app = express(); app.get('', (req, res) => { res.sendFile(__dirname + '/views/index.html') }); const surfboards = []; axios("https://sandiego.craigslist.org/search/sss?query=surfboards") .then(res => { const htmlData = res.data; const $ = cheerio.load(htmlData); $('#search-results > li').each((index, element) => { const postUrl = $(element).children('a').attr('href'); const date = $(element).children('.result-info').children('.result-date').text(); const title = $(element).children('.result-info').children('.result-heading').text().trim(); const price = $(element).children('.result-info').children('.result-meta').children('.result-price').text(); const location = $(element).children('.result-info').children('.result-meta').children(".result-hood").text().trim(); // Why is this not working?!?!?!?!?! const img = $(element).children().find('img').attr('src'); surfboards.push({ title, postUrl, date, price, location, img }) }) return surfboards }).catch(err => console.error(err)) app.get('/api/surfboards', (req, res) => { const usedboards = surfboards return res.status(200).json({ results: usedboards }) }) // Make App listen app.listen(PORT, () => console.log(`Server is listening to port ${PORT}`))
about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Parece que la página configura las imágenes con JavaScript. Por lo tanto axios obtiene el HTML sin enlaces reales a las imágenes.

Pero parece haber una solución aquí. Puede generar enlaces a imágenes concatenando https://images.craigslist.org y el valor de data-ids de a etiqueta principal.

ingrese la descripción de la imagen aquí

Puede obtener los data-ids esta manera:

 var data_ids = $(element).children('a').attr('data-ids')

luego divídalo en una matriz por coma, elimine los dos primeros 3: símbolos y concatene así:

 `${img_base_url}/${ids}_${resolution_and_extension}`

Pero si necesita obtener la URL solo para la primera imagen, entonces no es necesario crear una nueva matriz cada vez. Use una subcadena en su lugar (tenga en cuenta que a veces li no tiene ninguna imagen):

 if (data_ids && data_ids.includes(',')) { data_ids.substring(data_ids.indexOf('3:') + 2, data_ids.indexOf(',')) } else if (data_ids) { data_ids.substring(data_ids.indexOf('3:') + 2, data_ids.length) }
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda