(내공 1000 드림) 파이썬 크롤링 반복문 질문 드립니다!

(내공 1000 드림) 파이썬 크롤링 반복문 질문 드립니다!

작성일 2021.09.29댓글 1건
    게시물 수정 , 삭제는 로그인 필요

안녕하세요~
파이썬 크롤링 반복문 질문 있습니다.

아래 코드는 https://coding-kindergarten.tistory.com/28 사이트에서
공개해 주신 코드입니다.

저도 위 코드를 이용해서 크롤링을 하려고 하는데요.. 몇가지 질문이 있어 글 남깁니다.

1. 현재 코드 상으로는 한 회사에 대한 정보만 한번에 하나씩 크롤링 하게 되어 있는데요.
한 회사 끝나고 다른 회사로 이어지게끔 하려면 코드를 어떻게 수정해야 할까요?
(step 4를 step 7에 넣어야 할거 같긴한데...)

2. 데이터 프레임에서 1번에서 처리한 회사명을 넣고 싶은데.. 어떻게 넣어야 될까요?

아래 코드에서 직접 수정해서 잘 실행되면 바로 채택 및 내공 드립니다!

# step1.프로젝트에 필요한 패키지 불러오기
from bs4 import BeautifulSoup 
from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 
import time import pandas as pd 

# step2.로그인 정보 및 검색할 회사 미리 정의, 해당 회사의 리뷰 끝 페이지도 정의
usr = "아이디(메일주소)"
pwd = "비밀번호"
query = "검색할 회사"
page = 검색할 회사의 마지막 페이지 

# step3.크롬드라이버 실행 및 잡플래닛 로그인 # step4.원하는 회사의 리뷰 페이지까지 이동
query_vieworks = driver.find_element_by_css_selector("input#search_bar_search_query") query_vieworks.send_keys(query) query_vieworks.send_keys(Keys.RETURN) time.sleep(3) driver.find_element_by_css_selector("a.tit").click() time.sleep(15) driver.find_element_by_css_selector("button.btn_close_x_ty1 ").click() time.sleep(3) 

# step6.크롤링한 정보를 담을 리스트명 정의list_div = [] list_cur = [] list_date =[] list_stars = [] list_summery = [] list_merit = [] list_disadvantages = [] list_managers =[] 
# step7.원하는 회사의 직무/근속여부/일시/요약/평점/장점/단점/경영진에게 바라는 점 크롤링 (for문으로 반복)for i in range(page): #직무, 근속여부, 일시 user_info = driver.find_elements_by_css_selector("span.txt1") count = int(len(user_info)/4) print(count) list_user_info = [] for j in user_info: list_user_info.append(j.text) for j in range(count): #한 페이지에 정보 5set씩 나옴. 마지막 페이지는 5개 미만일 수 있으므로 count 변수를 반복횟수로 넣어줌. a = list_user_info[4*j] list_div.append(a) b = list_user_info[4*j+1] list_cur.append(b) c = list_user_info[4*j+3] list_date.append(c) #별점 stars = driver.find_elements_by_css_selector("div.star_score") for j in stars: a = j.get_attribute('style') if a[7:9] == '20': list_stars.append("1점") elif a[7:9] == '40': list_stars.append("2점") elif a[7:9] == '60': list_stars.append("3점") elif a[7:9] == '80': list_stars.append("4점") else: list_stars.append("5점") #요약 정보 summery = driver.find_elements_by_css_selector("h2.us_label") for j in summery: list_summery.append(j.text) #장점, 단점, 경영진에게 바라는 점 list_review = [] review = driver.find_elements_by_css_selector("dd.df1") for j in review: list_review.append(j.text) for j in range(count): #한 페이지에 정보 5set씩 나옴. 마지막 페이지는 5개 미만일 수 있으므로 count 변수를 반복횟수로 넣어줌. a = list_review[3*j] list_merit.append(a) b = list_review[3*j+1] list_disadvantages.append(b) c = list_review[3*j+2] list_managers.append(c) # 다음 페이지 클릭 후 for문 진행, 끝 페이지에서 다음 페이지 클릭 안되는 것 대비해서 예외처리 구문 추가 try: driver.find_element_by_css_selector("a.btn_pgnext").click() time.sleep(15) except: pass 

# step8.pandas 라이브러리로 표 만들기total_data = pd.DataFrame() total_data['날짜'] = pd.Series(list_date) total_data['직무'] = pd.Series(list_div) total_data['재직여부'] = pd.Series(list_cur) total_data['별점'] = pd.Series(list_stars) total_data['요약'] = pd.Series(list_summery) total_data['장점'] = pd.Series(list_merit) total_data['단점'] = pd.Series(list_disadvantages) total_data['경영진에게 바라는 점'] = pd.Series(list_managers)



profile_image 익명 작성일 -

잡플래닛을 사용하지 않아 정확한 답변은 드릴 수 없어

예제로 남겨드립니다.

# step2 query = ['검색할 회사명', '검색할 회사명', '검색할 회사명'] # 변경 # step4.원하는 회사의 리뷰 페이지까지 이동 for num in range(len(query)): query_vieworks = driver.find_element_by_css_selector("input#search_bar_search_query") query_vieworks.send_keys(query[num]) # 변경 query_vieworks.send_keys(Keys.RETURN) # step6.크롤링한 정보를 담을 리스트명 정의 # 추가 - 회사명 리스트 list_company = [] # 추가 list_div = [] list_cur = [] # step7.원하는 회사의 직무/근속여부/일시/요약/평점/장점/단점/경영진에게 바라는 점 크롤링 (for문으로 반복) for i in range(page): # 추가 - 회사명 정보 list_company.append(query[num]) # 추가 # step8.pandas 라이브러리로 표 만들기 total_data = pd.DataFrame() total_data['회사명'] = pd.Series(list_company) # 추가 total_data['날짜'] = pd.Series(list_date)

추가 는 그 라인에 그대로 추가해주시면 됩니다.

이후 약간만 변경된 코드 입니다.

웹개발 - 백엔드 언어 질문

... 사진과 같이 특정 웹들에서 1) 데이터를 크롤링 하고... 내공 1000 걸어 둡니다.^^ Python 라이브러리 중 하나인 beautifulsoup를 추천드립니다. 웹 페이지의...