목표
- AVDBS 사이트에서 AV 배우들의 이름 정보와 이미지 정보를 스크래핑 해온다.
결과
- 유료회원에게만 공개되는 순위 이외에 1위 ~ 30위 배우들의 정보를 가져올 수 있었다.
- 주간 순위, 월간 순위, 연간 순위, 종합 순위, 남자 배우 순위 모두 가져와 중복 없이 72명의 정보를 가져왔다.
- AvList라는 디렉토리를 만들고 그 안에 배우별 폴더를 생성 후 이미지를 자동 저장하는 코드이다.
배우별 상세 URL 수집 코드
def urlList():
all_tab = ['','?tab=month','?tab=year','?tab=ago','?tab=man']
url_lst = []
for t in all_tab:
url = '<https://www.avdbs.com/menu/actor_ranking.php'+t>
driver.get(url)
wait = WebDriverWait(driver, 10)
element = wait.until(EC.element_to_be_clickable((By.ID, 'actor_lst')))
url_lst_tmp = driver.find_elements(By.XPATH, '//div[@class="box"]/div[1]/a')
tmp = '<https://www.avdbs.com>'
for u in url_lst_tmp[:30]:
if tmp+u.get_dom_attribute('href') != tmp:
url_lst.append(tmp+u.get_dom_attribute('href'))
url_lst = list(set(url_lst))
return url_lst
상세 URL에서 이미지 파일 가져오는 코드
tmp = '<https://www.avdbs.com>'
path = "D:/ITStudy/CatchV/AvList/"
cnt = 0
for u in url_lst:
print(cnt)
cnt += 1
driver.get(u)
wait = WebDriverWait(driver, 10)
element = wait.until(EC.element_to_be_clickable((By.ID, 'contants')))
kr_name = driver.find_element(By.XPATH, '//span[@class="inner_name_kr"]').text
cn_name = driver.find_element(By.XPATH, '//span[@class="inner_name_cn"]').text
en_name = driver.find_element(By.XPATH, '//span[@class="inner_name_en"]').text
img_lst = []
p_img = driver.find_element(By.XPATH, '//p[@class="profile_gallery"]/img').get_dom_attribute('src')
img_lst.append(p_img)
f_img = driver.find_elements(By.XPATH, '//div[@class="other_photo_list"]/ul/li[1]/a/img')
if f_img:
img_lst.append(f_img[0].get_dom_attribute('src'))
etc_imgs = driver.find_elements(By.XPATH, '//img[@alt="{0}"]'.format(kr_name))
for img in etc_imgs:
img_lst.append(img.get_dom_attribute('src'))
newpath = path+en_name
if not os.path.exists(newpath):
os.makedirs(newpath)
for idx, img in enumerate(img_lst):
img_data = requests.get(img).content
with open(newpath+"/"+kr_name+"_"+str(idx)+'.jpg', 'wb') as handler:
handler.write(img_data)


장애
- 가끔 페이지가 안 넘어가서 멈추는 경우가 있다.
try except로 설정해주면 되나 큰 문제는 아니라서 그대로 뒀다.