Toggle navigation
Toggle navigation
This project
Loading...
Sign in
김건
/
Comment_Analysis
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Builds
Commits
Issue Boards
Authored by
장준영
2019-11-15 17:15:14 +0900
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
7500dcc6986570311877ca65bfaaa3275613af2f
7500dcc6
1 parent
d48ce4be
naverNews의 댓글관련 정보수집 구현
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
77 additions
and
0 deletions
naverNews/naverNews.md
naverNews/naverNews_crawling.py
naverNews/naverNews.md
0 → 100644
View file @
7500dcc
1.
Data 받아오기
1) selenuim을 이용하여 웹페이지에서 데이터를 검색
2) 원하는 URL 입력받음(구현예정)
3) headless하게 구현하기 위해 chrome option 적용하여 driver 생성
4) naverNews는 댓글 영역 하단 부 '더보기'를 지속적으로 눌러줘야하므로
driver의 find_element_by_css_selector함수로 해당 class인
u_cbox_btn_more을 페이지가 끝날 때까지 돌림
5) 위의 과정에서 얻은 페이지 소스를 beautifulSoup을 이용하여, find_all을 통해 {사용자ID, 댓글, 작성시간}의 데이터를 각각 raw하게 뽑음. (naverNews의 제한적인 특징으로 사용자ID 뒤 4자리는 비공개처리됨)
2.
사용할 DataSet으로 가공
1) 리스트 형태로 각각 nicknames(사용자ID), comments(댓글), times(작성시간)을 뽑아냄
2) 세 리스트에서 짝을 이루는 쌍을 dictionary형태로 {사용자ID, 댓글, 작성시간} 다음과 같이 저장
3) 저장된 dictionary list(info_dic)을 최종 결과 리스트인 naverNewsList에 저장한다.
3.
함수 구현
위에서 받아온 데이터를 바탕으로 기능 구현 예정
1) KEYWORD 기반 검색 기능
2) 가장 자주 나온 단어 검색 기능
3) ID 기반 검색 기능
4) 시간 대별 검색 기능
등 여러 함수 구현 예정
\ No newline at end of file
naverNews/naverNews_crawling.py
0 → 100644
View file @
7500dcc
from
selenium
import
webdriver
from
selenium.common
import
exceptions
from
bs4
import
BeautifulSoup
import
time
## chrome option걸기 (headless하게 웹 크롤링 수행하기 위해<웹페이지 안보이게 하기>)
options
=
webdriver
.
ChromeOptions
()
#options.add_argument('headless')
#options.add_argument("disable-gpu")
_url
=
"https://entertain.naver.com/ranking/comment/list?oid=144&aid=0000642175"
# 크롤링할 URL
webDriver
=
"C:
\\
Users
\\
user
\\
Desktop
\\
chromedriver_win32
\\
chromedriver.exe"
# 내 웹드라이버 위치
driver
=
webdriver
.
Chrome
(
webDriver
,
chrome_options
=
options
)
#driver = webdriver.Chrome(webDriver)
driver
.
get
(
_url
)
pageCnt
=
0
driver
.
implicitly_wait
(
3
)
# 페이지가 다 로드 될때까지 기다리게함
try
:
while
True
:
# 댓글 페이지 끝날때까지 돌림
#driver의 find_element_by_css_selector함수로 '네이버 뉴스'의 댓글 '더보기' 버튼을 찾아서 계속 클릭해준다(끝까지)
driver
.
find_element_by_css_selector
(
".u_cbox_btn_more"
)
.
click
()
pageCnt
=
pageCnt
+
1
except
exceptions
.
ElementNotVisibleException
as
e
:
# 페이지가 끝남
pass
except
Exception
as
e
:
# 다른 예외 발생시 확인
print
(
e
)
pageSource
=
driver
.
page_source
# 페이지 소스를 따와서
result
=
BeautifulSoup
(
pageSource
,
"lxml"
)
# 빠르게 뽑아오기 위해 lxml 사용
# nickname, text, time을 raw하게 뽑아온다
comments_raw
=
result
.
find_all
(
"span"
,
{
"class"
:
"u_cbox_contents"
})
nicknames_raw
=
result
.
find_all
(
"span"
,
{
"class"
:
"u_cbox_nick"
})
times_raw
=
result
.
find_all
(
"span"
,
{
"class"
:
"u_cbox_date"
})
# nickname, text, time 값 만을 뽑아내어 리스트로 정리한다
comments
=
[
comment
.
text
for
comment
in
comments_raw
]
nicknames
=
[
nickname
.
text
for
nickname
in
nicknames_raw
]
times
=
[
time
.
text
for
time
in
times_raw
]
naverNewsList
=
[]
for
i
in
range
(
len
(
comments
)):
info_dic
=
{
'userID'
:
nicknames
[
i
],
'comment'
:
comments
[
i
],
'time'
:
times
[
i
]}
naverNewsList
.
append
(
info_dic
)
print
(
naverNewsList
[:
3
])
#driver.quit()
\ No newline at end of file
Please
register
or
login
to post a comment