• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 엔지니어링

  • 해결 여부

    미해결

트위터 크롤링 html 코드가 많이 바뀐거 같아요

20.07.21 22:15 작성 조회수 470

0

트위터 크롤링 예제 해보고 있는데요 현재 20.7.21일 기준으로 사이트 코드가 다 바뀐거 같은데 현재는 컨테이너 클래스가 안보여서요 ㅠ  위에 코드 보니까 react로 뜨는데 react로 바뀌어서 코드가 기존 html코드 처럼 안나오는걸까요? 이런 경우 어떻게 해야될지 몰르겠어요

답변 1

답변을 작성해보세요.

0

안녕하세요. 일단 웹사이트 변경 부분을 알려주셔서 감사합니다.

실제 웹사이트는 수시로 변경되는 부분은 있어요. 아무래도 실제 웹사이트를 크롤링했을 때의 경험을 드리고 싶었는데, 이 부분은 양해를 부탁드려요. 그렇다해도 여러가지 시도를 해보시면서 직접 해보시는 것이 가장 좋습니다. 이 부분은 꼭 유념해주시면 좋을 것 같아요. 해당 부분은 너무 수시로 바뀌는 부분이 있어서, 다른 부분을 또 고민해보겠습니다. 

그렇다해도 어떻게 새로운 사이트에서 알맞은 태그를 선택할 수 있을지, 또 selenium 과 어떻게 같이 쓸 수 있는지, 참고할 수 있는 부분이기 때문에, 우선은 참고하시면 더 좋을 것 같습니다.

일단 변경된 부분은 다음과 같이 실행하시면 됩니다. 가볍게 구조를 보면서, 크롬 개발자모드로 CSS Selector 를 참조한 후,

article 부분에 실제 내용이 있음을 확인하고, 해당 article 태그 안에서 실제 트윗 내용만 선택하기 위해서

해당 트윗 내용을 선택해서 크롬 개발자모드에서 추출한 CSS Selector 를 관련 트윗들을 모두 트윗할 수 있도록 특정 부분만 선택한 부분을 다 일반적인 태그로 변경하였습니다.

그리고 다음과 같은 코드로 정상 동작함을 확인하였습니다. 

감사합니다.

from selenium import webdriver

from selenium.webdriver.common.keys import Keys

import time

# 드라이버 생성 방법1 (selenium)

# chromedriver = 'C:/dev_python/Webdriver/chromedriver.exe' # 윈도우

chromedriver = '' # 맥

driver = webdriver.Chrome(chromedriver)

driver.get("http://www.twitter.com")

elem = driver.find_element_by_name("session[username_or_email]")

elem.clear()

elem.send_keys("")

elem = driver.find_element_by_name("session[password]")

elem.send_keys("")

elem.send_keys(Keys.RETURN)

time.sleep(5)

data = driver.find_elements_by_css_selector('#react-root > div > div > div > main > div > div > div > div > div > div > div > div > section > div > div > div > div > div > div > article > div > div > div > div > div > div:nth-child(2) > div > div > span')

for item in data:

    print (item.text, '\n')

print (driver.current_url)

print (driver.title)

driver.quit()