파이썬으로 웹페이지 크롤링 후 글자수 세기

오늘은 파이썬으로 특정 페이지를 크롤링 한 다음 글자 수를 세는 방법을 알아보겠습니다.

파이썬에서 웹페이지 글자수 세기

먼저 일반적인 크롤링처럼 BeautifulSoup와 request를 불러와야 하고

마지막으로 태그를 제거하기 위해서 re도 불러옵니다.

혹시 파일을 출력할려면 판다스를 통해서 csv나 엑셀로 파일을 내려받을 수 있습니다.

from bs4 import BeautifulSoup
import requests
import re
import pandas as pd

그리고 일반적으로 파싱하는 것처럼 파싱을 하면 됩니다.

address = "크롤링페이지주소"
request = requests.get(address)
html = request.text
soup = BeautifulSoup(html, 'html.parser')

다음 찾고 싶은 것을 찾으려면 find 등으로 찾으시면 되고요.

일반적인 웹페이지의 경우 body아래에 본문이 있기 때문에 아래 명령어를 통해서 본문만 가지고 옵니다.

그리고 그룹을 통해서 다시 그룹으로 만들어줍니다.

body = re.search('<body.*/body>', html, re.I|re.S)
body = body.group()
text = re.sub('<.+?>', '', body, 0, re.I|re.S)

이 정규 표현식에 대해서는 점프 투 파이썬에 아주 잘 나와 있습니다.

 

07-2 정규 표현식 시작하기

[TOC] ## 정규 표현식의 기초, 메타 문자 정규 표현식에서 사용하는 메타 문자(meta characters)에는 다음과 같은 것이 있다. > ※ 메타 문자란 원래 ...

wikidocs.net

저도 파이썬 하다가 안되면 종종 들리는 곳인데요. 이곳에서 정말 잘 설명되어 있습니다.

그리고 re.sub을 통해서 태그를 제거하는데요.

 '<.+?>'라는 옵션은 <로 시작하고 뭔가가 한 글자 이상 있으며(.+?) 그 뒤에 >로 끝나는 것의 의미합니다.

일반적으로 태그는 <html>와 같은 구조이기 때문에 모든 태그를 제거합니다.

그리고 이제 글자 수를 세면 되는데요.

글자 수는 str으로 변경되었기 때문에 len(text)라는 명령어를 치면 간단하게 글자 수를 알 수 있습니다.

해당 방법으로 제 블로그를 크롤링 해봤는데요.

다만 본문이 아니라 전체 body안의 내용이라 이전 글 이후 글 등이 나와있습니다.

이 경우에 보다 정확하게 본문을 크롤링하기 위해서는 본문의 tag를 명확하게 찾아서 해당 태그를 추가하시면 됩니다.

이때 find를 쓰면 정규표현식을 쓰기 위해서는 타입을 str로 변경해야 합니다.

예를 들어 p 클래스의 text라는 것만 찾는다고 하면 일반적인 findAll에다 앞에 str로 변경해야지 re 명령어로

공백과 태그를 제거할 수 있습니다.

soupData = str(soup.findAll("p", {"class" : "text"}))

웹페이지 크롤링할 때 생각보다 자주 사용하게 되더라고요.

사실 이 방법 이외에도 구글링 하면 다양한 방법이 있는데요.

본인에게 편한 방법으로 크롤링하여 사용하시면 됩니다.

그럼 잘 사용하시기 바랍니다.