반응형
이 코드는 개인적으로 학습용으로 만든 노트에 불과합니다. seodaeho91님의 블로그와 연세대학교 서중원님의 github를 그대로 참조했습니다. 감사합니다.
import requests
from bs4 import BeautifulSoup
import pprint
import json
import re
import sys
List = []
url = "https://news.naver.com/main/ranking/read.nhn?mid=etc&sid1=111&rankingType=popular_day&oid=015&aid=0004278747&date=20200124&type=1&rankingSeq=2&rankingSectionId=105"
res = requests.get(url)
res.text
oid = url.split("oid=")[1].split("&")[0]
aid = url.split("aid=")[1]
page = 1
headers = {
"referer": url,
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"
}
while True:
c_url = "https://apis.naver.com/commentBox/cbox/web_neo_list_jsonp.json?ticket=news&templateId=default_society&pool=cbox5&_callback=jQuery1707138182064460843_1523512042464&lang=ko&country=&objectId=news"+oid+"%2C"+aid+"&categoryId=&pageSize=20&indexSize=10&groupId=&listType=OBJECT&pageType=more&page="+str(page)+"&refresh=false&sort=FAVORITE"
res = requests.get(c_url,headers=headers)
cont = BeautifulSoup(res.content, 'html.parser')
total_comm = str(cont).split('comment":')[1].split(",")[0] # 실제 댓글 split
#print(str(cont))
match = re.findall('"contents":([^\*]*),"userIdNo"', str(cont)) # "content": 뒤에 나오는 전체 문장 끝은 ,"userIdNo"로 끝나는...
#print(match)
List.append(match)
# 한 번에 댓글이 20개씩 보이기 때문에 한 페이지씩 몽땅 댓글을 긁어오기
if int(total_comm) <= ((page*20)):
break
else:
page += 1
def flatten(I):
flatList = []
for elem in I:
if type(elem) == list: #타입이 list이면 그 안의 원소를 추가
for e in elem:
flatList.append(e)
else: #타입이 list가 아닌 원소라면 바로 추가
flatList.append(elem)
return flatList
flatten(List)
아래는 코드를 돌린 결과입니다.
728x90
반응형
'문돌이 존버 > 코딩연습' 카테고리의 다른 글
git 기본 지식 쌓기(2) (0) | 2020.09.17 |
---|---|
파이썬 웹크롤링(web-crwaling) 파헤치기! feat. BeautifulSoup, Selenium (0) | 2020.07.18 |
git 기본 지식 쌓기(1) (0) | 2020.07.11 |
웹스크래핑 + Tokenization + Lemmatization feat.파이썬 (1) | 2020.03.05 |
동적 페이지 수집(Instagram) using Selenium (0) | 2020.01.27 |