본문 바로가기

나 취준생/파이썬

크롤링 입문 - beautiful soup 모듈

320x100

beautiful soup 모듈 배우기



# beautiful soup


파이썬 코드를 복잡하게 작성하지 않아도

편하게 웹스크롤링을 할 수 있도록

여러 함수들을 제공하는 웹스크롤링 전문 모듈



1. 다음과 같은 내용이 담긴 html 문서를 data 폴더에 저장하기



2. html의 코드를 beautiful soup 모듈에서 사용할 수 있도록 파싱하고, 파싱된 내용 출력하기


1
2
3
4
from bs4 import BeautifulSoup
f=open('c:\\data\\ecologicalpyramid.html')
soup=BeautifulSoup(f,"html.parser")
print(soup)




확인해보면, html 코드가 쫙 soup에 들어갔다.



3. 코드에서 name이라는 class에 접근해서, 데이터를 긁어오기


1
2
3
4
5
from bs4 import BeautifulSoup
f=open('c:\\data\\ecologicalpyramid.html')
soup=BeautifulSoup(f,"html.parser")
result=soup.find_all(class_ ="name")
print(result)





확인해보면, 리스트의 형태로 class="name"이었던 코드 부분들이 result에 담겼다.



4. result에서 html 코드말고, text만 출력하기


1
2
3
4
5
6
from bs4 import BeautifulSoup
f=open('c:\\data\\ecologicalpyramid.html')
soup=BeautifulSoup(f,"html.parser")
result=soup.find_all(class_ ="name")
for i in result:
    print(i.get_text())



get_text() 함수를 이용하면 html 코드말고 텍스트만 가져올 수 있다.



5. html 코드에서 number만 긁어서 리스트 a에 저장하기


1
2
3
4
5
6
7
8
from bs4 import BeautifulSoup
f=open('c:\\data\\ecologicalpyramid.html')
soup=BeautifulSoup(f,"html.parser")
result=soup.find_all(class_ ="number")
a=[]
for i in result:
    a.append(i.get_text())
print(a)







실전 가보자!




1. 중앙 일보에서 아무거나 기사 클릭, 기사 위에서 컨트롤 + s를 누르면 해당 페이지를 html로 저장할 수 있다.

나는 aa77로 저장.




2. aa77 파일 불러와서 파싱하기


1
2
3
4
from bs4 import BeautifulSoup
f=open('c:\\data\\aa77.html',encoding='UTF-8')
soup=BeautifulSoup(f,"html.parser")
print(soup)





오우 마이 갓..(극히 일부분임)


클래스를 찾을 수가 없다.



3. 클래스 찾는 꿀팁


기사가 있던 페이지로 이동. --> 크롬 관리자 모드(F12) - [맥은 alt + cmd + i]를 누른다.

그럼 오른쪽 위에 창이 하나 뜨는데,

그리고 거기서 마우스 버튼을 클릭!!


그리고 기사 위에 커서를 올리면, 부분적으로 박스가 막 생기는데

여기서 원하는 기사의 텍스트 위에 클릭을 하면,

자동으로 오른쪽 창에 해당 텍스트 부분에 일치하는 html 코드로 자동으로 이동되서 선택이 된다



이렇게 선택된 부분을 확인해보면



오호

id는 article_body

class는 article_body mg fs4

라는 걸 알 수 있다.



4. 이제 class를 알았으니 아까와 동일하게 텍스트만 긁어보자


1
2
3
4
5
6
from bs4 import BeautifulSoup
f=open('c:\\data\\aa77.html',encoding='UTF-8')
soup=BeautifulSoup(f,"html.parser")
result=soup.find_all(class_ ='article_body mg fs4')
for i in result:
    print(i.get_text())





오우.. 알차게 담겼다.

반응형