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

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

3,501
用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多个网站爬取经验

免费开始 →

评论

发表评论

您的邮箱不会公开,仅用于回复通知。

继续阅读

Get notified of new posts

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

Your email will only be used for new post notifications.