-
[파이썬] 블로그 제목 크롤러 만들기 make a crawler for crawling blog title프로그래밍/Python 2020. 2. 1. 00:25반응형
사실 긁어오는 것 자체는 어렵지 않다.
크롬 - 검사 기능을 통해 해당 태그만 잘 긁어오면 되니까.
오늘은 티스토리 게시글 제목을 긁어오는 크롤러를 만들어보자
R 통계 과제하며 썼던 코드를 짜집기 해보도록 하자^*^
※여기부턴 시행착오가 매우 많은 코드니 맨 밑에 정리된 코드를 사용할 것※
import os
from selenium import webdriver
import time#유튜브 댓글과 같이 스크롤 해야 뜨는 형식을 위해 쓰는 코드니까 지금은 딱히 필요없다
from selenium.webdriver.common.keys import Keys#얘도 유튜브 검색할때 쓰던거라 딱히 필요 없음
import pandas as pd
from bs4 import BeautifulSoupos.chdir("C:/Users/바탕 화면/python")
#크롬드라이버가 저장되어 있는 경로 (미리 크롬드라이버를 설치해주어야 한다.)
driver = webdriver.Chrome('chromedriver')
# 원격으로 크롬이 열린다
driver.get("https://cowimming.tistory.com/")
# 크롤링 할 주소 - 내 블로그 주소를 입력해주었다.
body = driver.find_element_by_tag_name('body')
title_list = []
# 결과를 저장해줄 빈 리스트
유튜브나 앱스토어 같은 리뷰를 긁어올 땐 스크롤을 내려주는 기능이 필요하지만
티스토리 블로그 같은 경우에는 필요없으므로 그냥 넘어가기.
검사항목을 눌러주면 해당 코드가 뜬다
html = driver.page_source
soup = BeautifulSoup(html,'html.parser')
view = soup.select('div > section > article > div > div > a > span')
title_list.append(view)이제 중요한게 바로 soup.select인데 저기에 내가 크롤링할 코드의 엄마코드(?)부터 쭉 입력해주면 된다.
코린이라 그냥 다 입력해준다^^...뭐 어떻게 쓰면 그냥 div - span까지 한번에 된다고 하던데!!!!
하지만 여기서 문제..!!! 꼭 저런 </span>같은 쓰잘데기 없는 태그까지 긁어와지는데...
이걸 아직도 어떻게 처리해야되는지 몰겠다 저것땜에 2차 전처리 하는데 시간 오래걸림 ㅡㅡ
그리고 제목만 긁고 싶은데 내용은 왜 긁냐고....
하여간 태그를 없애려고
뒤에 .text를 붙여주면
AttributeError: 'list' object has no attribute 'text'
에러가 발생한다 ㅠㅠ 악!!!!
print(title_list[0].text) 또한 같은 에러가 발생하는데 코드를 자세히 살펴보니
<span class="thum"> </span>,
<span class="title">[집코노미TV] 아기곰 "강남행 마지막 버스 이미 떠났다"</span>,
저 보라색이 0번째 값인데 그 안에 text가 없어서 그런 것 같다.
그래서 1을 넣어줬더니 IndexError: list index out of range 에러 발생^^^^^ 뭐 어쩌라는거지??????????
+ 그냥 print(title_list[0])을 했더니 전체값이 나온다.. 위의 추론은 틀린걸로..... 이래서 기반을 단단히 해야한다
밑빠진 독에 물붓기 오졌다.
++ 오!!!!!!! 새롭게 발견한 사실!!!!! 제목만 긁고 싶은데 그 아래 제목 게시글 내용까지 긁어오는 이유가 바로
"모든 span" 함수까지 긁어져 왔기 때문이다. 나는 제목 span만 갖고오고 싶은데!!!! 코드를 수정했다.
view = soup.select('div > section > article > div > div > a > span.title')
#span.title로 수정하니 제목만 긁어와진다
print(title_list)
[[<span class="title">[집코노미TV] 아기곰 "강남행 마지막 버스 이미 떠났다"</span>, <span class="title">1</span>, <span class="title">[R studio] 그래프 그릴 때 margin 뜻.R</span>, <span class="title">[R studio] T-TEST & WELCH TEST.R</span>, <span class="title">[R studio] 기술통계 출력하는 다양한 방법들.R</span>]]
하지만 태그는 그대로....
+++
와 진짜 멍청했다. 왜 title_list에 append를 한거지??? view만 입력하면 잘나오는데!!!!!!!!!!!
print(view[0].text)
[집코노미TV] 아기곰 "강남행 마지막 버스 이미 떠났다"
for i in view:
print(i.text)
[집코노미TV] 아기곰 "강남행 마지막 버스 이미 떠났다" 1 [R studio] 그래프 그릴 때 margin 뜻.R [R studio] T-TEST & WELCH TEST.R [R studio] 기술통계 출력하는 다양한 방법들.R
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ잘나오는구만^-^
이제 이 태그를 없앤 값을 저장해야한다...
title_list=[]
#빈 리스트를 만들어주고 저장하자
for i in view:
title_list.append(i.text)title_list = pd.DataFrame(title_list)
title_list.to_csv("저장경로/title.csv", header=False, index=False)csv로 저장한 파일을 열어주면!!!!
이렇게 외계어로 뜬다
하하하
title_list.to_csv("저장경로/title.csv", header=False, index=False, encoding="euc-kr")로 다시 저장해준다
이렇게 하면 되는데... r 통계 과제할때 크롤링하고 - 엑셀로 전처리 - 크롤링하고 - 엑셀로 전처리
이렇게 반복했는데.. 내 시간과 쓸데없는 노력... 가뜩이나 변수도 많았는데 ㅠㅠ...
보고서 보고 교수님이 띠용 싶었겠다,,,,,
어쨌든 정리!
*정리코드*
import os
from selenium import webdriver
import pandas as pd
from bs4 import BeautifulSoup
os.chdir("크롬 드라이버 경로")
driver = webdriver.Chrome('chromedriver')driver.get("크롤링 할 주소")
body = driver.find_element_by_tag_name('body')
html = driver.page_source
soup = BeautifulSoup(html,'html.parser')
view = soup.select('긁어올 태그')
title_list = []
for i in view:
title_list.append(i.text)
title_list = pd.DataFrame(title_list)
title_list.to_csv("저장경로/title.csv", header=False, index=False, encoding="euc-kr")
반응형'프로그래밍 > Python' 카테고리의 다른 글
[파이썬🐍] 얕은 복사 vs 깊은 복사 (0) 2022.07.27 [Python] dictionary 안 맨 처음 key 출력하기 (0) 2022.01.06 [python] for~ else~ 문 (0) 2020.12.19 [python] eval() (0) 2020.11.30 [python] sort와 sorted 차이 (0) 2020.08.13