What is the XPath?
- X Path : ๋ฐ์ ๋ด๋ X + Path ํฉ์ณ์ง ํฉ์ฑ์ด ๊ฐ๋ค.
- X: XML ์ธ๋ฐ, XML์ ๋ฌธ์ ์ข ๋ฅ ์ค ํ๋๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.
- ๋ฐ๋ผ์, XPath๋ XML ๋ฌธ์์ ์์ฑ์ ๊ฒฝ๋ก์์ผ๋ก ์ ๊ทผํ๋ ์ธ์ด์ด๋ค.
* beautifulsoup์์๋ ์ง์ํ์ง ์๊ณ ์๋ค. ๊ทธ๋ผ ์ด๊ฑธ ๋์ฒด ์? ๋ฐ๋ก, scrapy ๋๋ฌธ์ ์์๋ฌ์ผํ๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐฑ์ฅํ ๊ฐ๋จํด๋ฒ์ ๊ตณ๊ตณ =_=b
1. ๊ธฐ์ด ๋ฌธ๋ฒ
- / : ์ ๋๊ฒฝ๋ก
- // : ๋ฌธ์ ๋ด ๊ฒ์
- //@href : href ์์ฑ์ด ์๋ ๋ชจ๋ ํ๊ทธ ์ ํ
- //a[@href='abcf'] : a ํ๊ทธ์ href ์์ฑ์ abcf ์์ฑ๊ฐ์ ๊ฐ์ง ๋ชจ๋ ํ๊ทธ ์ ํ
- (//a)[3] : ์ ์ฒด ๋ฌธ์์ 3๋ฒ์งธ ๋งํฌ ์ ํ
- (//table)[last()] :์ ์ฒด ํ ์ด๋ธ ๋ฌธ์์ ๋ง์ง๋ง ํ ์ด๋ธ ์ ํ
- (//a)[position() < 3] : a ํ๊ทธ ๋ฌธ์์ ์ฒ์ ๋ ๋งํฌ ์ ํ
- //table/tr/* : ๋ชจ๋ ํ ์ด๋ธ์์ ๋ชจ๋ ์์ tr ํ๊ทธ ์ ํ
- //div[@*] : ์์ฑ์ด ํ๋๋ผ๋ ์๋ div ํ๊ทธ ์ ํ
์ฌ์ค, ๋ฌธ๋ฒ์ ๊ทธ๋ ๊ทธ๋ ํ์ ํ ๋๋ง๋ค ์ฐพ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ ๊ฒ ๊ฐ๋ค.
2. XPath ์ค์ (selenium๊ณผ ๊ฒฐํฉํ์ฌ ํ ์คํธ ๊ธ์ด์ค๊ธฐ)
์ ๋ชฉ๊ณผ ์นดํ ๊ณ ๋ฆฌ๋ง ๊ฐ๋จํ ๋ถ๋ฌ์ ๋ณผ ์์
from selenium import webdriver
chromedriver = "C:/Users/enliple/Webdriver/chromedriver"
driver = webdriver.Chrome(chromedriver)
#๋ด ๋ธ๋ก๊ทธ ใ
..
driver.get('https://tobuymacbookpro.tistory.com/')
posting_data = []
# ์ ๋ชฉ๊ณผ ์นดํ
๊ณ ๋ฆฌ๋ฅผ ๋ด์์ค๋ดค๋ค.
titles = driver.find_elements_by_xpath("//strong[@class='title']")
categories = driver.find_elements_by_xpath("//a[@class='link-category']")
for num in range (4):
posting_data.append([titles[num].text,categories[num].text])
print(posting_data)
1๋ฒ์ xpath ๊ธฐ์ด ๋ฌธ๋ฒ์ ์์ฉํด์ xpath ๊ฒฝ๋ก๋ฅผ ๋ด ์ ๋ง๋๋ก ๋ณด๊ธฐ์ฝ๊ฒ ์ ๋ ฅํ์ฌ ํ๋ผ๋ฏธํฐ ๊ฐ์ผ๋ก ๋ฃ์ด์ฃผ๋ ๊ฒ ์์ฃผ ๋งค๋ ฅ์ ์ด๋ค.
๋๋ง ๊ตฌ๋? ํ..
์นดํ ๊ณ ๋ฆฌ๋ง ๋ค๋ค๋ณด์๋ฉด
์๋ copy xpath ํ๋๊น
//*[@id="container"]/main/div/div[1]/article[1]/div/div/a
์ด๋ ๊ฒ ๋์๋ค
๊ทผ๋ฐ ์ฝ๋๋ฅผ ๋ณด๋
ํด๋์ค ์ด๋ฆ์ด ์ ๋ ๊ฒ ๊ตฌ์ฒด์ ์ด๊ธธ๋ ์ ๊ฑธ๋ก ํด๋ ๋๊ฒ ๋ค ์ถ์ด์
//a[@class='link-category'] => aํ๊ทธ์ ํด๋์ค์ด๋ฆ์ด link-category ์ธ๊ฒ! ์ผ๋ก ๋ฐ๊พผ ๊ฒ์ด๋ค.
์ด๋ฐ์์ผ๋ก ํ์ฉํ๋ฉด ๋๋ค.
๋~~~~~~๋ฏ ์ฝ๋ค!