[나라장터] 크롤링
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
import pandas as pd
import datetime
import time
import os
times=20
while True:
if(str(datetime.datetime.now())[11:13]=='10'):
times=20
print(times)
if(not(str(datetime.datetime.now())[0:10].replace('-','')+'.csv' in os.listdir('G:/내 드라이브'))):
times=50
print(times)
driver=webdriver.Chrome('c:/selenium/chromedriver')
results=[]
querylist=['홈페이지','플랫폼','포털','시스템','구축','빅데이터','산학협력','산학포털','LINC','업무지원','평생교육','솔루션']
querylist2=['중앙신체검사소','한국감정원','한국교육학술정보원','한국산업단지공단','한국사학진흥재단','한국산업기술평가관리원','한국가스공사','신용보증기금','중앙119구조본부','한국정보화진흥원','중앙교육연수원','한국장학재단','대구경북첨단의료산업진흥재단','의료기술시험훈련원','한국뇌연구원','한의기술응용센터','한국도로공사','한국건설관리공사','교통안전공단','국립농산물품질관리원','농림축산검역본부','국립종자원','한국전력기술','대한법률구조공단','우정사업조달사무소','기상통신소','조달품질원','한국법무보호복지공단','에너지경제연구원','근로복지공단','노동부고객상담센터','한국산업인력공단','한국산업안전보건공단','국립재난안전연구원','한국동서발전','한국석유공사','한국에너지공단','한국토지주택공사','주택관리공단','한국시설안전공단','중소기업진흥공단','한국산업기술시험원','한국세라믹기술원','한국남동발전','한국승강기안전관리원','국방기술품질원','중앙관세분석소','한국저작권위원회','대구광역시','대구광역시교육청','대구광역시교육연구정보원','경상북도교육청','경상북도교육연구원','경상북도교육정보센터','국립대구과학관']
n=len(querylist)*len(querylist2)
t=0
try:
for query in querylist:
for query2 in querylist2:
t=t+1
driver.get('http://www.g2b.go.kr:8101/ep/tbid/tbidFwd.do')
# 업무 종류 체크
# task_dict = {'용역': 'taskClCds5', '민간': 'taskClCds20', '기타': 'taskClCds4'}
# for task in task_dict.values():
# checkbox = driver.find_element_by_id(task)
# checkbox.click()
instNm=driver.find_element_by_id('instNm')
instNm.clear()
instNm.send_keys(query2)
instNm.send_keys(Keys.RETURN)
# 입찰정보 검색 페이지로 이동
# 검색어
# id값이 bidNm인 태그 가져오기
bidNm = driver.find_element_by_id('bidNm')
# 내용을 삭제 (버릇처럼 사용할 것!)
bidNm.clear()
# 검색어 입력후 엔터
bidNm.send_keys(query)
bidNm.send_keys(Keys.RETURN)
# 검색 조건 체크
option_dict = {'검색기간 1달': 'setMonth1_1', '입찰마감건 제외': 'exceptEnd'}
for option in option_dict.values():
checkbox = driver.find_element_by_id(option)
checkbox.click()
# 목록수 100건 선택 (드롭다운)
recordcountperpage = driver.find_element_by_name('recordCountPerPage')
selector = Select(recordcountperpage)
selector.select_by_value('100')
# 검색 버튼 클릭
search_button = driver.find_element_by_class_name('btn_mdl')
search_button.click()
# 검색 결과 확인
elem = driver.find_element_by_class_name('results')
div_list = elem.find_elements_by_tag_name('div')
# 검색 결과 모두 긁어서 리스트로 저장
#results.append(query)
#if len(div_list)!=0:
# results.append(query)
for div in div_list:
results.append(div.text)
a_tags = div.find_elements_by_tag_name('a')
if a_tags:
for a_tag in a_tags:
link = a_tag.get_attribute('href')
results.append(link)
# 검색결과 모음 리스트를 12개씩 분할하여 새로운 리스트로 저장
#result = [results[i * 13:(i + 1) * 13] for i in range((len(results) + 13 - 1) // 13 )]
result = [results[i * 12:(i + 1) * 12] for i in range((len(results) + 12 - 1) // 12 )]
# 결과 출력
print(round(t/n*100,2))
#print(result)
except Exception as e:
# 위 코드에서 에러가 발생한 경우 출력
print(e)
finally:
# 에러와 관계없이 실행되고, 크롬 드라이버를 종료
driver.quit()
my_df=pd.DataFrame(result)
my_df.to_csv('G:/내 드라이브/test.csv',index=False,header=False,encoding='cp949')
my_df.to_csv('G:/내 드라이브/'+str(datetime.datetime.now())[0:10].replace('-','')+'.csv',index=False,header=False,encoding='cp949')
time.sleep(60*times)
'python > crawling' 카테고리의 다른 글
[Selenium] 기상자료 크롤링 (1) | 2021.04.03 |
---|---|
크롤링과 python (0) | 2021.04.03 |
python selenium 자주쓴거 정리 (0) | 2020.03.23 |
나라장터 open api crawling (0) | 2020.03.01 |
selenium 사용해서 위경도 가져오기 (0) | 2019.03.20 |
power shell 을 활용하여 windows에 jupyter notebook 설치하기
power shell 을 활용하여
windows에 jupyter notebook 설치하기
환경변수 설정
아래의 환경변수(N)...을 클릭
사용자 변수에 path에서 경로를 2개 추가하여야 power shell에서 주피터 설치가 가능하다.
windows 키 > python 입력 > 우클릭 > 파일 경로 찾기 > 아래와 같이 출력
하지만 이경로는 바로가기의 경로이므로 python 우클릭 > 아래의 대상 경로에서 python.exe를 제외하여 복사하여 경로에 들어간다.
해당 경로와 Scripts 경로를 path에 추가
위와 같이 환경변수 설정을 하였다면, power shell 을 실행하여 pip3 install jupyter를 입력하면 설치가 완료된다.
주피터 노트북을 실행하려면 jupyter notebook 을 입력하면 된다.
'python' 카테고리의 다른 글
matplotlib 정리(1) (0) | 2020.02.16 |
---|---|
주피터 노트북에 메모리 사용량 모니터링 하기 (0) | 2020.01.24 |
python 회귀분석 할 때 주로 사용할 것 같은 패키지 및 코드 (0) | 2020.01.14 |
selenium, shape file을 활용한 미세먼지 시각화(folium 사용) (0) | 2019.05.09 |
파이썬3.7 지뢰찾기 (0) | 2019.04.08 |
selenium, shape file을 활용한 미세먼지 시각화(folium 사용)
좌표계 변환 및 다시 불러오기¶
import shapefile
from json import dumps
import geopandas as gpd
#좌표계 변환
sf=gpd.read_file('/home/ducj/data/ducj/files/json/shp/CTPRVN_201703/TL_SCCO_CTPRVN.shp',encoding='cp949')
sf=sf.to_crs(epsg='4326')
sf.to_file('/home/ducj/data/ducj/files/json/shp/CTPRVN_201703/test.shp',encoding='cp949')
#변환 후 불러오기
reader = shapefile.Reader('/home/ducj/data/ducj/files/json/shp/CTPRVN_201703/test.shp',encoding='cp949')
#shape file 을 json 파일로 변환하기 위한 코드
fields = reader.fields[1:]
field_names = [field[0] for field in fields]
buffer = []
for sr in reader.shapeRecords():
atr = dict(zip(field_names, sr.record))
geom = sr.shape.__geo_interface__
name=sr.record[2]
buffer.append(dict(type="Feature", \
properties=atr,id=name,geometry=geom))
#json파일로 저장
from json import dumps
geojson = open("/home/ducj/data/ducj/files/json/shp/CTPRVN_201703/pyshp-demo.json", "w")
geojson.write(dumps({"type": "FeatureCollection",\
"features": buffer}, indent=2) + "\n")
geojson.close()
미세먼지 자료 크롤링을 위한 코드¶
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
from time import sleep
import pandas as pd
# create a new chrome session
options = Options()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
driver = webdriver.Chrome(chrome_options=options, executable_path="/home/ducj/crawling/chromedriver")
driver.implicitly_wait(3)
driver.maximize_window()
url='https://www.airkorea.or.kr/web/sidoQualityCompare?itemCode=10007&pMENU_NO=101'
driver.get(url)
sleep(0.3)
html = driver.page_source
dfs = pd.read_html(html)
driver.close()
dfs[0]
크롤링으로 생성#54620; 데이터를 필요한 형태로 변환¶
#데이터 생성
data=pd.DataFrame([dfs[0].transpose()[1::][0].index,dfs[0].transpose()[1::][0]]).transpose()
data=pd.DataFrame({'area':data[0],'dust':data[1]})
#데이터 수치로 변환
data['dust']=data['dust'].astype(float)
data.reset_index(inplace=True,drop=True)
data=data.set_index('area')
print(data.dtypes)
data.head()
앞에서 생성한 json 파일 불러와 지역이름을 동일하게 변환¶
import folium
import json
json = json.load(open("/home/ducj/data/ducj/files/json/shp/CTPRVN_201703/pyshp-demo.json", encoding='utf-8'))
for i in range(17):
json['features'][i]['id']=data['dust'].index[i]
# for i in range(17):
# json['features'][i]['properties']['CTP_KOR_NM']=data['dust'].index[i]
지도형식으로 시각화¶
map=folium.Map(location=[37.5502, 126.982], tiles='Stamen toner') # 서울시
folium.Choropleth(
geo_data=json,
name='choropleth',
data=data['dust'],
key_on='feature.id',
fill_color='YlGn',
fill_opacity=0.7,
line_opacity=0.2).add_to(map)
folium.LayerControl().add_to(map)
map.save('/home/ducj/nas/data.html')
'python' 카테고리의 다른 글
matplotlib 정리(1) (0) | 2020.02.16 |
---|---|
주피터 노트북에 메모리 사용량 모니터링 하기 (0) | 2020.01.24 |
python 회귀분석 할 때 주로 사용할 것 같은 패키지 및 코드 (0) | 2020.01.14 |
power shell 을 활용하여 windows에 jupyter notebook 설치하기 (0) | 2019.06.27 |
파이썬3.7 지뢰찾기 (0) | 2019.04.08 |
파이썬3.7 지뢰찾기
def mine():
import random
board=[[False for x in range(10)]for y in range(10)]
for r in range(10):
for c in range(10):
if( random.random()<0.3):
board[r][c]=True
board2=[[' ' for x in range(10)]for y in range(10)]
#지뢰 개수 출력
mine=0
for r in range(10):
for c in range(10):
if(board[r][c]==True):
mine=mine+1
board2=[[' ' for x in range(10)]for y in range(10)]
from IPython.display import clear_output
while True:
#사용자로부터 좌표 입력받기
x=int(input('x 좌표를 입력하시오 : '))-1
y=int(input('y좌표를 입력하시오 : '))-1
#입력된 예전에 입력되었는지 확인하기
if board2[x][y]==False:
print('잘못된 위치입니다.')
continue
else:
#입력 된 좌표가 지뢰이면 지뢰위치 출력하고 멈추기
if board[x][y]==True:
print('지뢰입니다.')
for r in range(10):
for c in range(10):
if board[r][c]:
print('# ',end='')
else:
print('. ',end='')
print()
break
#입력된 자료가 지뢰가 아니면 사용자가 입력했던 위치 출력하기
else:
board2[x][y]=False
clear_output()
sum=0
for r in range(10):
for c in range(10):
if board2[r][c]:
print('. ',end='')
else:
print('x ',end='')
if board2[r][c]==' ':
sum=sum+1
print()
print('지뢰수 :',mine,'남은 셀의 수 :',sum)
'python' 카테고리의 다른 글
matplotlib 정리(1) (0) | 2020.02.16 |
---|---|
주피터 노트북에 메모리 사용량 모니터링 하기 (0) | 2020.01.24 |
python 회귀분석 할 때 주로 사용할 것 같은 패키지 및 코드 (0) | 2020.01.14 |
power shell 을 활용하여 windows에 jupyter notebook 설치하기 (0) | 2019.06.27 |
selenium, shape file을 활용한 미세먼지 시각화(folium 사용) (0) | 2019.05.09 |
selenium 사용해서 위경도 가져오기
Selenium 사용하기
예전엔 따로 다운로드 받지 않아도 패키지만 설치해서 크롤링이 가능했는데 크롬버전 업그레이드 때문인지 cmd로 chromeDriver를 열어주는 방법을 사용해야 된다.
목차
1. 필요 파일 다운로드
2. 크롤링 환경 만들기
3. python에서 크롤링 시작하기
1.필요파일 다운로드
우선 cmd로 chrome Driver를 열어주는 방법을 알아보자.
아래 3개의 파일을 같은 경로에 다운로드 받자.
아래와 같이 selenium-server와 geckodriver, chromedriver 3개를 설치해주면 된다.
다운로드 받은 파일을 한 경로에 옮긴다.
위에서 보시다 시피 나의 경로는 C:\selenium이다.
2. 크롤링 환경 만들기
아나콘다 프롬프트에서 pip install selenium 을 통해 selenium 다운로드
3. python에서 크롤링 시작하기
'python > crawling' 카테고리의 다른 글
[Selenium] 기상자료 크롤링 (1) | 2021.04.03 |
---|---|
크롤링과 python (0) | 2021.04.03 |
python selenium 자주쓴거 정리 (0) | 2020.03.23 |
나라장터 open api crawling (0) | 2020.03.01 |
[나라장터] 크롤링 (2) | 2019.11.14 |