R is well

[파이썬3 웹크롤링] Python3 Webcrawling Basic with Cssselector 본문

프로그래밍/Python

[파이썬3 웹크롤링] Python3 Webcrawling Basic with Cssselector

Sanghou 2016. 11. 18. 22:04

목차

  1. 개념 설명
  2. 전체 코드
  3. 상세 설명

1. 개념 설명

  • Webcrawling

WebcrawlingWebcrawler를 통해 웹상에서 정보를 끌어오는 행위를 의미하며,

Webcrawler는 다음과 같이 정의 됩니다.

웹 크롤러(web crawler)는 조직적, 자동화된 방법으로 월드 와이드 웹을 탐색하는 컴퓨터 프로그램이다.
웹 크롤러에 대한 다른 용어로는 앤트(ants), 자동 인덱서(automatic indexers), 봇(bots), 웜(worms), 웹 스파이더(web spider), 웹 로봇(web robot) 등이 있다.

출처 : 위키백과

P.S. 요약

웹상의 데이터를 자동화된 방법으로 수집하는 것!

  • Cssselector

Cssselector를 설명드리기에 앞서 CSS(Cascading Style Sheets) , 즉 종속형 시트에 대해

설명드리도록 하겠습니다.

CSS는 마크업 언어가 실제 표시되는 방법을 기술하는 언어로, HTML과 XHTML에 주로 쓰이며,
XML에서도 사용할 수 있다. W3C의 표준이며, 레이아웃과 스타일을 정의할 때의 자유도가 높다.

출처 : 위키백과

CssselectorCSS에서 마크업 자체에 태그와 속성을 일치시킴으로써

어느 부분의 마크업에 스타일을 적용할지 선언하는 것입니다.

이러한 특징을 가지고 있기 때문에 Python에서 Webcrawling을 할 때

자신이 가져오고 싶은 데이터의 주소 형식으로 쓰이게 됩니다.


2. 전체 코드

2주차는 앞서 말씀 드렸듯이 Cssselector를 활용한 코드를 만들어보았습니다.

전체 코드는 다음과 같습니다.

import requests
from lxml import html

page = requests.get('http://movie.naver.com/movie/bi/mi/basic.nhn?code=134895#story')
tree = html.fromstring(page.text)

text = tree.xpath('//*[@id="content"]/div[1]/div[4]/div[1]/div/div/p/text()')

print(text)


3. 상세 설명

위 코드는 네이버 영화 페이지에서 특정 영화의 줄거리를 크롤링하는 코드입니다.

3.1. 모듈 import

import requests
from lxml import html
  • requests : 웹상의 html 코드를 읽어오는 모듈입니다.
  • lxml : parser로서 특정 부분을 검색해서 보여주는 모듈입니다.

3.2. html 가져오기 및 tree 생성

page = requests.get('http://movie.naver.com/movie/bi/mi/basic.nhn?code=134895#story')
tree = html.fromstring(page.text)
  • requests 모듈에서 get 함수를 사용해서 페이지의 html 코드를 가져왔습니다.
  • lxml.html.fromstring을 통해 정보를 가진 tree를 만들어 줍니다.

3.3. text 크롤링 및 출력

text = tree.xpath('//*[@id="content"]/div[1]/div[4]/div[1]/div/div/p/text()')

print(text)

text 크롤링을 위해서 Cssselector의 일종인 Xpath를 이용하였습니다.

2주차 크롤링

크롬 기준으로 설명하면 F12를 눌러 html 코드를 확인한 뒤 크롤링하고자 하는 부분을

코드 블럭 좌측 상단에 위치한 화살표를 통해 선택해주시고 Xpath를 복사해서 사용하면 됩니다.

물론 뒤에 text()를 붙여주셔야 합니다.

2주차 결과

이로써 Python Webcrawling 기초 with Cssselector를 마치도록 하겠습니다 ~


Comments