본문 바로가기
Back-end/Python Scrapper

Flask로 웹스크래퍼 만들기 - 3

by devraphy 2020. 8. 9.

1. 통합구현 

- 저번 포스팅에서 word로 검색단어를 받아오는 법을 알았으니 이 기능과 이전에 만들어 놓은 스크래퍼를 연결하겠습니다. 

 

(1)먼저 스크래퍼 코드를 복사해서 파일을 따로 만들어줍니다. 저는 indeed.py 코드만 사용했습니다. 

- 위의 사진처럼 scrapper파일을 생성해서 indeed 파일의 코드를 복붙했습니다.

 

 

(2) report함수에서 받아온 word변수의 값을 scrapper에서 import해온 get_jobs()함수의 매개변수로 사용합니다.

 

- 여기서, 다른 함수도 많은데 왜 하필 get_jobs()함수와 word변수를 연결하는걸까요? 

- 그 이유는, report페이지가 검색결과를 출력하는 부분이기 때문입니다. 검색단어를 받아오면서 동시에 검색결과를 출력해야 하는 역할을 report함수가 하기 때문이죠. 그렇기에 report함수에서 받아온 word변수를 get_jobs()함수의 매개변수로 매개변수로 이용하여 결과를 출력하도록 하기 위함입니다. 

 

 

(3) 받아온 word변수를 URL에 적용하여 스크래핑할 수 있도록 동적 URL을 만들어줄겁니다. 아래의 코드를 확인해주세요. 

- 이전까지 전역변수이면서 고정 URL을 갖고있던 url변수를 get_jobs()의 지역변수로 만들어 동적 url로 구현합니다. 

- 하지만, url을 지역변수로 만들었기 때문에 이전에 사용하던 함수에서는 url변수를 사용하지 못하게 됩니다. 

- 이 문제를 해결하기 위해 모든 함수에 url을 매개변수로 지정하였습니다. 그러면 어떤 검색어가 들어와도 동적으로 바뀐 url을 기반으로 함수들이 작동할 수 있겠죠? 저는 python을 검색했고 결과는 아래와 같이 나옵니다. 

 


2. 가짜DB 만들기

- 검색과 추출을 할 때 처리시간이 오래 걸립니다. 더 빠른 스크래퍼를 만들기 위해 가짜DB를 만들어 보겠습니다. 아래 사진을 참고해주세요. 

 

(1) db라는 이름의 딕셔너리를 만들어 줍니다. 

(2) 딕셔너리에서 word변수와 일치하는 값을 갖고있는지 확인합니다. 없다면 fromDb는 None이 되겠죠?

(3) fromDb변수가 갖고 있는 값이 None인지 아닌지를 확인하여 값이 있다면 저장된 결과를 출력하고 없다면 스크래퍼 기능을 이용해 추출하여 결과를 출력합니다. 


3. 출력부 만들기

- 모든 준비는 끝났습니다. 이제 추출된 결과를 화면에 보여지도록 만들어봅시다.

 

(1) 먼저 몇개의 결과가 검색되었는지 출력하는 부분을 만들겠습니다. 아래 사진은 report.html입니다. 

 

 (2) 이전에 searchword를 get_jobs()함수에서 받아온 것처럼 resultsNumber라는 값을 받아오면 되겠죠? 검색결과의 수는 jobs의 길이를 받아오면 됩니다. jobs는 Array이기 때문이죠. 아래 사진은 main.py입니다. 

 

(3) 잘 작동하는지 결과를 출력해봅시다. 


4. Rendering

- 추출한 값들을 report.html에서 출력할 수 있도록 랜더링을 합니다.

 

(1) report.html에 테이블을 만들어줍니다. 

 

 

(2) jobs에 담겨있는 결과들을 html에서 사용할 수 있도록 main에서 값을 전달합니다 

main.py 파일입니다.

 

 

(3) jobs에 담겨있는 결과들을 for~in~을 사용하여 하나씩 report.html에 있는 테이블 형식에 맞게 넣어줍니다. 

 

 

(4) 모든 준비는 끝났구요 이제 출력해봅시다. 

 

- 아직 끝나지 않았습니다. 다음 포스팅에는 사용자가 이 결과를 csv파일로 다운받을 수 있도록 만들어보겠습니다.

댓글