css selector를 통해서 스크래핑해오기

2018. 3. 9. 21:40Python-이론/python-인공지능2

cssSelector 사용하기



보통 데이터를 스크래핑해올 때 크롬의 관리자 도구와 같은 것을 유용하게 사용한다. 오늘은 크롬 관리자 도구의 유용한 기능css selector를 통해서 스크래핑해오고 css선택자를 연습해보겠다.



오늘 스크래핑 해올 내용



여기서 f12를 크롬 관리자 도구가 나온다.



html 코드에 도달하게 되면 그 부분이 파란색으로 변한다. 코드에 마우스 오른쪽 버튼을 누르 copy에 copySelector라는 부분을 누르면 body > div.content-wrapper > article > div.wiki-content.clearfix > div > div:nth-child(16) > p 와 같이 html 코드속에서의 위치를 가져올 수 있다.



from urllib import request
from bs4 import BeautifulSoup
import requests

url ="https://namu.wiki/w/%EC%8A%A4%ED%8A%B8%EB%9D%BC%EC%9D%B4%ED%81%AC%20%ED%94%84%EB%A6%AC%EB%8D%A4%20%EA%B1%B4%EB%8B%B4?from=%EC%8A%A4%ED%8A%B8%EB%9D%BC%EC%9D%B4%ED%81%AC%20%ED%94%84%EB%A6%AC%EB%8D%A4"

data = requests.get(url)
data = data.text
soup = BeautifulSoup(data,'html.parser')
data = soup.select("""body > div.content-wrapper > article > div.wiki-content.clearfix > div > div""")[5].select('p')[0]
for data2 in data:
    print(data2.string)


난 엄청 삽질했다. ㅠㅠ nth-child는 Beautifulsoaf에서 지원을 안해주는 것이다. 동공 지진 ~~ 그래서 nth-of-type()인데 이것도 나름대로 해결이 되지 않았다. 사실 데이터가 리스트에 저장되는데 select('p')이렇게 쓰니깐 자꾸 none가 나와서 계속 왜안돼지 하다가 리스트니깐 [0]을 붙여볼까 하고 붙였는데 바로 되는것 ㅠㅠ 결과의 none는 들여쓰기를 뜻하는 거니깐 딱히 생각하지 말자.



결과