목차
지난 시간에 BeautifulSoup을 이용해 네이버 View에 있는 정보(글 제목, URL)를 가져왔다.
[Python] BeautifulSoup을 이용한 네이버 블로그 크롤링 - 1
뷰티플수프(BeautifulSoup)를 이용해 특정 키워드 검색 후 나온 결과의 네이버 블로그 제목과 URL을 가져올 예정이다. import requests from bs4 import BeautifulSoup from urllib.parse import quote query = "s..
kissi-pro.tistory.com
이번 시간에는 글 제목과 URL 뿐만 아니라, 본문까지 가져오는 코드를 작성해볼 예정이다. 네이버 블로그 본문 스크래핑을 하기 위해서는 먼저 'iframe'태그를 없애야 한다. 그렇지 않으면, 제대로 된 정보를 가져오지 못한다. (왜 그런지 이유는 솔직히 잘 모르겠다.)
'sk하이닉스'라고 검색하면, 지금 현재 기준(2021. 05. 23) 위 글이 가장 첫 번째로 나온다. 가져온 링크로 크롤링 하려고 할 경우, 제대로 된 값을 가져오지 못한다.
개발자 도구를 켜서 확인해본 결과 <iframe>태그가 있는 것을 확인했다. 그리고 src = "/PostView.nhn? ~~" 을 확인할 수 있다.
이 부분이 진짜 글 주소라고 할 수 있는데, 이 주소를 그냥 사용할 수 있는 것은 아니고, 앞부분에 "https://blog.naver.com/"를 붙여줘야 한다.
iframe 안에 있는 src 부분을 가져와 앞 부분에 블로그 주소("https://blog.naver.com/")를 붙여주는 함수를 정의했다.
#iframe 제거 후 blog.naver.com 붙이기
def delete_iframe(url):
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36"}
res = requests.get(url, headers=headers)
res.raise_for_status() # 문제시 프로그램 종료
soup = BeautifulSoup(res.text, "lxml")
src_url = "https://blog.naver.com/" + soup.iframe["src"]
return src_url
다음으로 본문을 가져오는 함수를 작성했다. def text_scraping(url) 이곳에서 들어가는 url은 def delete_iframe() 함수에서 반환한 주소(src_url)이다.
# 본문 스크래핑
def text_scraping(url):
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36"}
res = requests.get(url, headers=headers)
res.raise_for_status() # 문제시 프로그램 종료
soup = BeautifulSoup(res.text, "lxml")
if soup.find("div", attrs={"class":"se-main-container"}):
text = soup.find("div", attrs={"class":"se-main-container"}).get_text()
text = text.replace("\n","") #공백 제거
print("블로그")
return text
else:
return "확인불가"
class 이름이 'se-main-container'인 <div> 태그 안에 본문 내용이 있는 것을 확인할 수 있다. if문을 이용해 해당 이름을 갖고 있는 class가 있는지 확인한 후 그 값이 '참'이라면, 해당 부분의 내용을 긁어온다. replace()함수를 통해 공백을 제거해 텍스트만 가져오도록 했다.
위와 같이 코드를 작성할 경우, 스마트에디터로 작성한 글만 가져올 수 있다. 스마트에디터로 작성된 글이 아니라면, 확인 불가 메세지가 나온다.
import requests
import re #추가
from bs4 import BeautifulSoup
from urllib.parse import quote
for post in posts:
// 앞 부분 생략
blog_p = re.compile("blog.naver.com")
blog_m = blog_p.search(post_link)
if blog_m:
blog_text = text_scraping(delete_iframe(post_link))
print(blog_text)
print("-"*50)
View 탭에서는 블로그뿐만 아니라, 카페, 네이버포스트도 검색이 된다. 따라서 카페와 네이버 포스트에 대한 예외처리를 해주어야 한다. 아직 이것에 대해 예외처리를 해놓지 않았으므로 정보를 가져올 수 없다.
현재는 블로그 글만 가져오도록 코드가 작성되었기 때문에, 정규식을 통해 'blog.naver.com'이 들어간 주소만 크롤링 하도록 만들었다.
결론적으로 현재 코드는 네이버 블로그 글이면서 동시에 스마트에디터로 작성된 것만 가져올 수 있다.
첫 번째 글은 위 사항을 충족하기 때문에, 잘 가져와 지는 것을 볼 수 있다. 정규식과 if문을 통해 카페 글과 네이버 포스트 글도 가져올 수 있도록 개선해야겠다.
2021.05.28 - [파이썬] - [Python] BeautifulSoup을 이용한 네이버 블로그 크롤링 - 3
[Python] BeautifulSoup을 이용한 네이버 블로그 크롤링 - 3
[Python] BeautifulSoup을 이용한 네이버 블로그 크롤링 - 1 뷰티플수프(BeautifulSoup)를 이용해 특정 키워드 검색 후 나온 결과의 네이버 블로그 제목과 URL을 가져올 예정이다. import requests from bs4 impor..
kissi-pro.tistory.com
'Information' 카테고리의 다른 글
[Python] 네이버웹툰 크롤링 - 제목, 링크주소 가져오기 (0) | 2021.05.29 |
---|---|
[Python] BeautifulSoup을 이용한 네이버 블로그 크롤링 - 3 (0) | 2021.05.28 |
[Python] BeautifulSoup을 이용한 네이버 블로그 크롤링 - 1 (1) | 2021.05.23 |
네이버블로그 상위 랭크 10등까지 제목과 링크 가져오기 - 파이썬 웹크롤링 (2) | 2021.05.06 |
[Python] 파이썬 문자열 대문자, 소문자로 바꾸기 (0) | 2021.04.30 |