Crear un rastreador automático para concursos y actividades extracurriculares en Python - Proyecto de rastreo automático de concursos y actividades extracurriculares: Parte 1

Primer post del proyecto para crear un web crawler para concursos y actividades extracurriculares en Python. Explicación detallada sobre cómo hacer web scraping utilizando las bibliotecas Selenium y Openpyxl.

11
Crear un rastreador automático para concursos y actividades extracurriculares en Python - Proyecto de rastreo automático de concursos y actividades extracurriculares: Parte 1

0. Resumen

Se espera que muchos de ustedes, lectores de las notas de desarrollo de Hashscraper, como estudiantes universitarios o personas en busca de empleo que buscan concursos, actividades extracurriculares, etc., estén interesados en aprender tecnologías de raspado más prácticas. Por lo tanto, en este artículo, crearemos un rastreador para el sitio de concursos/actividades extracurriculares CampusPick (https://www.campuspick.com/) utilizando Python. El proyecto se dividirá en 3 series.

  1. Creación de un rastreador para CampusPick
  2. Configuración del período de ejecución del rastreador utilizando Crontab y ejecución
  3. Envío de los datos raspados por correo electrónico utilizando Python y Gmail

Este artículo se centra en la creación del rastreador para CampusPick.

  • Este post no proporciona instrucciones sobre la instalación básica de Python.

1. Instalación de Openpyxl

1.1. Instalación de la biblioteca

Primero, debe instalar las bibliotecas utilizadas en el raspado de Python, Selenium y Openpyxl para manipular Excel. Por favor, instale las bibliotecas con el siguiente código en la ventana de la terminal.

(Si pip no está disponible, puede usar el siguiente código con pip3)

# selenium 설치
pip install selenium
# or
pip3 install selenium

# openpyxl 설치
pip install openpyxl
# or
pip3 install openpyxl

1.2. Importación de bibliotecas

Luego, es necesario importar las bibliotecas Selenium y time.

# 크롤러 라이브러리
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
# 엑셀 라이브러리
import openpyxl
# 시간 라이브러리
import time

2. Desarrollo del rastreador

2.1. Construcción de listas

Cree una lista para recopilar los datos raspados y una lista de URLs de las páginas que desea rastrear.

# 크롤링한 데이터를 모아두는 리스트
earned_content = []

# 캠퍼스픽 공모전 페이지와 대외활동 페이지 URL
contest_url = "<https://www.campuspick.com/contest>"
activity_url = "<https://www.campuspick.com/activity>"
url_list = [contest_url, activity_url]

2.2. Configuración para abrir automáticamente una ventana de navegador vacía

Con el siguiente código, puede abrir una ventana de navegador vacía.

# 크롬창을 띄우는 코드
driver = webdriver.Chrome()
for url in url_list:
    # url 접속
    driver.get(url)
    # 로딩이 다 되기 위해서 3초 기다려주기
    time.sleep(3)

    # 웹페이지 자체가무한스크롤이므로 리스트에서 첫번째 것만 가져와서,
    # following-sibling 을 이용해서 다음 리스트 가져옴
    lis = driver.find_elements(By.XPATH, '//*[@class="list"]/*[@class="item"]')
    li = lis[0] if lis else None

    while li:
        if li.find_elements(By.XPATH, './/*[@class="dday highlight"]'):
            # 마감기한을 가져와서 마감된 게시물인지 확인
            due_date = li.find_element(By.XPATH, './/*[@class="dday highlight"]').text
            if "마감" in due_date:
                print("마감된 게시물은 가져오지 않습니다")
        else:
            print("마감기한이 없습니다")
            break  # 시간순서로 가져오기 때문에 마감이면 이후에 게시물도 마감이므로 반복문 종료

        # 다음 리스트 아이템으로 스크롤하는 코드
        driver.execute_script("arguments[0].scrollIntoView({behavior: 'smooth', block: 'center'});", li)

        # 키워드
        keywords = li.find_elements(By.XPATH, './/*[@class="badges"]/span')
        keyword_list = [keyword.text for keyword in keywords]
        keyword_str = ",".join(keyword_list)

        # 활동명
        title = li.find_element(By.XPATH, './/h2').text
        # 주최
        company = li.find_element(By.XPATH, './/*[@class="company"]').text
        # 조회수
        view_count = li.find_element(By.XPATH, './/*[@class="viewcount"]').text
        # 썸네일 이미지 URL
        thumbnail_url = li.find_element(By.XPATH, './/figure').get_attribute("data-image")

        results = [keyword_str, title, company, due_date, view_count, thumbnail_url]

        print(results)

        earned_content.append(results)

        # 다음 리스트 있는지 확인해서 리스트 가져오기
        if li.find_elements(By.XPATH, './following-sibling::*[@class="item"]'):
            print("다음 리스트가 존재합니다")
            next_li = li.find_element(By.XPATH, './following-sibling::*[@class="item"]')
            if next_li.find_element(By.XPATH, './/*[@class="dday highlight"]'):
                due_date = next_li.find_element(By.XPATH, './/*[@class="dday highlight"]').text
                print(f"마감기한: {due_date}")
                if "마감" in due_date:
                    print("마감된 게시물은 가져오지 않습니다")
                print("다음게시물을 가져옵니다")
                li = next_li
            else:
                print("마감기한이 없습니다")
                break  # 시간순서로 가져오기 때문에 마감이면 이후에 게시물도 마감이므로 반복문 종료
        else:
            print("다음 리스트가 존재하지 않습니다. 종료합니다.")
            break
# 크롬 드라이버 종료
driver.quit()

Al ejecutar el código anterior, los datos raspados se guardarán en earned_content.

2.3. Conversión de datos guardados a Excel

Para convertir los datos guardados en un archivo Excel, escriba el siguiente código.

# 엑셀 워크북 생성
wb = openpyxl.Workbook()

# 엑셀 시트 생성
ws = wb.active
ws.title = "캠퍼스픽 대외활동_공모전 정보"

# 컬럼 제목 추가
column_titles = ["키워드", "활동명", "주최", "마감일", "조회수", "썸네일이미지 URL"]
ws.append(column_titles)

# 데이터를 한줄씩 시트에 쓰기
for row_data in earned_content:
    ws.append(row_data)

# 엑셀 파일 저장
wb.save("campuspick_info_data.xlsx")

El código anterior convierte los datos obtenidos a través de la biblioteca en un archivo Excel.

3. Conclusión

Hoy hemos logrado traer concursos y actividades extracurriculares que se están reclutando en el sitio de CampusPick y guardarlos en Excel.

Al seleccionar CampusPick como canal, y configurando otros canales como plataformas de noticias o páginas de proyectos gubernamentales de la misma manera, creo que será de gran ayuda para profesionales y emprendedores.

En el próximo post, veremos cómo hacer que el rastreador que creamos hoy se recolecte automáticamente todos los días utilizando Crontab.

  • Lea también:

Recopilación de datos, ¡ahora automatícela!

Comience en 5 minutos sin necesidad de programación · Experiencia en raspado de más de 5,000 sitios web

Comience gratis →

Comments

Add Comment

Your email won't be published and will only be used for reply notifications.

Sigue leyendo

Get notified of new posts

We'll email you when 해시스크래퍼 기술 블로그 publishes new content.

Your email will only be used for new post notifications.