Если исходные входные данные - "닥터최태수"
при выполнении приведенного ниже кода, данные обычно печатаются, но не выводятся при вводе "두번사는랭커"
-> Используйте Ctrl + c, Ctrl + v для таких заголовков, как 닥터 최태수 и 두번 사는 랭커.
Это потому, что html для двух заголовков отличалось от xpaths
. Однако данные не будут выводиться, даже если вы переключитесь на другой xpath
.
Код рассматриваемой детали следующий, и это xpath
, которое необходимо изменить.
publisher = driver.find_element_by_xpath('/html/body/div[2]/div/div/div/div[2]/div/div/table/tbody/tr[1]/td[2]/div[3]/div[2]')
-> '/html/body/div[2]/div/div/div/div[2]/div/div[2]/table/tbody/tr[1]/td[2]/div[3]/div[2]'
Полный код ниже:
import bs4
import requests
import urllib.request
from selenium import webdriver
import bs4
import requests
from urllib import parse
import time
import re
print("작품이름 -> ")
search_name = input()
print("\n")
tmp = search_name
search_name_nonspace = search_name.replace(" ", "")
url = "https://page.kakao.com/search?word=" + parse.quote(tmp)
r = requests.get(url)
c = r.content
bs_obj = bs4.BeautifulSoup(c, "html.parser")
boxes = bs_obj.findAll("div", {"class": "css-c09e5i"})
for box in boxes:
is_novel = box.find("div", {"class": "css-vurnku"}).text
if("소설" in is_novel):
parent = box.parent.parent
title = parent.find("div", {"class": "text-ellipsis css-11602e0"}).text.replace(" ","")
if("단행본" in title):
continue
elif(search_name_nonspace not in title):
continue
else:
main = parent.parent.parent
monopoly = True
else:
continue
title = main.find("div", {"class": "text-ellipsis css-11602e0"}).text
if '[' in title:
print("작품이름 : " + title.split('[')[0])
print("독점여부 : " + title.split('[')[1][:-1])
else:
print("작품이름 : " + title)
print("독점여부 : 미독점")
print("감상인원 : " + main.find('div',{'class','css-zlhhis'}).text)
print("장르 : " + main.findAll('div',{'class','css-vurnku'})[1].text)
print("작가 : " + main.find('div',{'class','text-ellipsis css-1pysja1'}).text)
latest = main.find('div',{'class','text-ellipsis css-1eorkc4'})
if latest.text!="완결":
print("완결여부 : 미완결")
print("최근업데이트일 : " + latest.text.replace(" 업데이트",""))
else:
print("완결여부 : " + latest.text)
image = main.find('div',{'class','jsx-922166243 imageWrapper'}).find('img')
print("이미지 : " + image.attrs['data-src'])
age = main.find("div", {"class": "css-fe9s02"}).find('img')
if age == None:
print("연령등급 : 전체이용가")
else:
print("연령등급 : 15세이용가")
pages = set()
for link in main.findAll("a", href = re.compile('^(/home)((?!:).)*$')):
if 'href' in link.attrs: # 위에서 찾은 link에 href 속성이 있는지 확인
if link.attrs['href'] not in pages: # 새로운 페이지인지 확인
newPage = link.attrs['href']
url = "https://page.kakao.com" + newPage
driver = webdriver.Chrome("C:/chromedriver.exe")
driver.get(url)
bs_obj = bs4.BeautifulSoup(driver.page_source, "html.parser")
driver.find_element_by_xpath('//*[@id="root"]/div[3]/div/div/div[1]/div[2]/div[2]/div[2]/button[1]').click()
time.sleep(0.2)
if latest.text!="완결":
update_days = driver.find_element_by_xpath('//*[@id="root"]/div[3]/div/div/div[1]/div[2]/div[2]/div[1]/p[1]')
print("연재 요일 : " + update_days.text.replace(" 연재",""))
else:
print("연재 요일 : 연재 종료")
time.sleep(0.2)
publisher=driver.find_element_by_xpath('/html/body/div[2]/div/div/div/div[2]/div/div/table/tbody/tr[1]/td[2]/div[3]/div[2]')
print("출판사 : " + publisher.text)
total = driver.find_element_by_xpath('//*[@id="root"]/div[3]/div/div/div[3]/div[1]/span[1]')
print("연재 수 : "+ total.text.replace('전체(',"").replace(')',""))
time.sleep(0.2)
first = driver.find_element_by_xpath('//*[@id="root"]/div[3]/div/div/div[3]/ul/li[1]/div[2]/dl/dd')
print("최초 업데이트일 : " + first.text)
time.sleep(0.2)
intro = driver.find_element_by_xpath('/html/body/div[2]/div/div/div/div[2]/div/div/table/tbody/tr[1]/td[2]/div[1]')
print("작품소개\n" + "----------------------------------------\n" + intro.text + "\n----------------------------------------")
time.sleep(0.2)
#driver2.quit()