오늘은 파이썬으로 특정 페이지를 크롤링 한 다음 글자 수를 세는 방법을 알아보겠습니다.
파이썬에서 웹페이지 글자수 세기
먼저 일반적인 크롤링처럼 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)
이 정규 표현식에 대해서는 점프 투 파이썬에 아주 잘 나와 있습니다.
저도 파이썬 하다가 안되면 종종 들리는 곳인데요. 이곳에서 정말 잘 설명되어 있습니다.
그리고 re.sub을 통해서 태그를 제거하는데요.
'<.+?>'라는 옵션은 <로 시작하고 뭔가가 한 글자 이상 있으며(.+?) 그 뒤에 >로 끝나는 것의 의미합니다.
일반적으로 태그는 <html>와 같은 구조이기 때문에 모든 태그를 제거합니다.
그리고 이제 글자 수를 세면 되는데요.
글자 수는 str으로 변경되었기 때문에 len(text)라는 명령어를 치면 간단하게 글자 수를 알 수 있습니다.
해당 방법으로 제 블로그를 크롤링 해봤는데요.
다만 본문이 아니라 전체 body안의 내용이라 이전 글 이후 글 등이 나와있습니다.
이 경우에 보다 정확하게 본문을 크롤링하기 위해서는 본문의 tag를 명확하게 찾아서 해당 태그를 추가하시면 됩니다.
이때 find를 쓰면 정규표현식을 쓰기 위해서는 타입을 str로 변경해야 합니다.
예를 들어 p 클래스의 text라는 것만 찾는다고 하면 일반적인 findAll에다 앞에 str로 변경해야지 re 명령어로
공백과 태그를 제거할 수 있습니다.
soupData = str(soup.findAll("p", {"class" : "text"}))
웹페이지 크롤링할 때 생각보다 자주 사용하게 되더라고요.
사실 이 방법 이외에도 구글링 하면 다양한 방법이 있는데요.
본인에게 편한 방법으로 크롤링하여 사용하시면 됩니다.
그럼 잘 사용하시기 바랍니다.
'Tip & Tech > Python' 카테고리의 다른 글
파이썬 크롤링시 날짜 에러 해결하기 (2) | 2022.08.02 |
---|---|
파이썬 QR코드로 URL 링크 만드는 방법 (3) | 2022.07.23 |
파이썬 pip upgrade시 액세스가 거부되었습니다 에러 해결하기 (0) | 2022.07.20 |
파이썬(python)으로 RSS 크롤링하는 방법 (2) | 2022.06.29 |
파이썬 공공데이터포털 API 연동하기 - JSON 사용 (2) | 2022.06.16 |