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




