Me gustaría raspar la sección de trabajo de Linkedin, por ejemplo el siguiente enlace:
Como puede ver, tan pronto como se desplaza hacia abajo, la página carga más trabajos.
El efecto que estoy buscando es, quiero de alguna manera obtener una respuesta del sitio después de que se desplazó hasta el final, que contiene todos los trabajos posibles, para analizar usaré cheerio.
Lo que logré hacer usando js y nodejs es obtener solo la primera página, pero no más.
el primer paso sería obtener la cantidad de trabajos full-stack devueltos de su búsqueda:
ahora que conocemos los atributos del elemento, podemos agarrarlo usando cheerio,
let number_of_jobs = $("h1>small[class='jobs-search-results-list__text']").text()Ahora, como dijiste,
La forma en que funcionan las publicaciones de trabajo de LinkedIn es cargar más trabajos si se desplaza hacia abajo en la barra del navegador
pero, cuando arrastra la barra varias veces, no se cargará automáticamente, mientras que tendría que hacer clic en un botón que dice 'Ver más trabajos'.
Así que aprovecharemos eso y usaremos un método try / except . La cantidad de trabajos devueltos por nuestra consulta determinará la cantidad de veces que arrastraremos el controlador usando selenium (no podemos usar cheerio aquí ya que es un analizador HTML). También puedes usar titiritero phantomJS .
let i = 2 while (i <= int(no_of_jobs/25)+1): wd.execute_script(“window.scrollTo(0, document.body.scrollHeight);”) i = i + 1 try: wd.find_element_by_xpath ('/html/body/main/div/section/button').click() time.sleep(5) except: pass time.sleep(5) Para obtener la lista de trabajos, usaríamos el nombre de la clase: jobs-search-results__list , que es exclusivo de la lista de trabajos, y recorreremos sus elementos li para cada trabajo.
de nuevo, usando selenio:
let jobs_list = wd.find_element_by_class_name('jobs-search__results-list') let jobs = jobs_list.find_elements_by_tag_name('li') Puede verificar la duración de los jobs y la variable number_of_jobs que configuramos al principio para asegurarse de que obtuvo todo.
Y eso es todo.
Puede usar cualquier API de controlador de cromo con esta lógica, recomendaría titiritero, pero aquí usé selenio ya que lo usó como una etiqueta.