티스토리 뷰

과제내용 1) 2023년 1월 1일부터 1월 15일까지 나라장터에 올라온 입찰공고 목록을 수집한다.
2) '공동수급' 과 '투찰' 컬럼은 삭제한다.
3) 상세페이지 링크를 수집하여 '추정금액'과 '재입찰 여부' 컬럼을 추가한다.
4) 컬럼의 순서를 변경한다.
(분류 / 업무 / 공고번호-차수 / 공고명 / 공고기관 / 수요기관 / 계약방법 / 추정금액 / 입력일시 / 재입찰여부)
5) 수집한 데이터를 활용하여 새로운 데이터를 생성해낸다.
6) 해당 내용을 시각화해본다.
과제목표 1) 배웠던 코드를 활용하여 스스로 오류를 해결하며 코드를 작성할 수 있다.
2) 주어진 환경 안에서 최대한 노력하여 결과물을 얻는다.
(명절 시골방문, 노트북x, 아이패드 첫 사용 등..)
3) 본인이 짠 코드와 조원의 코드를 비교하여 더 좋은 코드 작성법을 학습한다.
이전내용_)
page_list = []
for page_no in trange(1, last_page+1):
result = page_scrapping(page_no)
page_list.append(result)
time.sleep(0.001)

∎ 반복 수집을 하려는데 빈값이 있어서 오류가 났다.
∎ 링크 수집 과정에서 예외 처리가 필요하다. => 해당 함수를 만들어 보자.
9. 빈값에 대한 예외처리가 있는 '한 페이지 수집' 함수 작성하기
∎ 승*님이 'try ~ except' 예외처리에 대한 정보와 방법을 알려주셨다.
-강의에서 배운 부분 : try (예외 발생 가능한 코드 작성), except (예외가 발생했을 때 실행할 코드 작성)
-승*님이 더 알려준 부분 : else (예외가 발생하지 않았을 때 실행할 코드 작성), finally (무조건 실행할 코드 작성)
∎ finally 구문 안에 'return' 값을 넣어주어 오류가 발생하더라도 함수를 계속 실행하도록 하면 됨.
def page_scrapping(page_no):
try:
url = get_url(page_no)
response = requests.get(url)
html = bs(response.text)
temp = pd.read_html(response.text)[0]
a_href = [a['href'] for a in html.select('div.results > table > tbody > tr > td > div > a')]
link_list = []
[link_list.append(x) for x in a_href if x not in link_list]
df_table['내용링크'] = link_list
return df_table
except Exception as e:
pass # 오류가 나도 그냥 넘어가게 해줌. (승*님이 알려줌)
finally: # 오류가 나든 안나든 무조건 실행할 코드.
return df_table # 오류가 나더라도 return을 해주어야 다시 try를 한다(고 승*님이 알려줌)
∎ 'except' 구문을 넣어주어 안에 'pass'를 담았지만, 사실 'except' 구문 없이 'finally' 구문만 주어도 동일하게 실행됨.
∎ 근데 'try'문 안에 있는 url ~ temp 까지의 코드를 함수 안에 넣으면 왜 실행이 안되는걸까?
∎ 그리고 확인 출력을 할 때 'page_scrapping(page_num)'에 숫자를 바꿔도 왜 1페이지만 출력되는걸까?
∎ 일단 반복수집문을 돌려봤다.
10. 'tqdm'으로 반복수집하기
page_list = []
for page_no in trange(1, last_page+1):
result = page_scrapping(page_no)
page_list.append(result)
time.sleep(0.001)
∎ 본가 컴퓨터 RAM 은 8기가라 성능이 별로다. 489페이지 돌리는데 15분 걸렸다.
11. concat으로 데이터 프레임을 합치고 파일 저장하기
df = pd.concat(page_list)
df.shape

∎ 잘 출력 된건지, 잘 합쳐진건지 모르겠어서 shape로 크기를 확인했다. 잘 됐다.
∎ 대통령 연설문을 했을 때처럼 여기까지 저장하고, 내용링크에서 컬럼 불러오는것과 컬럼 순서 변경하기는
파일 불러오기로 계속 이어나갈 예정이다.
12. 파일 저장하기
file_name = '나라장터.csv'
df.to_csv(file_name, index=False)
∎ 이 짧은 코드는 여전히 외워지지 않는다.
------다음 게시글에서 이어서 계속...-------
'으쌰으쌰! 팀 프로젝트 > MINI 1 (스크래핑, API)' 카테고리의 다른 글
[1차 팀프로젝트] '나라장터' 웹스크래핑 하기 (3) (0) | 2023.01.24 |
---|---|
[1차 팀프로젝트] '나라장터' 웹스크래핑 하기 (1) (0) | 2023.01.21 |