При сканировании Selenium данные могут выводиться для одних заголовков, но не для других. - PullRequest
0 голосов
/ 08 мая 2020

Если исходные входные данные - "닥터최태수" при выполнении приведенного ниже кода, данные обычно печатаются, но не выводятся при вводе "두번사는랭커"

-> Используйте 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...