用Python制作CampusPick竞赛和对外活动爬虫 - 竞赛&对外活动自动爬取项目:第1部分

用Python制作CampusPick比赛和对外活动爬虫项目的第一篇文章。详细说明如何使用Selenium和Openpyxl库进行数据爬取。

13
用Python制作CampusPick竞赛和对外活动爬虫 - 竞赛&对外活动自动爬取项目:第1部分

0. 概述

阅读哈希爬虫开发笔记的朋友们中,预计有很多求职者和大学生会对参加比赛、社会活动等感兴趣,为了传授更实用的爬虫技术,我将使用Python创建一个用于爬取比赛/社会活动网站 캠퍼스픽 (https://www.campuspick.com/) 的爬虫。该项目将分为3个系列进行编写。

  1. 创建캠퍼스픽爬虫

  2. 使用Crontab设置爬虫执行周期并运行

  3. 使用Python和Gmail将爬取的数据发送邮件

本篇文章属于第一个系列,即创建캠퍼스픽爬虫

  • 本文不会介绍基本的Python安装等内容。

1. 安装Openpyxl

1.1. 安装库

首先,需要安装用于Python爬虫的Selenium和用于处理Excel的Openpyxl库。请在终端窗口中使用以下代码安装库。

(*如果无法使用pip,请使用下面的pip3代码。)

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

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

1.2. 导入库

接下来需要导入Selenium和time库。

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

2. 开发爬虫

2.1. 构建列表

创建一个列表来存储爬取的数据,并将要爬取的页面URL放入URL列表中。

# 크롤링한 데이터를 모아두는 리스트
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. 设置自动打开空浏览器窗口

使用以下代码可以打开一个空浏览器窗口。

# 크롬창을 띄우는 코드
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()

运行以上代码将把爬取的数据保存在earned_content中。

2.3. 将保存的数据转换为Excel

为了将保存的数据制作成Excel文件,请编写以下代码。

# 엑셀 워크북 생성
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")

以上代码是将通过库获取的数据制作成Excel的过程。

3. 结论

今天我们已经成功从캠퍼스픽网站获取了招募的比赛/社会活动并保存为Excel文件。

虽然选择了캠퍼스픽作为渠道,但如果您按照相同原理设置其他渠道,如新闻平台或政府支持项目页面等,将对实务人员和创业者有很大帮助。

在下一篇文章中,我们将了解如何基于今天制作的爬虫,使用Crontab实现每天自动收集的过程。

也一起阅读:

数据收集,现在自动化

无需编码,5分钟即可开始 · 5000多个网站爬取经验

免费开始 →

Comments

Add Comment

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

继续阅读

Get notified of new posts

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

Your email will only be used for new post notifications.