본문 바로가기

TIL/Python

[Python][WebScraping] 웹스크래핑에 대하여

참조

https://data-lessons.github.io/library-webscraping-DEPRECATED/02-csssel/

 

Introduction to web scraping: Selecting content on a web page with CSS selectors

Before we delve into web scraping proper, we will first spend some time introducing some of the techniques that are required to indicate exactly what should be extracted from the web pages we aim to scrape. A key part of web scraping is describing to the c

data-lessons.github.io

 

웹페이지에서 어떤 것을 추출하고 싶은 지 정확히 알아야한다.

그래야 컴퓨터가 내가 원하는 요소를 찾아내는 다양한 방식 중 효율적이고 적절한 방식을 찾아낼 수 있다.

 

1) 문자열 표현식을 확인할 것

날짜형식이나 이메일 주소 또는 url주소 같은 것의 문자열형식의 정규표현을 확인하는 것이 좋다.

 

2) XPath 경로 이용하기

XML,HTML같은 트리구조식에서 사용할 수 있는 노드의 경로를 알려준다.

//*[@id="_Q2t8YszbJOKw2roPveq3MA101"]/div[2]/div/div/div/div[2]/h2/span

id(attrs)의 ""(vaule) 값에

 

3) CSS selector 이용하기

css selector 는 xpath로 변환될 수 있지만 xpath을 css로는 안된다.

요소element <p/a/h1....>등을 사용할 수 있다.

태그네임을 이용하거나 class: .어쩌구 id:#어쩌구을 이용할 수 있다.

속성을 이용할 때는 [속성이름:type,href]

또 :nth-childe(n)을 이용해서 사용할수 있다.

 

selenium의 요소 찾기

find_element_by_class_name
find_element_by_css_selector
find_element_by_id
find_element_by_link_text
find_element_by_tag_name
find_element_by_xpath
find_element_by_partial_link_text

#lst50 > td:nth-child(6) > div > div > div.ellipsis.rank01 > span > a
<a href="javascript:melon.play.playSong('1000002721',34847378);" title="LOVE DIVE 재생">LOVE DIVE</a>
/html/body/div/div[3]/div/div/div[3]/form/div/table/tbody/tr[3]/td[6]/div/div/div[1]/span/a
//*[@id="lst50"]/td[6]/div/div/div[1]/span/a

아이브의 러브다이브 제목을 검사해보면 위와 같이 나오는데 

selenium을 이용해 제목에 걸린 링크를 눌러서 이동해보자

1) 링크걸린텍스트 이용하기

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

driver = webdriver.Chrome("/Users//chromedriver")
driver.get("https://www.melon.com/chart/index.htm")

song_title3=driver.find_element_by_link_text("LOVE DIVE")

song_title3.click()

time.sleep(5)

driver.close()

3)xpath이용하기

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

driver = webdriver.Chrome("/Users//chromedriver")
driver.get("https://www.melon.com/chart/index.htm")

song_title5=driver.find_element_by_xpath('//*[@id="lst50"]/td[6]/div/div/div[1]/span/a')

song_title5.click()

time.sleep(5)

왜 두가지만 했냐면 위 사이트같이 데이터가 많은 곳에서 찾기라 쉽지가 않기 때문이다.