티스토리 뷰

크롤링이란 인터넷 상의 정보들을 담고있는 웹페이지를 모아서 페이지 내에서 원하는 알맹이내용만을 추리는 과정을 크롤링이라고합니다

크롤링의 과정을 크게 나누면

1. 웹페이지 받아오기

2. 알맹이 내용 추리기

입니다


이제부터 리눅스상에서 파이썬을 이용하여 크롤링을 해보는것을 해보겠습니다

리눅스는 우분투를 사용합니다


다음과 같은 웹페이지가 있습니다.

웹페이지의 URL은 http://192.168.219.118/list/ 입니다.

링크가 걸린 네개의 항목이 있습니다.


링크에 마우스를 올려보면 링크가 어디로 걸려있는지 URL 을 볼수 있습니다.


소스보기를 해봅시다

크롬을 쓰고있다면 Ctrl+U 를 누르세요

웹페이지의 HTML 코드를 볼 수 있습니다


여기에 각 항목의 링크 경로도 볼 수 있습니다.


크롤링을 하여 이 각 항목들의 경로와 경로에 대한 링크 이름을 가져와서 list.txt 파일에 기록하는걸 해볼까합니다

다음과 같이 말이지요


http://192.168.219.118/board/433 - banana

http://192.168.219.118/board/328 - tiger

http://192.168.219.118/board/823 - mango

http://192.168.219.118/board/363 - hello


자 시작해봅시다.

방법은 굉장히 다양합니다.

그 많은 방법중 가급적 쉬운것으로 하고자합니다.

1. 웹페이지 받아오기


웹페이지에서 F12 를 눌러주세요. 그러면 다음과 같은 화면이 나옵니다.


여기서 Network 탭을 선택해주시고


F5 를 눌러 페이지를 새로고침해주세요



빨간동그라미에 무엇인가 뜨는것을 볼 수 있습니다.

이것은 웹 페이지를 서버에 요청해서 받아오고 웹페이지 안에 포함되어있는 추가적인 리소스를 로드한 히스토리입니다

여기서 가장 위에 있는 항목이 웹페이지입니다.

가장 위에있는 항목을 우클릭해서 다음과 같이 들어가서 클릭해주세요



이걸 누르면 클립보드에 뭔가가 복사됩니다

curl 'http://192.168.219.118/list/' -H 'Accept-Encoding: gzip, deflate' -H 'Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7,ja;q=0.6' -H 'Upgrade-Insecure-Requests: 1' -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8' -H 'Cache-Control: max-age=0' -H 'Connection: keep-alive' --compressed


이런게 복사됩니다.

리눅스 명령어입니다.

리눅스에는 curl 이라는 앱이 있어요.

이 앱의 역할은 웹서버에 자료를 요청하고 요청결과를 받아오는 것입니다.

리눅스에서 이 명령어를 붙여넣기해서 실행해보세요!


이렇게 웹페이지의 내용을 받아와서 출력해주는것을 볼 수 있습니다.

(만약 이렇게 안나오고 curl 이 설치되있지 않다고 한다면 sudo apt-get install curl 명령어로 설치하신 후 다시 시도해보세요)

이 명령어에서 다음을 추가해서 다시 실행해보세요


curl --silent 'http://192.168.219.118/list/' -H 'Accept-Encoding: gzip, deflate' -H 'Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7,ja;q=0.6' -H 'Upgrade-Insecure-Requests: 1' -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8' -H 'Cache-Control: max-age=0' -H 'Connection: keep-alive' --compressed > list.txt


이렇게 하면 list.txt 라는 파일에 웹페이지의 소스코드를 기록합니다

이렇게 잘 기록된것을 확인할 수 있습니다

참고로 ls -al list.txt 이라고 하면 파일의 존재여부를 확인할수 있고

cat list.txt 라고 하면 파일의 내용을 출력해서 확인할수 있습니다


자 그러면 여기까지 일단 list.txt 안에 내용을 받아오는것을 성공했습니다

우리의 최종목표는 여기서 끝내는것이 아니라


http://192.168.219.118/board/433 - banana

http://192.168.219.118/board/328 - tiger

http://192.168.219.118/board/823 - mango

http://192.168.219.118/board/363 - hello


이렇게 만드는것이지요


2. 알맹이 내용 추리기


텍스트파일을 텍스트편집기로 열어서 손으로 예쁘게 정리하는 방법이 있습니다.

그렇게 해도됩니다.

하지만 이 방법은 우리가 컴퓨터를 사용하는 이유가 사라지가 되는거죠 우가우가

알맹이만을 뽑아오는 프로그램을 간단하게 코딩해보겠습니다

어떤 프로그래밍 언어로 해도 상관없으며 여기서는 python로 해보겠습니다


새 텍스트 파일을 만들고
import os, codecs, sys
def shell_exec(cmd):
   po = os.popen(cmd)
   output = po.read()
   po.close()
   return output

result = []
htmlcode = shell_exec('cat list.txt').split('\n')
for line in htmlcode:
   if line.strip().find('<li>') == 0:
      url = 'http://192.168.219.118' + line.split('"')[1]
      name = line.split('">')[1].split('</a>')[0]
      result.append(url + ' - ' + name)

print '\n'.join(result)

이렇게 넣고 parser.py 라고 해서 list.txt 파일이 있는 폴더에 저장해주세요

그리고 python parser.py 해서 실행해보세요

우리가 원하는 결과가 만들어졌습니다

이것을 파일에 기록하고싶으면

python parser.py > file2.txt

이렇게 하면 됩니다.


그런데 뭔가 커맨드도 많이 쳐야하고 과정이 길었습니다.
이 모든 과정을 모두 한번에 수행하도록 python 코드를 만들어봅시다

import os, codecs, sys
def shell_exec(cmd):
   po = os.popen(cmd)
   output = po.read()
   po.close()
   return output
result = []
htmlcode = shell_exec("curl --silent 'http://192.168.219.118/list/' -H 'Accept-Encoding: gzip, deflate' -H 'Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7,ja;q=0.6' -H 'Upgrade-Insecure-Requests: 1' -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8' -H 'Cache-Control: max-age=0' -H 'Connection: keep-alive' --compressed").split('\n')
for line in htmlcode:
   if line.strip().find('<li>') == 0:
      url = 'http://192.168.219.118' + line.split('"')[1]
      name = line.split('">')[1].split('</a>')[0]
      result.append(url + ' - ' + name)
shell_exec('echo "'+'\\n'.join(result)+'" > list.txt')

이렇게 해서 parser.py 에 저장하고
python parser.py 해서 실행해봅시다.
그러면 바로 list.txt 에 최종 결과물이 들어가는것을 확인 할 수 있습니다




댓글
댓글쓰기 폼
공지사항
Total
30,511
Today
25
Yesterday
20
링크
«   2018/09   »
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            
글 보관함