본문 바로가기

파이썬 프로그래밍/파이썬 크롤링

[Python] 파이썬을 이용한 크롤링

크롤링 이란?

크롤링[crawling] : 무수히 많은 컴퓨터에 분산 저장되어 있는 문서를 수집하여 검색 대상의 색인으로 포함시키는 기술. 어느 부류의 기술을 얼마나 빨리 검색 대상에 포함시키냐 하는 것이 우위를 결정하는 요서로서 최근 웹 검색의 중요성에 따라 발전되고 있다.


웹 크롤링 : 웹 크롤링은 콘텐츠를 수집하기 위해 자동으로 웹사이트를 방문하는 프로세스다.


웹 크롤러 : 자동으로 웹 페이지를 방문해 콘텐츠를 가져오고 URL을 추출해 낸다. 웹 크롤러의 다른 이름은 웹 스파이더, 봇 또는 자동화 색인기 이다.




드래그용 코드

#홈페이지 전체를 긁어오기

import urllib2


url="http://news.naver.com/"

temp=urllib2.urlopen(url)

f=open("news.txt","w")

f.write(temp.read())

f.close()

temp.close()


----------------------------------------------따로입니다--------------------------------------


#내가 원하는 부분만 긁어서 보기

f=open("news.txt",'r')

text=f.read()

temp=text[text.find("<div class=\"lnb_today\">"):text.find("<ul class=\"lnb_side\" tabindex=\"0\">")].split("<li>")

f.close()


#print temp

for i in temp:

print i[i.find("title"):i.find("</a>")]



가독성을 높이기 위한 코드

홈페이지 전체를 긁어오기



전체중 내가 원하는 부분만 긁어오기




실행 화면



해당 경로에 html태그들이 txt파일로 생성된 것을 확인 할 수 있다

html로 해주면 바로 페이지를 열어 볼 수 있다


이런식으로 지정한 타이틀만 쭉쭉 뽑아오게 된다

파일은 읽기형식으로 열어줬기 때문에 변화없고 출력만 나오게 됩니다



코드 설명

import urllib2                    //import를 사용하여 urllib2라는 모듈을 가져온다

url="http://news.naver.com/" //자신이 긁어올 페이지 주소를 url에 넣어준다

temp=urllib2.urlopen(url)      //urllib를 사용하여 url을 rulopen으로 열어준다. 그리고 그것을 temp에 넣어준다
 (자세한건 건 아래 부록 참고)
f=open("news.txt","w")        //열어준다("news.txt파일","쓰기모드") 쓰기모드는 파일이 없을 시 파일을 생성함
    만약에 파일이 있다면 열리겠지만 없으니 생성이 되었다
f.write(temp.read())            //f를 이용하여 써준다(temp.를 읽어온 것을())
    temp는 위에 urllib2.urlopen(url)이다. 그것을 읽어서 write 해주겠다

f.close()                          //읽은 값을 써줬으니 닫아야한다 현제 f라는 객체에 temp정보가 담겨있다. 
   그 f는 news.txt파일도 뜻한다. 즉 url = temp = news.txt = f 라고 볼 수있다

temp.close()                    //f를 닫았으니 read()정보가 들어가 있던 temp도 닫아준다.(닫아주지 않으면 계속
read값이 남아있기 때문에 다음에 사용할 read값을 못불러 오게 된다

---------------여기까지는 파일을 만들어주는것까지고 밑에는 그중 내가 원하는 부분만 긁어오는 부분이다-----------


f=open("news.txt",'r')        //파일을 만들어줬으니 r을 사용하여 텍스트 파일을 읽기모드로 열어준다

text=f.read()                   //f.read()를 text로 저장한다. f는 위쪽에 보면 무슨값인지 이해하기 쉽다

temp=text[text.find("<div class=\"lnb_today\">"):text.find("<ul class=\"lnb_side\" tabindex=\"0\">")].split("<li>")
//temp에 이값을 넣겠다. find를 사용하여 이 값을 찾는데 이값은 <div class=\"lnb_today\">부터 <ul class=\"lnb_side\" tabindex=\"0\">까지 불러오며 li단위로 쪼개겠다
즉 lnb_today부터 lnb_side까지만 불러오는데 li단위로 쪼개겠다
html에서 기사의 제목만을 뽑아오기 위한 구문입니다. html구조가 궁금하신 분은 첨부자료 참고하세요

news3.txt



f.close()    //마찬가지로 사용했으니 닫아준다

#print temp

for i in temp:    //실행화면에서 보았듯 한번만 해주면 한줄만 출력이 되기 때문에 반복문으로 전부다 출력을 해준다

print i[i.find("title"):i.find("</a>")]    //i[들어온 i의 값을 찾는데("title")부터: /a까지 찾겠다
그래서 출력값이 title부터 바로 다음에 나오는 /a까지 나오는것입니다



점 표기법(dotted notation): 쉽게말해 점 왼쪽에 있는 객체를 식별하여 점 오른쪽을 이용하여 수행한다
즉 여기선 urllib2.urlopen(url)은 urllib2를 식별하고, urlopen(url)을 수행한다는 뜻



제가 이해한대로 코드를 해석한 것이라 틀릴 수도 있습니다 틀리다면 지적부탁드리며 코드는 제가 사용해본것들 직접 올린것이기 때문에 잘될겁니다