728x90
실행결과입니다.
edge 실행화면입니다.
jupyter notebook 실행화면입니다.
전체 코드입니다.
#크롤링시 필요한 라이브러리 불러오기
from bs4 import BeautifulSoup
import requests
from tqdm import tqdm
from selenium import webdriver
from selenium.common import exceptions
from selenium.webdriver.common.alert import Alert
import time
driver = webdriver.Edge('C:\\Users\\qogml\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Python 3.11\\msedgedriver.exe')
# 크롤링할 url 생성하는 함수 만들기(검색어, 크롤링 시작 페이지, 크롤링 종료 페이지)
def makeUrl(start_pg, end_pg):
if start_pg == end_pg:
url = "https://www.data.go.kr/tcs/dss/selectDataSetList.do?dType=FILE&keyword="+keyword+"&detailKeyword=&publicDataPk=&recmSe=N&detailText=&relatedKeyword=&commaNotInData=&commaAndData=&commaOrData=&must_not=&tabId=&dataSetCoreTf=&coreDataNm=&sort=_score&relRadio=&orgFullName=&orgFilter=&org=&orgSearch=¤tPage=" + str(start_page) + "&perPage=10&brm=&instt=&svcType=&kwrdArray=&extsn=&coreDataNmArray=&pblonsipScopeCode=";
return url
else:
urls = []
for i in range(start_pg, end_pg + 1):
page = i
url = "https://www.data.go.kr/tcs/dss/selectDataSetList.do?dType=FILE&keyword="+keyword+"&detailKeyword=&publicDataPk=&recmSe=N&detailText=&relatedKeyword=&commaNotInData=&commaAndData=&commaOrData=&must_not=&tabId=&dataSetCoreTf=&coreDataNm=&sort=_score&relRadio=&orgFullName=&orgFilter=&org=&orgSearch=¤tPage=" + str(page) + "&perPage=10&brm=&instt=&svcType=&kwrdArray=&extsn=&coreDataNmArray=&pblonsipScopeCode="
urls.append(url)
# print("생성url: ", urls)
return urls
# html에서 원하는 속성 추출하는 함수 만들기 (기사, 추출하려는 속성값)
def news_attrs_crawler(articles,attrs):
attrs_content=[]
for i in articles:
attrs_content.append(i.attrs[attrs])
return attrs_content
#html생성해서 기사크롤링하는 함수 만들기(url): 링크를 반환
def articles_crawler(url):
#html 불러오기
original_html = requests.get(i,headers=headers)
html = BeautifulSoup(original_html.text, "html.parser")
# url_naver = html.select("div.group_news > ul.list_news > li div.news_area > div.news_info > div.info_group > a.info")
url_portal = html.select("div.result-list dl > dt > a")
url = news_attrs_crawler(url_portal,'href')
return url
# ConnectionError방지
#headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/98.0.4758.102"}
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Edg/114.0.1823.51"}
keyword = input("\n크롤링할 키워드를 입력해주세요.")
#검색 시작할 페이지 입력
page = int(input("\n크롤링할 시작 페이지를 입력해주세요. ex)1(숫자만입력):")) # ex)1 =1페이지,2=2페이지...
print("\n크롤링할 시작 페이지: ",page,"페이지")
#검색 종료할 페이지 입력
page2 = int(input("\n크롤링할 종료 페이지를 입력해주세요. ex)1(숫자만입력):")) # ex)1 =1페이지,2=2페이지...
print("\n크롤링할 종료 페이지: ",page2,"페이지")
news_url =[]
#####크롤링 시작#####
# 각 page url 생성.
url = makeUrl(page,page2)
# 각 페이지의 데이터 페이지 url 모으기
for i in url:
for j in articles_crawler(url):
news_url.append(j)
# url 최종 형태 만들기. (/data/15069941/fileData.do 형태에서 앞에 https~ 붙이기.)
final_urls = []
for i in tqdm(range(len(news_url))):
if "data" in news_url[i]:
final_urls.append("https://www.data.go.kr/" + news_url[i])
else:
pass
# url마다 파일 다운로드하기.
for i in tqdm(final_urls):
# url 접속
try:
driver.get(i)
# alert 창이 뜨면 예외발생.
except exceptions.UnexpectedAlertPresentException as e :
da = Alert(driver)
driver.get(i)
time.sleep(5)
# 다운로드 버튼이 없으면 넘어가기
try :
title_content = driver.find_element_by_xpath("//a[@class='button just-mb']")
title_content.click()
print('버튼 클릭')
continue
except exceptions.NoSuchElementException as e :
print(i)
try :
title_content = driver.find_element_by_xpath("//a[@class='button mb-3 just-mb']")
title_content.click()
print('버튼 클릭')
except exceptions.NoSuchElementException as e :
print('버튼 없음.')
print(i)
'Python' 카테고리의 다른 글
[Python] OpenCV 라이브러리로 이미지에 도형 그리기 (0) | 2023.07.30 |
---|---|
[python] 자연어 처리를 위한 텍스트 전처리(불용어 제거) (0) | 2023.07.28 |
[Python] 라즈베리파이3와 L298N 모터드라이버로 DC 모터 제어하기 (0) | 2023.07.15 |
[Python]pandas 를 이용하여 csv 파일 다루기 (0) | 2023.07.13 |
[Python]Python에서 데이터 프레임을 이용하여 파이그래프 그리기 (0) | 2023.07.05 |