본문 바로가기
프로그래밍/Python

네이버카페 게시글 제목 크롤링

by purplebulb 2020. 1. 29.
반응형


0. 크롬 접속

1. 모바일환경으로 URL변경

2. 크롤링 원하는 게시판으로 이동

3. F12개발자도구 > Network > XHR

4. 글목록 하단 '더보기' 클릭


5. 통신 방식 확인

(1) Header카테고리에서 Request Method 확인

- GET방식인지 Post방식인지..


(2) parameter확인 

- 1안 : 개발자도구에 새로 업데이트된 항목 (ArticleList.json?search....) 오른쪽클릭 > Copy > Copy link address 클릭 > 복사URL확인

- 2안 : Header카테고리에서 Request URL 확인 (get방식일 경우, ?로 url 구분 / &으로 파라미터 연결)



[1차]
import requests
import json

f = open("C:/Users/kej82/Documents/개인/새파일.txt",'w', encoding='utf-8')

list_url = 'https://apis.naver.com/cafe-web/cafe2/ArticleList.json'
n=0

while True:

n = n + 1
params = {
'search.clubid' : '15754634', # 카페id
'search.queryType' : 'lastArticle',
'search.menuid': '1212', # 게시판id (취준생방)
'search.page': n, #페이지번호
#'search.pageLastArticleId': 6210000, #더보기 버튼 눌렀을 때 마지막 article의 id
'search.firstArticleInReply': 'false',
}

html = requests.get(list_url, params = params).text
#print(html)
#print(type(html))

jsonObj = json.loads(html)
#print(type(jsonObj))

message = jsonObj.get("message")
articleList = message["result"]["articleList"][9]
subject = articleList["subject"]
print(subject)
f.write(subject + "\r")

if n == 50000:
break # while문 종료.

f.close()



[2차] _1차 수정본

import requests
import json

f = open("C:/Users/kej82/Documents/개인/새파일.txt",'w', encoding='utf-8')
list_url = 'https://apis.naver.com/cafe-web/cafe2/ArticleList.json'
page=0

pageLastArticleId = ''
maxPage=10 #대략 몇 페이지 가져와야 최근 하루치인지, 한달치인지 가늠해봐야 함★

while True:

page = page + 1
params = {
'search.clubid' : '15754634', # 카페id
'search.queryType' : 'lastArticle',
'search.menuid': '1212', # 게시판id (취준생방)
'search.replylistorder': '', # 정렬기준
'search.firstArticleInReply': 'false',
'search.page': page, #페이지번호
'search.pageLastArticleId': pageLastArticleId #더보기 버튼 눌렀을 때 마지막 article의 id
}

html = requests.get(list_url, params=params, verify=False).text
jsonObj = json.loads(html)

# urllib3
#urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
# requests
requests.packages.urllib3.disable_warnings(requests.packages.urllib3.exceptions.InsecureRequestWarning)
message = jsonObj.get("message")

articleSeq = 0;
articleList = message["result"]["articleList"]
articleSize = len(articleList)

#page : 1 START
print("page : " + str(page) + " (" + str(articleSize) + ") START")

while articleSeq<articleSize :
article = articleList[articleSeq]

#제목
subject = article["subject"]
writeDateTimestamp = article["writeDateTimestamp"]
f.write(subject + "\t" + str(writeDateTimestamp) + "\r")

#마지막 게시글ID
if articleSeq == articleSize-1 :
pageLastArticleId = article["articleId"]

# 0 : 저같은 노답이 있나요? (6214178)
print(str(articleSeq) + " : " + subject + " (" + str(article["articleId"]) + ")")
articleSeq = articleSeq + 1

#page : 1 END
print("page : " + str(page) + " END")

if page == maxPage :
print("last page .. break")
break

f.close()


'프로그래밍 > Python' 카테고리의 다른 글

LDA  (0) 2020.06.02
형태소분석  (0) 2020.01.28
word2vec  (0) 2020.01.28

댓글