[파이썬] Selenium 나무위키

Python Selenium으로 트리 위키 크롤링

안녕하세요. 오늘 우리는 Selenium in Python이라는 트리 위키를 준비했습니다. 나는 이것을 통해 기어 가려고 노력할 것입니다. 많은 사람에게 맡긴 많은 사람들은 로봇인지 인간인지 구별하는 그런 일들에 매우 막혀 있습니다.

그런 어려운 일은 없습니다. 또한 전체 Python 코드를 공유할 것입니다. Python Selenium을 사용하여 트리 위키를 크롤링하는 방법부터 시작하겠습니다. 우선 이것만 봐도 알 수 있듯이 파이썬에서 꼭 필요한 라이브러리입니다. 그래서 조금 있지만 이 모든 부분은 Python에 작은 설치가 필요합니다. Python 라이브러리 목록을 살펴보십시오.

import warnings
import subprocess
import time
import json
import html
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.chrome.service import Service
from bs4 import BeautifulSoup
import chromedriver_autoinstaller

두 번째 부분은 Chrome 브라우저 드라이버를 활성화하는 것이지만 이것이 규칙입니다. 아래 코딩에서 볼 수 있듯이 모든 쿠키가 삭제됩니다. 그렇기 때문에 Python Chrome 브라우저는 쿠키 없이 디버깅 형식으로 실행됩니다. 따라서 모든 캐시 파일을 삭제하고 있음을 알 수 있습니다.

warnings.filterwarnings('ignore')
try:
    Shutil.rmtree(r"c:\chrometemp") #Cookie/Delete CacheFile
except FileNotFoundError:
    pass

셋째, 보고 계시다면 크롬 브라우저를 진지하게 실행하고 계실 것입니다. 그래서 아래는 크롬 브라우저만 실행되고 있는 것을 확인할 수 있습니다.

subprocess.Popen(r'C:\Program Files\Google\Chrome\Application\chrome.exe --remote-debugging-port=9222 --user-data-dir="C:\chrometemp"')

하지만 넷째, 진지하게 시작하는 것이 조금 어려울 수 있습니다. 이 디버깅 모드에서는 Chrome 브라우저에서 실행할 항목을 입력합니다. 이 디버깅 모드를 조금만 살펴보면 이러한 것들이 있음을 알 수 있습니다. 크롬 브라우저에 옵션 부분을 붙여넣기 하시고 입력하시면 될 것 같습니다.

option = Options()
option.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
chrome_ver = chromedriver_autoinstaller.get_chrome_version().split('.')(0)

하지만 넷째, 진지하게 시작하는 것이 조금 어려울 수 있습니다. 이 디버깅 모드에서는 Chrome 브라우저에서 실행할 항목을 입력합니다. 이 디버깅 모드를 조금만 살펴보면 이러한 것들이 있음을 알 수 있습니다. 크롬 브라우저에 옵션 부분을 붙여넣기 하시고 입력하시면 될 것 같습니다.

try:
    s = Service(f'./{chrome_ver}/chromedriver.exe')
    driver = webdriver.Chrome(service=s, options=option)
except:
    chromedriver_autoinstaller.install(True)
    s = Service(f'./{chrome_ver}/chromedriver.exe')
    driver = webdriver.Chrome(service=s, options=option)

여섯째, 크롬 브라우저가 커질 것이다. 점점 커지겠지만 최대개방창으로 계속해서 할테니 최대개창을 열어두었기에 다음과 같은 코딩을 포함시킨 것을 보실 수 있을 것 같습니다.

driver.maximize_window()
time.sleep(3)
driver.implicitly_wait(10)
action = ActionChains(driver)

진지하게 크롬 브라우저를 열면 7번째로 트리에 있는 사이트로 이동해야 합니다. 내가 들어간 쪽은 강동원, 강동원을 원했다. 나무 위키의 텍스트를 강동원에게 긁어서 열어보았으니 이 URL을 한번 방문해 보세요.

url="https://namu.wiki/w/%EA%B0%95%EB%8F%99%EC%9B%90"

8을 치시면 크롬에 강동원님의 홈페이지가 나옵니다. 페이지가 보이면 HTML 코드를 가져와야 합니다. 가져오기 코드라고 보시면 될 것 같아요.

driver.get(url)
time.sleep(3)
driver.implicitly_wait(10)
raw = driver.page_source

9번째는 HTML을 구문 분석하여 Beauty Fall Soup Joe로 가져오는 부분으로 볼 수 있습니다.

raw =  BeautifulSoup(raw, 'lxml')

진지하게 열 번째로 중요하다고 생각합니다. 그 십일조에는 스크립트라고 하는 코드가 있습니다. 그래서 이 코드를 찾고 있습니다. 코드를 텍스트 형식으로 가져옵니다. 가져와서 단어를 조금 필터링한 후 json 형식으로 가져오므로 일단 jace 형식으로 가져와 키 번호를 찾습니다. 그래서 이런 식으로 계속해서 키 번호를 찾으려고 아래로 내려가면 본문 형식의 트리 위키 정보 텍스트 정보만 얻을 수 있습니다.

content = raw.find_all('script') #Script

text = str(content(4))

text = text.replace("<script>window.INITIAL_STATE=", "")
text = text.replace("</script>", "")

text_json_1 = json.loads(text) #json화

keys_1 = list(text_json_1.keys()) #Find key number
text_json_2 = text_json_1(keys_1(2)) #2번째

keys_2 = list(text_json_2.keys()) #Find key number
text_json_3 = text_json_2(keys_2(2)) #2번째

keys_3 = list(text_json_3.keys()) 
text_json_4 = text_json_3(keys_3(6))

#text_json_4(2) #html 화

for i in range(1, len(text_json_4) : Start from #1
    html_string = html.unescape(text_json_4(i))
    #html_string = html.escape(text_json_4(2), quote=False)
    #html_string = Markup(html_string)
    content_text = BeautifulSoup(html_string, 'html.parser')
    print(content_text.text)  #완료

그렇게 해서 드디어 완성된 콘텐츠이고, 그렇게 어려운 콘텐츠가 있는지 따져보면 그렇게 어려운 콘텐츠는 없다. 이 웬만한 것들을 다 가지고 왔기 때문에 여기서 중요한 점이 있습니다. 나무 위키 사이트는 DB 형식으로 받는 방법입니다. 스크립트에서 스크립트라는 HTML 코드를 실행하는 부분을 찾았는데 안에 내용물이 뭔지 확인해보니 결국 JSON 파일로 변환될 무언가가 정규화된 데이터를 가져온 후 스케일링이 된 것으로 볼 수 있을 것 같습니다. 분석되었다.

그래서 밑부분에 그렇게 써있는데 다들 아시다시피 너무 불법적으로 악용하지 마세요.
따라서 단순히 참고만 하셔야 하며 그러한 제3자의 저작권을 침해해서는 안됩니다. 참고하시어 오늘 여기서 다시 마치도록 하겠습니다.