이후 공부를 계속 하면서, selenium 라이브러리를 알게 되었고 cromedriver를 활용하여 웹의 동작을 자동화 할 수 있다는 것에 관심을 가지게 되었다. 특히 selenium으로 크롤링을 할 경우 1주전 공부했던 개념과 매우 흡사하다고 판단하여, 이번에는 selenium을 활용한 웹 크롤러를 개발해 보고 싶었다.
총 3개의 파일로 나누어 모듈과 메서드를 관리했다.
job_search.py
from selenium.webdriver.chrome.options import Options
options.add_argument('headless')
options.add_argument("window-size=1920x1080")
options.add_argument("disable-gpu")
driver = webdriver.Chrome(executable_path="/home/geonoo/chromedriver/chromedriver", chrome_options=options)
excutable_path= 는 크롬드라이브가 있는 위치이고, chrome_options= 내가 설정한 옵션으로 실행시키겠다는 뜻이다.page = driver.find_elements_by_xpath("//a[@class='page-link']")
max_page = int(list[-1])
1 부터 max_page+1 만큼 먼저 각 페이지를 열 수 있도록 해준다.
for page in range(1,max+1):
range(max_page)로 반복문을 돌릴경우, 현재 max_page는 4이므로, 0~3까지 출력되게 된다. 1부터 3+1까지 range해준다.
각 페이지를 이동 할 수 있도록 url의 규칙을 찾았다.
해당 url은 마지막에 "url"+"=1"과 같이 구성되어 있었기에, "=1","=2","=3","=4"로 각 페이지를 이동할 수 있게 해줄 수 있었다.
for page in range(1,max+1):
link = url+f'={page}'
driver.get(link)
page 변수에 1,2,3,4가 들어가게 되고, page 1, page 2, page 3, page 4 가 순차적으로 열린다.
내가 찾고 싶은 Tag를 xpath방식으로 찾고, 여러 리스트의 요소들을 한번에 text로 변환하기 위해 zip함수를 활용했다.
for c,j,l,e in zip(company,job_name,location,experience):
company_text = c.text
job_name_text = j.text
location_text = l.text
experience_text = e.text
text로 변환 된 tag의 내용들은 job딕셔너리에 먼저 담긴 후, jobs리스트로 변환 해준다.
CSV파일로 저장하기 위함.
save_job.py
save = pd.DataFrame(jobs)
save = save[['기업','주 업무','위치','경력']]
save.head()
save.to_csv("/home/geonoo/바탕화면/programmers_job/programers_job_save.csv")
scrap_action.py
location = driver.find_elements_by_xpath("li[@class='location']")
ConnectionRefusedError: [Errno 111] Connection refused
During handling of the above exception, another exception occurred:
Traceback (most recent call last):