네이버 크롤링 | 30만원 짜리 외주 프로그램 만들기 – 파이썬으로 네이버 쇼핑 크롤링하기 1편 (Ft. 셀레니움 Selenium) 모든 답변

당신은 주제를 찾고 있습니까 “네이버 크롤링 – 30만원 짜리 외주 프로그램 만들기 – 파이썬으로 네이버 쇼핑 크롤링하기 1편 (ft. 셀레니움 selenium)“? 다음 카테고리의 웹사이트 you.maxfit.vn 에서 귀하의 모든 질문에 답변해 드립니다: you.maxfit.vn/blog. 바로 아래에서 답을 찾을 수 있습니다. 작성자 스타트코딩 이(가) 작성한 기사에는 조회수 16,228회 및 좋아요 252개 개의 좋아요가 있습니다.

네이버 크롤링 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 30만원 짜리 외주 프로그램 만들기 – 파이썬으로 네이버 쇼핑 크롤링하기 1편 (ft. 셀레니움 selenium) – 네이버 크롤링 주제에 대한 세부정보를 참조하세요

find_element_by_css_selector 는 셀레니움 4.3.0부터 더 이상 사용되지 않습니다.
find_element로 바꿔야 하는데 사용법은 아래 영상을 참고해 보시기 바랍니다.
https://youtu.be/LoPvjfABlBA

30만원을 받고 만들어 준 외주 프로그램 만드는 과정을 공개합니다.
이런 거 다 공개해도 괜찮겠죠..?
네이버 쇼핑 상품 정보를 검색어 별로
크롤링 후 엑셀로 저장하는 프로그램입니다.
여러분도 강의를 듣고 나면 프로그램을 제작해서 돈을 벌 수 있습니다.
코딩을 배우는 사람 10명중 9명은 모르는 ‘이것’
https://class101.page.link/xq57

네이버 크롤링 주제에 대한 자세한 내용은 여기를 참조하세요.

[python] 원하는 검색어로 네이버 뉴스 크롤링하기(1)

네이버 오픈 API의 경우 사용하는 방법을 알면 간편하게 뉴스, 블로그, 카페 등등을 크롤링하여 정보를 수집할 수 있습니다.

+ 여기에 보기

Source: wonhwa.tistory.com

Date Published: 3/26/2021

View: 113

파이썬으로 네이버 금융 뉴스 크롤링하기 (코드/영상 포함)

이번 포스트에서는 네이버 금융 사이트에서 파이썬으로 주식 뉴스를 크롤링 해보겠습니다. 과도한 크롤링은 문제가 될 수 있으니 자제해 주시기 바랍니다.

+ 여기에 표시

Source: contents.premium.naver.com

Date Published: 4/7/2021

View: 5737

이제까지 이런 크롤링 소송 없었다…네이버 열받게한 스타트업 …

크롤링한 네이버부동산 매물은 중개사가 광고비를 내고 네이버에 노출시킨 정보인데, 다윈중개를 통해 더 빨리 매수자를 찾으면 네이버에도 중개사에게도 …

+ 여기를 클릭

Source: www.joongang.co.kr

Date Published: 5/10/2021

View: 1413

네이버 블로그 파이썬을 통하여 웹 크롤링하기 – velog

만들게 된 계기 빌딩 구내식당 메뉴를 매일 받아보는 취지로 만들어보았다 해당 식당의 메뉴가 블로그 글을 매일 수정하는 방식으로 알려주기 때문에 …

+ 여기에 표시

Source: velog.io

Date Published: 8/20/2021

View: 6737

[2탄] 쉽게 따라하는 네이버 뉴스 크롤링(python) – title, URL …

본 포스팅은 네이버 웹 크롤링 실제 python 코드를 작성하는 2탄입니다. 전 단계인 수행계획을 확인하고 싶으신 분들은 아래링크(1탄)을 참고해주세요 :)”.

+ 여기에 보기

Source: everyday-tech.tistory.com

Date Published: 12/23/2022

View: 6293

webcrawling (웹크롤링) 네이버 기사 (시간, 타이틀, 링크 …

webcrawling (웹크롤링) 네이버 기사 (시간, 타이틀, 링크) 크롤링 ( find, find_all, attrs, a[“href”]). 일단 2021. 7. 13. 15:07. 320×100.

+ 여기에 더 보기

Source: wpaud16.tistory.com

Date Published: 1/14/2021

View: 9658

[크롤링기초] 네이버 쇼핑 정보 가져오기

[크롤링기초] 네이버 쇼핑 정보 가져오기. Link2Me 2021. 6. 25. 15:34. 320×100. 네이버 쇼핑 사이트 정보를 스크래핑하는 방법에 대한 예제이다.

+ 여기에 보기

Source: link2me.tistory.com

Date Published: 11/5/2022

View: 5006

[BeautifulSoup] #4 네이버 뉴스 크롤링하기

오늘은 지난번에 알아본 find 함수를 직접 활용하여 네이버 뉴스 크롤링 예제를 진행해보겠습니다. 아마 뉴스나 주식 같이 특정 정보가 필요할 때 …

+ 여기에 더 보기

Source: homubee.tistory.com

Date Published: 6/19/2021

View: 1420

Python 웹크롤링 (Web Crawling) 01. 네이버 검색결과 크롤러 …

웹 크롤링이 갑자기 해보고싶어서 할거다. 웹 크롤링이란 ? -WEB 상에 존재하는 콘텐츠들은 수집하는 작업. 오늘은 네이버에 검색하면 블로그 검색 …

+ 여기에 표시

Source: j-ungry.tistory.com

Date Published: 3/12/2022

View: 7785

주제와 관련된 이미지 네이버 크롤링

주제와 관련된 더 많은 사진을 참조하십시오 30만원 짜리 외주 프로그램 만들기 – 파이썬으로 네이버 쇼핑 크롤링하기 1편 (ft. 셀레니움 selenium). 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

30만원 짜리 외주 프로그램 만들기 - 파이썬으로 네이버 쇼핑 크롤링하기 1편 (ft. 셀레니움 selenium)
30만원 짜리 외주 프로그램 만들기 – 파이썬으로 네이버 쇼핑 크롤링하기 1편 (ft. 셀레니움 selenium)

주제에 대한 기사 평가 네이버 크롤링

  • Author: 스타트코딩
  • Views: 조회수 16,228회
  • Likes: 좋아요 252개
  • Date Published: 2021. 10. 11.
  • Video Url link: https://www.youtube.com/watch?v=ZHx6oATaI28

[python] 원하는 검색어로 네이버 뉴스 크롤링하기(1) :: WONA

반응형

오늘은 전에 알려드린 오픈 API 사용과 더불어 파이썬으로 크롤러 만드는 방법을 소개하도록 하겠습니다.

네이버 오픈 API의 경우 사용하는 방법을 알면 간편하게 뉴스, 블로그, 카페 등등을 크롤링하여 정보를 수집할 수 있습니다. 하지만 개인당 일일 오픈 API 사용량이 제한되어 있어 빅데이터를 분석 시 그보다 더 큰 데이터를 수집해야 할 때가 있어 오픈 API만으로 필요한 정보를 모두 수집하기는 어렵습니다. 그래서 이번에는 Python으로 네이버 뉴스 크롤링하는 방법을 알아보려고 합니다.

이렇게 네이버 오픈 API는 할당된 사용량이 정해져 있음을 확인할 수 있습니다.

step1. 네이버 뉴스 홈페이지 접속 및 HTML 구조 파악

먼저, 네이버 창에 “코로나”를 검색하여 나오는 뉴스 탭을 확인하도록 합시다.

<위 사진의 URL>

https://search.naver.com/search.naver?where=news&sm=tab_jum&query=코로나

뉴스 크롤링을 위에 보이는 페이지만 하는 것이 아니기 때문에 스크롤 다운을 하여 페이지 1을 클릭하여 줍니다.

<페이지 1을 클릭한 뒤의 URL>

https://search.naver.com/search.naver?where=news&sm=tab_pge&query=코로나&sort=0&photo=0&field=0&pd=0&ds=&de=&cluster_rank=32&mynews=0&office_type=0&office_section_code=0&news_office_checked=&nso=so:r,p:all,a:all&start=1

페이지 1을 클릭하고 URL을 확인하여 보니 아까 검색어만 입력했을 때와는 달리 엄청 길고 복잡한 URL이 나왔습니다.

다음으로 페이지 2,3을 각각 클릭하여 위의 URL과 어떤 다른 점이 있는지 확인하여 보겠습니다.

<페이지 1을 클릭한 뒤의 URL>

https://search.naver.com/search.naver?where=news&sm=tab_pge&

query=코로나

&sort=0&photo=0&field=0&pd=0&ds=&de=&cluster_rank=32&mynews=0&office_type=0&office_section_code=0&news_office_checked=&nso=so:r,p:all,a:all&

start=1

<페이지 2를 클릭한 뒤의 URL>

https://search.naver.com/search.naver?where=news&sm=tab_pge& query=코로나 &sort=0&photo=0&field=0&pd=0&ds=&de=&cluster_rank=64&mynews=0&office_type=0&office_section_code=0&news_office_checked=&nso=so:r,p:all,a:all& start=11

<페이지 3을 클릭한 뒤의 URL>

https://search.naver.com/search.naver?where=news&sm=tab_pge& query=코로나 &sort=0&photo=0&field=0&pd=0&ds=&de=&cluster_rank=87&mynews=0&office_type=0&office_section_code=0&news_office_checked=&nso=so:r,p:all,a:all& start=21

위와 같이 URL을 모아 보면 공통부분이 있습니다.

검색어를 입력하는 &query=코로나 부분과,

페이지를 입력하는 &start=1(1페이지),11(2페이지),21(3페이지)… 이 부분이 공통적인 요소입니다.

위의 내용을 토대로 중간 부분을 생략하고(생략하여도 검색에 문제는 없습니다.) 공통의 URL을 도출해 내면 아래와 같습니다.

https://search.naver.com/search.naver?where=news&sm=tab_pge &query=”검색어” &start=”페이지”

이제 파이썬으로 뉴스를 크롤링하는 코드를 만들어 보도록 합시다.

step 2. 파이썬에서 사용할 library(라이브러리들) import

#크롤링시 필요한 라이브러리 불러오기 from bs4 import BeautifulSoup import requests

step3. 검색어 입력받기

검색할 키워드와 페이지를 입력받는 코드를 input을 사용하여 작성해 줍니다.

#검색어 입력 search = input(“검색할 키워드를 입력해주세요:”) #검색할 페이지 입력 page = int(input(“크롤링할 페이지를 입력해주세요. ex)1(숫자만입력):”)) # ex)1 =1페이지,2=2페이지… print(“크롤링할 페이지: “,page,”페이지”)

결괏값:

검색할 키워드를 입력해주세요: (검색 키워드 입력)

크롤링할 페이지를 입력해주세요. ex)1(숫자만입력): 1(숫자 입력)

크롤링할 페이지: 1 페이지

step4. 입력받은 내용에 해당하는 URL 생성하기

페이지 입력을 받을 때 naver에서는 1페이지가 1, 2페이지가 11, 3페이지가 21… 이런 식으로 표현되기 때문에 그것에 맞도록 바꿔주는 코드를 추가하여 url을 생성합니다.

#start수를 1, 11, 21, 31 …만들어 주는 함수 page_num = 0 if page == 1: page_num =1 elif page == 0: page_num =1 else: page_num = page+9*(page-1) #url 생성 url = “https://search.naver.com/search.naver?where=news&sm=tab_pge&query=” + search + “&start=” + str(page_num) print(“생성url: “,url)

결괏값:

생성url: https://search.naver.com/search.naver?where=news&sm=tab_pge&query=검색키워드&start=페이지숫자

step5. html 불러와서 BeautifulSoup로 해당 페이지 파싱 하기

# ConnectionError방지 headers = { “User-Agent”: “Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/100.0.48496.75” } #html불러오기 original_html = requests.get(url, headers=headers) html = BeautifulSoup(original_html.text, “html.parser”)

step6. 원하는 값을 추출하기 위한 코드 작성

예시로 코로나를 검색하여 나오는 페이지에서 필요한 내용(제목, 각 기사 url 등)을 찾아보도록 합시다.

‘코로나’ 검색후 나오는 1페이지 화면

위의 화면에서 F12를 눌러주면 다음과 같이 오른쪽에 개발자 도구가 나오게 됩니다.

여기서 우리가 얻고 싶은 정보는 뉴스가 나와있는 부분이죠. 이 부분에 커서를 대면 빨간 박스와 같이 어디에 위치하여 있는지 표시가 됩니다.

각 기사의 제목과 url은 group_news라는 클래스 이름의 div 안 ul태그의 list_news라는 이름의 class 안 li태그 안의 div의 news_area라는 이름의 class 안의 a태그에 위치하여 있습니다.

이것을 코드로 나타내면 아래와 같이 작성할 수 있습니다.

div.group_news > ul.list_news > li div.news_area > a

.(점) 뒤에는 클래스 이름을, >는 ~안에 있다는 뜻입니다.

만약 html 개발자 도구로 확인할 때 class = 클래스 이름 이 아니라 id = 아이디 이름 이 있으면. 대신 #을 앞에 붙이면 됩니다.

# 검색결과 articles = html.select(“div.group_news > ul.list_news > li div.news_area > a”) print(articles) # 검색된 기사의 갯수 print(len(articles),”개의 기사가 검색됌.”)

결괏값:

[[속보]코로나19 신규 확진자 1940명…’연휴’ 끝, 증가세 계속, [단독] 적십자, 제약사에 혈액 헐값 공급… 코로나19로 혈액수급 비상인데, [속보] 코로나19 신규 확진 1,940명…100일째 네 자릿수, [속보] 코로나 신규 확진 1940명… 다시 2000명대 육박, [속보]코로나19 신규 확진 1940명···10명 중 8명 수도권, ‘얀센+모더나 부스터샷’ 코로나 백신 효과 가장 좋다, [속보] 코로나19 신규 환자 1,940명…100일째 네 자릿수, 분사형 제품, 살균력 낮고 ‘코로나 예방’ 과장 광고, 軍 병원 코로나19 의료진에 KF94 마스크 3000장 기부, ‘위드코로나’ 준비 첫발 내딛다]

10 개의 기사가 검색됌.

이렇게 제목 및 기사 내용을 알 수 있는 url이 추출이 되었습니다. 하지만 아직 지저분해 보입니다.

여기서 제목 및 기사 url만 추출하는 코드를 작성해 보겠습니다.

제목은 title이라는 속성 값을 가진 곳에 작성이 되어 있습니다.

이 부분만 추출하는 코드는 아래와 같습니다.

#뉴스기사 제목 가져오기 news_title = [] for i in articles: news_title.append(i.attrs[‘title’]) news_title

결괏값:

[“[속보]코로나19 신규 확진자 1940명…’연휴’ 끝, 증가세 계속”, ‘[단독] 적십자, 제약사에 혈액 헐값 공급… 코로나19로 혈액수급 비상인데’, ‘[속보] 코로나19 신규 확진 1,940명…100일째 네 자릿수’, ‘[속보] 코로나 신규 확진 1940명… 다시 2000명대 육박’, ‘[속보]코로나19 신규 확진 1940명···10명 중 8명 수도권’, “‘얀센+모더나 부스터샷’ 코로나 백신 효과 가장 좋다”, ‘[속보] 코로나19 신규 환자 1,940명…100일째 네 자릿수’, “분사형 제품, 살균력 낮고 ‘코로나 예방’ 과장 광고”, ‘軍 병원 코로나19 의료진에 KF94 마스크 3000장 기부’, ‘‘위드코로나’ 준비 첫발 내딛다’]

이제 뉴스 기사 url을 가져와 봅시다.

url은 href라는 속성 값에 위치에 있습니다.

#뉴스기사 URL 가져오기 news_url = [] for i in articles: news_url.append(i.attrs[‘href’]) news_url

결괏값:

[‘http://www.edaily.co.kr/news/newspath.asp?newsid=01610486629212920’, ‘https://biz.chosun.com/it-science/bio-science/2021/10/14/S4RMV6PZZ5DXRCHU6GYD2354ZE/?utm_source=naver&utm_medium=original&utm_campaign=biz’, ‘https://news.kbs.co.kr/news/view.do?ncd=5300642&ref=A’, ‘https://health.chosun.com/site/data/html_dir/2021/10/14/2021101400675.html’, ‘https://www.khan.co.kr/national/health-welfare/article/202110140939001’, ‘http://www.fnnews.com/news/202110140647114518’, ‘https://www.ytn.co.kr/_ln/0103_202110140934000806’, ‘https://www.ytn.co.kr/_ln/0102_202110131304564350’, ‘http://www.newsis.com/view/?id=NISX20211014_0001612990&cID=10301&pID=10300’, ‘http://news.heraldcorp.com/view.php?ud=20211013000716’]

step7. 각 기사의 내용을 크롤링하기

각 기사의 내용을 크롤링하려면 step6에서와 같이 각각의 기사 링크를 타고 들어가 f12를 누르고 개발자 도구를 통해 html의 구조 및 필요한 내용이 어디에 위치해 있는지를 확인하여야 합니다.

하지만 각각의 언론사는 다 다른 html 구조를 가지고 있기 때문에 정확하게 크롤링하려면 번거롭고 시간이 많이 듭니다.

보통 기사는 p 태그에 본문 내용이 있기 때문에 p태그에 있는 모든 내용을 가져오는 코드를 작성해 보도록 하겠습니다.

#뉴스기사 내용 크롤링하기 contents = [] for i in news_url: #각 기사 html get하기 news = requests.get(i) news_html = BeautifulSoup(news.text,”html.parser”) #기사 내용 가져오기 (p태그의 내용 모두 가져오기) contents.append(news_html.find_all(‘p’)) contents

결괏값:

p class=”tit”>이시간 핫 뉴스

,

오늘의 헤드라인

,

“확진 1940명…100일째 네자리 연휴 끝난 후 3일 연속 증가세

,

,

코로나19 신규 확진자 수가 1940명으로 집계돼 다시 2000명대에 육박했다. 신규 확진자 수는 최근 3일 연속 증가세인데, 정부는 단계적 일상회복 전 마지막 사회적 거리두기 단계 조정안을 오는 15일 발표할 예정이다. 질병관리청 중앙방역대책본부(방대본)에 따르면 14일 0시 기준 누적 확진자는 전날보다 1940명 증가한 33만7679명이다.

,

“김만배, 구속심사 출석…’700억대’ 뇌물 등 혐의

,

“李 34%·尹 33.7%…이낙연 지지층, 尹으로 이탈

,

“[단독]음저협, 저작권료 41억 받고도 미분배

,

“日언론 “기시다, 이르면 오늘 文대통령과 통화”

,

“尹 “당 없어지는 게 낫다”에 劉·洪 “못된 버르장머리”

,

많이 본 기사

…(중략)

기사의 모든 본문을 가지고 있지만 본문 뿐만이 아니라 p태그의 모든 내용이 크롤링 되기 때문에 크롤링 후 전처리가 필수적으로 진행이 되어야 합니다. 추후 전처리에 관련해서도 포스팅 할 예정입니다.

전체 코드

#크롤링시 필요한 라이브러리 불러오기 from bs4 import BeautifulSoup import requests #검색어 입력 search = input(“검색할 키워드를 입력해주세요:”) #검색할 페이지 입력 page = int(input(“크롤링할 페이지를 입력해주세요. ex)1(숫자만입력):”)) # ex)1 =1페이지,2=2페이지… print(“크롤링할 페이지: “,page,”페이지”) #start수를 1, 11, 21, 31 …만들어 주는 함수 page_num = 0 if page == 1: page_num =1 elif page == 0: page_num =1 else: page_num = page+9*(page-1) #url 생성 url = “https://search.naver.com/search.naver?where=news&sm=tab_pge&query=” + search + “&start=” + str(page_num) print(“생성url: “,url) # ConnectionError방지 headers = { “User-Agent”: “Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/100.0.48496.75” } #html불러오기 original_html = requests.get(url, headers=headers) html = BeautifulSoup(original_html.text, “html.parser”) # 검색결과 articles = html.select(“div.group_news > ul.list_news > li div.news_area > a”) print(articles) # 검색된 기사의 갯수 print(len(articles),”개의 기사가 검색됌.”) #뉴스기사 제목 가져오기 news_title = [] for i in articles: news_title.append(i.attrs[‘title’]) news_title #뉴스기사 URL 가져오기 news_url = [] for i in articles: news_url.append(i.attrs[‘href’]) news_url #뉴스기사 내용 크롤링하기 contents = [] for i in news_url: #각 기사 html get하기 news = requests.get(i,headers=headers) news_html = BeautifulSoup(news.text,”html.parser”) #기사 내용 가져오기 (p태그의 내용 모두 가져오기) contents.append(news_html.find_all(‘p’)) contents

코드 파일

naver_news_crawler.ver0.9.ipynb 0.09MB

마무리

오늘의 포스팅은 네이버 뉴스를 파이썬으로 크롤링하는 코드를 만들어 보았습니다. 이번에는 1페이지씩 크롤링하는 코드를 작성하였는데요, 다음 포스팅에는 한 번에 여러 페이지를 크롤링하는 코드를 만들어 보도록 하겠습니다. 🙂

+ 최신 버전을 확인하고 싶다면??

https://wonhwa.tistory.com/46?category=996518

위의 게시물을 방문해 주세요:)

+2022.4.6 connection error 수정

반응형

파이썬으로 네이버 금융 뉴스 크롤링하기 (코드

이번 포스트에서는 네이버 금융 사이트에서 파이썬으로 주식 뉴스를 크롤링 해보겠습니다. 과도한 크롤링은 문제가 될 수 있으니 자제해 주시기 바랍니다.

사용하는 파이썬 라이브러리는 다음과 같습니다.

pip install requests

pip install beautifulsoup4

그럼 네이버 금융 사이트로 가보겠습니다. 여기서 뉴스 탭을 누르면 이렇게 뉴스 포털이 뜹니다.

https://finance.naver.com/news/

이제까지 이런 크롤링 소송 없었다…네이버 열받게한 스타트업 [팩플]

무임승차인가, 후발주자에게 경쟁 기회를 주는 기술인가. 국내 최대 플랫폼 기업 네이버가 한 스타트업의 ‘크롤링’(crawling·온라인상 정보 수집 및 가공)을 막아달라는 소송을 제기해 IT업계 관심이 커지고 있다.

무슨 일이야

네이버는 지난 1월 다윈중개(회사명 다윈프로퍼티)를 상대로 ‘데이터베이스권 침해금지 가처분’ 소송을 냈다. 다윈중개는 2019년 창업한 온라인 부동산 중개 스타트업. 이 회사는 자체 확보한 매물 외에, 네이버의 중개 서비스인 ‘네이버부동산’에 올라온 매물 정보 웹페이지 링크를 다윈중개에 연결했다. 이른바 ‘아웃링크’ 방식으로 네이버부동산 매물을 다윈중개에 끌어다 놓은 것. 특히, 네이버 매물의 단지명·층·면적·가격 등 4개 정보는 직접 다윈중개 플랫폼에 게시하고 ‘외부 사이트 매물도 다윈중개 중개사에게 의뢰하면 저렴한 수수료로 중개받을 수 있다’고 안내했다. 네이버는 가처분 신청서에서 “(다윈중개가) 마치 전국 각지에서 상당한 양의 부동산 매물을 확보한 것처럼 꾸미기 위해 네이버부동산 데이터베이스(DB)를 무단으로 대량 복제해 게시하고 있다”며 “네이버부동산 정보의 무단 이용을 막아달라”고 주장했다.

이게 왜 중요해

크롤링은 4차 산업혁명시대의 기반 기술로 꼽힌다. 크롤러로 불리는 프로그램이 거미줄처럼 뻗은 월드와이드웹(www)을 돌며 데이터를 긁어와 수집·가공한다. 구글, 네이버 등 지금의 빅테크를 만든 기술이기도 하다. 이창무 중앙대 보안대학원장은 “웹 크롤링은 검색엔진 외에도 쇼핑몰 최저가 비교, 인공지능(AI) 데이터 학습 등 웹 데이터가 들어가는 거의 모든 분야에서 쓰인다”고 말했다.

하지만 ‘데이터=돈’이 되면서 관련 분쟁이 늘고 있다. 일찌감치 양질의 DB를 만든 선발주자와, 이를 쫓는 후발주자 간 갈등은 법정 분쟁으로도 이어진다. 취업정보 플랫폼인 사람인과 잡코리아는 10년 간 소송전을 이어갔고 숙박정보 플랫폼 여기어때와 야놀자는 지금도 민형사상 소송 중이다. 지난해 9월엔 럭셔리 플랫폼 캐치패션이 경쟁사 발란·트렌비·머스트잇의 크롤링을 저작권법 위반이라며 경찰에 고발했다. 네이버의 이번 소송도 같은 맥락이다. 특히, 이번엔 기존과 달리 아웃링크 방식이 문제가 된 최초의 소송이다. IT업계와 법조계 모두 법원이 어떤 결론을 내릴지 주목하는 배경.

네이버는 왜? “무임승차 용납못해”

네이버는 2003년부터 부동산 매물정보 서비스를 시작했다. 공정거래위원회의 2020년 9월 발표에 따르면, 네이버는 부동산 매물 건수 기준 40% 이상, 순방문자 70% 이상을 점유한 시장지배적 사업자다. 그럼에도 스타트업을 상대로 소송까지 낸 이유가 있다.

①“20년 노하우 담은 알짜 DB” : 네이버부동산은 가격·층·동·단지·면적부터 공인중개사 매물 설명까지 망라한 방대한 DB다. 2009년부터 확인매물 서비스를 도입해 허위 매물을 걸러냈다. 네이버 관계자는 “인적물적 투자와 노력이 담긴 DB인만큼 저작권을 보호받아야 한다”며 “다윈중개의 행위는 이를 침해한 무임승차”라고 지적했다.

②“네이버부동산 중개사들에 피해” : 네이버는 ‘다윈중개가 네이버에 매물을 올린 중개사들에게 경제적 이익을 해친다’고도 주장한다. 네이버에 매물을 올린 중개사는 매수·매도자 양쪽서 수수료를 받는 ‘양타’를 노리는데, 다윈중개를 거치면 매물을 올린 중개사는 매수자 쪽 수수료를 못 받는다는 것. 네이버 관계자는 “경제적 이익의 침해를 일으키는, 성과 무단 이용행위”라며 “부정경쟁방지법 위반”이라고 말했다.

다윈중개는 왜? “누구나 볼 수 있는 정보다”

다윈프로퍼티는 2019년 창업한 프롭테크 스타트업. 지난해 소프트뱅크벤처스 등으로부터 30억원을 투자받았다.

①“아웃링크는 다르다” : 다윈중개는 아웃링크로 연결했기 때문에 DB저작권 침해가 아니라고 주장한다. 다윈중개 측 법률대리인인 김경환 법무법인 민후 대표 변호사는 “완전한 정보를 보려면 네이버부동산에 가야 한다”며 “아웃링크이기 때문에 법적 평가도 달라야한다”고 말했다. 다윈중개가 게시한 네이버 매물 정보는 가격 등 4가지 뿐이고, 네이버부동산에서도 로그인 없이 누구나 볼 수 있는 정보라는 점도 반박 근거다.

②“매물 올린 중개사에도 이득”: 다윈중개 측은 부정경쟁행위도 아니라고 반박한다. 크롤링한 네이버부동산 매물은 중개사가 광고비를 내고 네이버에 노출시킨 정보인데, 다윈중개를 통해 더 빨리 매수자를 찾으면 네이버에도 중개사에게도 좋다는 취지. 김석환 다윈중개 대표는 “뉴스로 치면 기사 제목만 보여주고, 클릭하면 네이버부동산 홈으로 이동하는 구조”라며 “네이버부동산 유입이 늘어 거래가 잘 되면 (네이버도, 중개사도) 좋은 것 아니냐”고 반박했다.

앞으로는?

이 사건을 심리 중인 수원지법 성남지원 민사5부는 지난달 두 차례 심문기일을 진행했다. 이르면 이달 안에 결론이 나올 수 있다. 업계 안팎에선 앞으로 유사한 크롤링 분쟁이 늘어날 것으로 전망한다. 특히 검색 기반으로 성장해 수많은 버티컬(특정 분야) 영역에서 양질의 DB, 서비스를 갖춘 네이버가 그 중심에 설 가능성이 크다. 크롤링 전문업체 유펜솔루션 김재훈 대표는 “양질의 데이터에 대한 수요는 커지는데 국내에선 아무래도 네이버, 카카오 같은 거대 플랫폼에 좋은 데이터가 많다”며 “데이터를 두고 포털과 스타트업 간의 분쟁은 더 늘어날 것”이라고 말했다.

네이버 블로그 파이썬을 통하여 웹 크롤링하기

만들게 된 계기

빌딩 구내식당 메뉴를 매일 받아보는 취지로 만들어보았다

해당 식당의 메뉴가 블로그 글을 매일 수정하는 방식으로 알려주기 때문에 전에 배웠던 웹크롤링을 어렵지 않게 사용할 수 있을 것 같은 느낌에 바로 도전

web crawling이란?

crawling

사전적 의미로는 기어다닌다는 뜻으로 웹에서 요청할 사이트에 들어가 필요한 정보를 수집하는 의미로 쓰인다

Web Scraping이라는 비슷한 용어도 있지만, 차이점이 있다면 스크래핑은 특정 정보를 가져오는 것을 목적으로 두고있고

크롤링은 자동화와 인터넷 사이트들을 인덱싱하는 것을 목적으로 두고 있다.

필요한 라이브러리

requests

BeautifulSoup4

requests

requests 라이브러리는 파이썬으로 http를 호출할 때 많이 쓰이는 라이브러리이다

import requests url = ‘https://m.blog.naver.com/blog_name/blog_page’ response = requests . get ( url ) if response . status_code == 200 : else : print ( response . status_code )

url을 연결하고 response 했을 때 status_code가 200이 뜬다면 정상 작동하는 것이고

만약 다른 코드가 나온다면 해당 코드를 찾아보면서 오류의 원인을 찾아보면 된다

status code 종류

1xx (정보): 요청을 받았으며 프로세스를 계속한다

2xx (성공): 요청을 성공적으로 받았으며 인식했고 수용하였다

3xx (리다이렉션): 요청 완료를 위해 추가 작업 조치가 필요하다

4xx (클라이언트 오류): 요청의 문법이 잘못되었거나 요청을 처리할 수 없다

5xx (서버 오류): 서버가 명백히 유효한 요청에 대해 충족을 실패했다

페이지가 자동으로 연결 되었다면 BeautifulSoup 라이브러리를 이용하여 text들을 뽑아보자

BeautifulSoup

BeautifulSoup는 가져오고 싶은 페이지에서 원하는 html 태그를 가져올 수 있게 도와준다

import requests from bs4 import BeautifulSoup url = ‘https://m.blog.naver.com/blog_name/blog_page’ response = requests . get ( url ) if response . status_code == 200 : soup = BeautifulSoup ( response . text , ‘html.parser’ )

위처럼 요청한 페이지를 text의 형태로 만들 수 있다

그리고, 크롬(또는 엣지 브라우저)에서 정보를 가져오고 싶은 페이지에서 F12키를 누르면 개발자 도구가 나오는데 여기에 있는 인스펙터를 이용하면 태그를 쉽게 찾을 수 있다

1. 인스펙터 클릭

2. 확인할 텍스트 영역에 마우스 커서를 위치한다

3. 개발자 도구에서 tag를 확인한다

위 단계를 통해 보다 쉽게 코드를 찾을 수 있다.

코드 작성

이제 코드를 작성해 보자

import requests from bs4 import BeautifulSoup url = ‘https://m.blog.naver.com/blog_name/blog_page’ response = requests . get ( url ) if response . status_code == 200 : soup = BeautifulSoup ( response . text , ‘html.parser’ ) text = str ( soup . find ( id = ‘postViewArea’ ) ) print ( text . get_text ( ) . split ( ‘점심’ ) [ 3 ] . split ( ‘F3’ ) [ 0 ] ) else : print ( response . status_code )

get_text()를 통하여 텍스트 구문만 불러오기를 했더니 결과가 아래처럼 나와버렸다

차라리 html 코드영역을 통으로 뽑아내어 별도의 html을 만들어야겠다고 방향을 바꿨다

if response . status_code == 200 : soup = BeautifulSoup ( response . text , ‘html.parser’ ) text = str ( soup . find ( id = ‘postViewArea’ ) ) menu = text . split ( ‘점심‘ ) [ 1 ] . split ( ‘F3’ ) [ 0 ] print ( menu )

위와 같이 html 태그 덩어리를 잘라낸 다음에 새로운 html 파일에 집어 넣어 버리는 것이다

f = open ( ‘C:/menu.html’ , ‘w’ , encoding = ‘utf-8’ ) head = “ menu ” tail = “ ” bobpl_contents = [ head , menu , tail ] for i in bobpl_contents : f . write ( i ) f . close ( )

빈 html 파일을 만들어서 위처럼 본문 내용만 갈아끼워 작업하는 것이다.

코드를 돌리면 이렇게 html 파일이 만들어진다

bat 파일 만들기 및 작업지정

처음 이 것을 만들게 된 목적이 매일 알아서 메뉴를 업데이트 하는 것이었다

매번 .py 파일을 실행시키기엔 번거롭기 때문에, 이 파일을 실행시켜줄 bat 파일을 만들고 매일 알아서 동작을 시키게 만들 것이다.

bat(배치 파일)은 기록된 명령어를 실행시켜주는 파일이다.

아래는 DOS의 명령어인데 bat파일에도 동일하게 동작하는 구문이므로 참고

ECHO – 화면에 텍스트 출력

@ECHO OFF – 출력되는 텍스트 감추기

START – 기본 프로그램으로 파일 실행

REM – 프로그램에 글자 입력

MKDIR/RMDIR – 디렉토리를 생성하거나 삭제

DEL – 파일 삭제

COPY – 파일 복사

XCOPY – 추가 기능에 따라 파일 복사

FOR/IN/DO – 파일 지정.

TITLE- 현재 창 이름 편집.

이제 menu파일을 실행시키는 코드를 작성

@echo menu crawling… start cmd.exe /c “python C:/menu.py” @echo menu crawling complete PAUSE

이렇게 작성한 코드는 메모장에서 다른이름으로 저장하기를 통해 .bat 파일을 만들어 쓸 수 있다.

만들어둔 bat 파일을 실행하면 이렇게 잘 작동되는 것을 확인하였다.

이제 bat 파일을 원하는 시간에 돌려주는 작업이 남았는데, 작업 스케줄러를 통하여 특정 시간에 이 파일을 실행하도록 만들어 주었다.

윈도우즈의 [시작] 메뉴를 열어 ‘작업 스케줄러’를 검색하면 바로 앱을 찾을 수 있다

작업 스케줄러 내에서 [작업 만들기]를 통해 작업을 생성

일반 탭에서 작업의 이름과 설명을 기입할 수 있다

트리거 탭에서 작업이 시작하는 시간과 반복 주기를 설정할 수 있다.

새로 만들기를 통해 작업 트리거를 설정하였다

식당 블로그는 매일 3시마다 다음날 메뉴를 올리기 때문에 위 사진과 같이 세팅을 하였다

동작 탭으로 넘어가 실행할 파일을 설정하였다.

아까 만든 bat파일을 연결하여 파일을 시작하게 만들었다

이제 작업이 만들어졌으니 컴퓨터가 켜저있는 동안 이 작업이 수행될 것이다.

[2탄] 쉽게 따라하는 네이버 뉴스 크롤링(python)

“본 포스팅은 네이버 웹 크롤링 실제 python 코드를 작성하는 2탄입니다.

전 단계인 수행계획을 확인하고 싶으신 분들은 아래링크(1탄)을 참고해주세요 :)”

네이버 웹 페이지 구성이 바뀌어 내용, 코드 수정(2021.01.26)

지난 편에 이어 네이버 뉴스를 크롤링하는 python 코드를 작성하는 포스팅을 합니다.

지난 편은 네이버 뉴스 웹 구성 체계를 확인하여 원하는 정보(뉴스 기사 title, URL)의 위치를 확인하여 크롤링 계획을 수립하였고

본 편에서는 이를 python 코드로 작성하여 실제 수행해보려고 합니다.

서론

이에 앞서 지난 편을 간단히 정리하고 본 편에서 진행할 내용을 정리해봅니다.

<지난 편>

STEP 1. 소스 조사

제공 사이트 조사 제공 정보 조사 확보 가능 정보 확인

STEP 2. 웹 구성 체계 확인

HTML 구조 확인 제공 정보 확인 크롤링 가능 여부 확인

네이버 뉴스의 기사 URL의 형태 : https://search.naver.com/search.naver?where=news&sm=tab_jum&query=코로나 코로나를 키 위드로 검색 시

https://search.naver.com/search.naver?where=news&sm=tab_jum&query=코로나 네이버 뉴스 HTML 구성 (뉴스 title, URL을 찾을 시)

<본 편>

STEP 3. 크롤링 진행

parsing 방안 및 위치 확인 request 방법 확인 data 저장 형태 설계

STEP 4. 최종 데이터 생성

데이터 저장 형태 데이터 저장

이를 바탕으로 실제 수행하는 코드를 작성해보겠습니다

본론

STEP 3. 크롤링 진행

1. 필요 환경 및 패키지 설치

python 3 버전을 사용하였습니다.

requests, bs4, re, pandas 패키지를 사용하였습니다.

패키지 명 용도 requests 웹페이지 소스 추출(HTML) bs4 HTML 파싱, 필요 태그 및 소스 추출 re 조건부 문자열(정규 표현식), 태그 탐색 시 일반화 조건을 사용하기 위함 pandas 데이터 프레임, 엑셀 변환

2. 코드 작성

1. 패키지 importing

import requests from pandas import DataFrame from bs4 import BeautifulSoup import re from datetime import datetime import os

2. 현재 시간 저장

나중에 output으로 엑셀 저장 시 크롤링한 날짜, 시간을 파일명에 넣기 위해 저장하는 변수입니다.

date = str(datetime.now()) date = date[:date.rfind(‘:’)].replace(‘ ‘, ‘_’) date = date.replace(‘:’,’시’) + ‘분’

3. Input 생성

검색할 키워드, 추출할 뉴스 기사 수를 저장하는 변수입니다.

query에서 ‘ ‘ 를 ‘+’로 바꾸어주는 이유는 띄어쓰기 시 URL 조건 절에 ‘+’로 적용되어 요청 인자가 들어가기 때문입니다.

query = input(‘검색 키워드를 입력하세요 : ‘) query = query.replace(‘ ‘, ‘+’) news_num = int(input(‘총 필요한 뉴스기사 수를 입력해주세요(숫자만 입력) : ‘))

4. 요청할 URL 생성 및 요청

3번에서 받은 키워드(query)를 URL의 조건절 중 키워드에 해당하는 변수에 대응시켜 요청 URL을 만듭니다.

그리고 requests 패키지의 get함수를 이용하여 HTML 코드를 받아옵니다.

받은 코드를 bs4의 BeautifulSoup 함수를 이용하여 파싱합니다.

news_url = ‘https://search.naver.com/search.naver?where=news&sm=tab_jum&query={}’ req = requests.get(news_url.format(query)) soup = BeautifulSoup(req.text, ‘html.parser’)

받은 HTML 코드의 일부를 보면 다음과 같습니다.(req.text)

5. 원하는 정보를 담을 변수 생성(딕셔너리)

뉴스 기사 정보를 저장할 딕셔너리를 생성합니다. (key : 번호, value : 뉴스 기사 정보)

idx : 현재 뉴스의 번호

cur_page : 네이버 뉴스의 웹 페이지입니다. 추출하려는 기사 수가 현재 페이지에 있는 기사보다 많은 경우 다음 페이지로 넘어가야 하기 때문에 현 페이지 번호를 기억하도록 변수로 설정한 것입니다.

news_dict = {} idx = 0 cur_page = 1

6. parsing 한 HTML 코드에서 원하는 정보 탐색(뉴스 기사 title, URL)

idx(현재 뉴스 기사 번호)가 news_num(원하는 뉴스 기사 수) 보다 작은 동안 아래 코드를 실행합니다.

table : 뉴스 바운딩 박스(ul 태그)

li_list : 뉴스 바운딩 박스 안의 각 뉴스 기사(li 태그)

area_list : 뉴스 기사 안의 뉴스 제목, 본문이 담긴 태그(div 태그)

a_list : 각 뉴스기사 내부 title, URL 정보가 담긴 태그(a 태그)

news_dict : 뉴스 기사를 담는 딕셔너리 key : 뉴스 기사 번호 value : 뉴스 기사 title, url을 key로 하는 딕셔너리

next_page_url : 현재 수집한 뉴스 기사 수가 부족한 경우 다음 페이지로 넘어가야 하므로 다음 페이지에 해당하는 URL을 추출합니다. 형식은 div 태그이며 class 속성 값이 “sc_page_inner”입니다. 하위에 존재하는 a 태그 내부에 페이지 번호와, URL(href 속성 값) 정보가 있습니다. 위에서 언급한 cur_page 변수와 일치하는 페이지 번호의 URL을 가져옵니다.

print() print(‘크롤링 중…’) while idx < news_num: ### 네이버 뉴스 웹페이지 구성이 바뀌어 태그명, class 속성 값 등을 수정함(20210126) ### table = soup.find('ul',{'class' : 'list_news'}) li_list = table.find_all('li', {'id': re.compile('sp_nws.*')}) area_list = [li.find('div', {'class' : 'news_area'}) for li in li_list] a_list = [area.find('a', {'class' : 'news_tit'}) for area in area_list] for n in a_list[:min(len(a_list), news_num-idx)]: news_dict[idx] = {'title' : n.get('title'), 'url' : n.get('href') } idx += 1 cur_page += 1 pages = soup.find('div', {'class' : 'sc_page_inner'}) next_page_url = [p for p in pages.find_all('a') if p.text == str(cur_page)][0].get('href') req = requests.get('https://search.naver.com/search.naver' + next_page_url) soup = BeautifulSoup(req.text, 'html.parser') STEP 4. 최종 데이터 생성 7. 데이터 프레임 변환 및 저장 크롤링한 뉴스 정보가 담긴 딕셔너리(news_dict)를 데이터 프레임(news_df)으로 변환합니다. 그리고 크롤링한 키워드(query)와 크롤링 날짜(date)를 엑셀 파일 명으로 하여 저장합니다. 마지막으로 저장을 완료한 폴더를 띄웁니다. print('크롤링 완료') print('데이터프레임 변환') news_df = DataFrame(news_dict).T folder_path = os.getcwd() xlsx_file_name = '네이버뉴스_{}_{}.xlsx'.format(query, date) news_df.to_excel(xlsx_file_name) print('엑셀 저장 완료 | 경로 : {}\\{}'.format(folder_path, xlsx_file_name)) os.startfile(folder_path) 8. 결과물 결과물은 다음과 같습니다.(query : 코로나 강아지 산책, news_num : 17) 전체 코드 import requests from pandas import DataFrame from bs4 import BeautifulSoup import re from datetime import datetime import os date = str(datetime.now()) date = date[:date.rfind(':')].replace(' ', '_') date = date.replace(':','시') + '분' query = input('검색 키워드를 입력하세요 : ') news_num = int(input('총 필요한 뉴스기사 수를 입력해주세요(숫자만 입력) : ')) query = query.replace(' ', '+') news_url = 'https://search.naver.com/search.naver?where=news&sm=tab_jum&query={}' req = requests.get(news_url.format(query)) soup = BeautifulSoup(req.text, 'html.parser') news_dict = {} idx = 0 cur_page = 1 print() print('크롤링 중...') while idx < news_num: ### 네이버 뉴스 웹페이지 구성이 바뀌어 태그명, class 속성 값 등을 수정함(20210126) ### table = soup.find('ul',{'class' : 'list_news'}) li_list = table.find_all('li', {'id': re.compile('sp_nws.*')}) area_list = [li.find('div', {'class' : 'news_area'}) for li in li_list] a_list = [area.find('a', {'class' : 'news_tit'}) for area in area_list] for n in a_list[:min(len(a_list), news_num-idx)]: news_dict[idx] = {'title' : n.get('title'), 'url' : n.get('href') } idx += 1 cur_page += 1 pages = soup.find('div', {'class' : 'sc_page_inner'}) next_page_url = [p for p in pages.find_all('a') if p.text == str(cur_page)][0].get('href') req = requests.get('https://search.naver.com/search.naver' + next_page_url) soup = BeautifulSoup(req.text, 'html.parser') print('크롤링 완료') print('데이터프레임 변환') news_df = DataFrame(news_dict).T folder_path = os.getcwd() xlsx_file_name = '네이버뉴스_{}_{}.xlsx'.format(query, date) news_df.to_excel(xlsx_file_name) print('엑셀 저장 완료 | 경로 : {}\\{}'.format(folder_path, xlsx_file_name)) os.startfile(folder_path) 아쉬운 점 뉴스 본문까지 크롤링 가능하였다면 더 좋았을 것 같습니다. 추출한 뉴스 기사 URL로 다시 requests 요청을 보내고 받은 HTML 코드 내부에 기사 본문이 있기 때문에 현재 기술로는 충분히 가능합니다. 하지만, 각 언론사마다 웹페이지 구성이 다르기 때문에 본문의 정보를 담고 있는 태그의 위치와 이름 등이 상이하여 모든 언론사의 뉴스 본문 크롤링을 하기에는 더 많은 조사가 필요합니다. 만약 일부 언론사( ex. 매일 경제, 동아 일보, 중앙일보 )만 크롤링한다면 각 언론사 웹페이지 구성을 파악하고 본문의 위치를 확인한 후에 뉴스 크롤링 시 해당 언론사 URL만 남기고 본문 크롤링을 진행하면 될 것입니다. 마치며 최대한 이해가 쉽도록 주저리주저리 설명했는데.. 지루하게 느끼신 분들도 있을 것 같습니다. 긴 글 읽어주셔서 감사합니다. 피드백은 언제나 환영입니다~ ▼ 글이 도움이 되셨다면 아래 클릭 한번 부탁드립니다 🙂 ▼ 반응형

webcrawling (웹크롤링) 네이버 기사 (시간, 타이틀, 링크) 크롤링 ( find, find_all, attrs, a[“href”])

728×90

반응형

이번엔 여러 회사의 최신 뉴스를 검색해서 링크를 적는 일이 주어졌다

그래서 간단히 크롤링을 이용하여 만들어보았다. (첫 페이지만 끌어온다)

라이브러리

먼저 필요한 라이브러리를 불러온다

import requests from bs4 import BeautifulSoup

2개의 라이브러리 밖에 사용하지 않는다.

뉴스에 검색할 키워드 리스트에 담기

네이버 뉴스의 검색했을 때 url을 먼저 보겠다

url = https://search.naver.com/search.naver?query={검색 키워드}&where=news&ie=utf8&sm=nws_hty

이런 식으로 돼 있다. query=”검색 키워드” 라 반복문을 사용하여 여러 검색 키워드를 볼까 한다.

이번에는 [“삼성”, “sk하이닉스”, “토스”, “카카오”, “KT”, “KB국민은행” ] 이 정도의 회사로 해보겠다.

firms = [“삼성”, “sk하이닉스”, “토스”, “카카오”, “KT”, “KB국민은행”]

BeautifulSoup 만들기

주소를 가져와서 soup 객체를 만들어 보겠다.

url = f”https://search.naver.com/search.naver?query={firm}&where=news&ie=utf8&sm=nws_hty” res = requests.get(url) res.raise_for_status() soup = BeautifulSoup(res.text, “lxml”)

내가 원하는 뉴스타이틀의 HTML 코드의 class 명은 news_tit이다. 그리고 날짜의 class 명은 info이다.

타이틀 날짜 가져오기

바로 가져와보겠다.

soup_tit = soup.find_all(“a”, attrs={“class”: “news_tit”}) soup_info = soup.find_all(“span”, attrs={“class”: “info”})

보면 “a” , “span” 태그에 정보가 있다. 우린 find_all을 하면 “a” 태그 중에 class 명이 news_tit 인 모든 애들을 가져온다

즉, 하나하나의 정보를 얻기 위해선 반복문을 통해 분리해줘야 한다.

각각의 정보 분리 & 링크 가져오기

근데 불러올 때, 키워드가 뉴스 타이틀에 있을 때만 불러온다고 하자. 의미 없는 기사도 뜨기 때문이다.

zip이라는 함수를 써서 타이틀과 날짜를 동시에 분리한다.

링크는 a [“href”]를 사용하여 가져올 수 있다. 여러 개의 a 태그가 있을 땐 사용할 수 없음을 주의하자

코드를 보겠다.

for tit, info in zip(soup_tit, soup_info): if firm in tit.get_text(): print(f”{info.get_text()} {tit.get_text()} {tit[‘href’]}”)

이렇게 불러올 수 있다.

전체 코드와 출력

import requests from bs4 import BeautifulSoup firms = [“삼성”, “sk하이닉스”, “토스”, “카카오”, “KT”, “KB국민은행”] for firm in firms: url = f”https://search.naver.com/search.naver?query={firm}&where=news&ie=utf8&sm=nws_hty” res = requests.get(url) res.raise_for_status() soup = BeautifulSoup(res.text, “lxml”) soup_tit = soup.find_all(“a”, attrs={“class”: “news_tit”}) soup_info = soup.find_all(“span”, attrs={“class”: “info”}) print(f”{firm} 기사”) for tit, info in zip(soup_tit, soup_info): if firm in tit.get_text(): print(f”{info.get_text()} {tit.get_text()} {tit[‘href’]}”) print(“”) 출력 삼성 기사 3시간 전 1위 소니 잡는다…삼성 이미지센서, 글로벌 완성차에 탑재 ht.hankyung.com/ec02107136384i 3시간 전 ‘승부 조작’ 혐의 윤성환 전 삼성 투수, 첫 재판서 “공소사실 인정” http://www.ne 3시간 전 삼성전자, 비스포크 무풍에어컨 ‘미키 에디션’ 출시 https://www.e.co.kr/news/vie/2043914 1일 전 삼성전자, ‘제5회 삼성보안기술포럼’ 참가 접수 http://news.o.kr/read/eco74410.htm 24면 1단 삼성물산, 건설현장 안전관리 투자 늘린다 http://www.fnnews.com/news/20210712120098092 20시간 전 SK하이닉스 ‘4세대 D램’ 세계 첫 양산…삼성전자·마이크론과 3파전 h/news.mk.cad.php?n A17면 TOP 삼성의 OTT 진출 서막?…TV플러스, 삼성TV·폰 없이 누구나 본다 httpschos201&pID=10200 1일 전 삼성전자 비스포크 무풍에어컨 ‘미키 에디션’ 출시 http://yna.kr/AKR2021071500003?did=1195m 19시간 전 삼성전자, 사각지대 최소화하는 차량용 이미지센서 출시 https://daily.hank/lge/ittech/202

이런식으로 나온다는 것만 보여주기 위해 링크와 각각의 회사는 너무 길어 일정 부분 지웠다.

근데 보면 시간이 나오는 부분에서 “24면 1단” 이런 식으로 나온다. 이건 시간 태그 앞에 있는 태그라 그렇다. 정확하게 하고 싶다면 다시 태그를 찾아보면 된다. 조건문을 사용해서 해도 될 거 같다.

이상으로 마친다

반응형

소소한 일상 및 업무TIP 다루기 :: [크롤링기초] 네이버 쇼핑 정보 가져오기

728×90

네이버 쇼핑 사이트 정보를 스크래핑하는 방법에 대한 예제이다.

먼저 스크래핑할 URL 정보를 입력한 후 크롬 브라우저에서 F12키를 눌러서 html 소스보기를 해서 분석할 대상을 찾는다.

1번을 누르고 마우스로 대상을 찾아 원하는 구조를 파악한다.

마우스 우클릭으로 Copy Selector를 하면….

#productListArea > ul > li:nth-child(1) > div.price > strong > span.num 를 반환해 준다.

여기서 우리는 #productListArea > ul > li > div.info > span > a.txt 가 필요한 것이라는 알아낼 수 있다.

이와 같은 방법으로 도출할 항목을 찾아낸다.

파이썬 코드

# BeautifulSoup은 HTML 과 XML 파일로부터 데이터를 수집하는 라이브러리 # pip install bs4 # pip install requests # pip install fake-useragent import requests import re from fake_useragent import UserAgent from bs4 import BeautifulSoup import csv # 파싱할 대상 Web URL url = “https://search.shopping.naver.com/best100v2/detail.nhn?catId=50004603” # 크롬브라우저가 실행하는 것처럼 속이기 headers = { ‘User-Agent’ : UserAgent().chrome } res = requests.get(url, headers = headers) res.raise_for_status() soup = BeautifulSoup(res.content, ‘html.parser’ ) # print(soup) # 스크래핑하고자 하는 전체 데이터를 선택 # items = soup.find_all(“li”, attrs={“class”:re.compile(“^^_itemSection”)}) items = soup.select( ‘#productListArea > ul > li’ ) # print(items) shopItemList = [] # 리스트 생성 for item in items: temp = [] # name = item.find(‘a’)[‘title’]#제품명 name = item.select_one( ‘#productListArea > ul > li > div.thumb_area > a’ )[ ‘title’ ] # price = item.find(‘span’, attrs = {‘class’:’num’}).get_text() + ‘원’ #가격 price = item.select_one( ‘#productListArea > ul > li > div.price > strong > span.num’ ).text + ‘원’ # link = item.find(‘div’, attrs={‘class’:’thumb_area’}).find(‘a’)[‘href’] #링크 link = item.select_one( ‘#productListArea > ul > li > div.thumb_area > a’ )[ ‘href’ ] # review_count = item.find(‘span’,attrs = {‘class’:’mall’}).find(’em’).text #리뷰수 review_count = item.select_one( ‘#productListArea > ul > li > div.info > span > a.txt > em’ ).text # print(review_count) review_count = review_count[ 1 : – 1 ] temp.append(name) temp.append(price) temp.append(review_count) temp.append(link) shopItemList.append(temp) # print(shopItemList) with open ( ‘shopItemList.csv’ , “w” , encoding = “utf-8” , newline = “” ) as f: writer = csv.writer(f) writer.writerow([ ‘품명’ , ‘가격’ , ‘리뷰수’ , ‘링크’ ]) writer.writerows(shopItemList) print ( ‘CSV File created!’ ) f. close

crawling_12.py 0.00MB

자료출처 : https://smorning.tistory.com/331 에 나온 코드를 가지고 실제 동작 여부를 확인해보면서 제대로 동작됨을 확인했다.

동영상 강좌를 들어가면서 실습해보는데 동영상 강좌에 나온 사이트 태그 구조 등을 변경해서 동작이 안되기도 해서 제대로 동작되는 코드를 찾아서 테스트 하면서 기능을 익히는 중이다.

엑셀로 저장하는 코드

# BeautifulSoup은 HTML 과 XML 파일로부터 데이터를 수집하는 라이브러리 # pip install bs4 # pip install requests # pip install fake-useragent # pip install xlsxwriter import requests import re from fake_useragent import UserAgent from bs4 import BeautifulSoup # 엑셀 처리 임포트 import xlsxwriter # Excel 처리 선언 savePath = “c:/Users/zx/Documents/Python/” # workbook = xlsxwriter.Workbook(savePath + ‘shopItemList.xlsx’) workbook = xlsxwriter.Workbook( ‘shopItemList.xlsx’ ) # 워크 시트 worksheet = workbook.add_worksheet() # 파싱할 대상 Web URL url = “https://search.shopping.naver.com/best100v2/detail.nhn?catId=50004603” # 크롬브라우저가 실행하는 것처럼 속이기 headers = { ‘User-Agent’ : UserAgent().chrome } res = requests.get(url, headers = headers) res.raise_for_status() soup = BeautifulSoup(res.content, ‘html.parser’ ) # print(soup) # 엑셀 행 수 excel_row = 1 worksheet.set_column( ‘A:A’ , 40 ) # A 열의 너비를 40으로 설정 worksheet.set_row( 0 , 18 ) # A열의 높이를 18로 설정 worksheet.set_column( ‘B:B’ , 12 ) # B 열의 너비를 12로 설정 worksheet.set_column( ‘C:C’ , 12 ) # C 열의 너비를 12로 설정 worksheet.set_column( ‘D:D’ , 60 ) # D 열의 너비를 60으로 설정 worksheet.write( 0 , 0 , ‘제품명’ ) worksheet.write( 0 , 1 , ‘가격’ ) worksheet.write( 0 , 2 , ‘리뷰수’ ) worksheet.write( 0 , 3 , ‘링크’ ) # 스크래핑하고자 하는 전체 데이터를 선택 # items = soup.find_all(“li”, attrs={“class”:re.compile(“^^_itemSection”)}) items = soup.select( ‘#productListArea > ul > li’ ) # print(items) shopItemList = [] # 리스트 생성 for item in items: # name = item.find(‘a’)[‘title’]#제품명 name = item.select_one( ‘#productListArea > ul > li > div.thumb_area > a’ ).get( ‘title’ ) # price = item.find(‘span’, attrs = {‘class’:’num’}).get_text() + ‘원’ #가격 price = item.select_one( ‘#productListArea > ul > li > div.price > strong > span.num’ ).text + ‘원’ # link = item.find(‘div’, attrs={‘class’:’thumb_area’}).find(‘a’)[‘href’] #링크 link = item.select_one( ‘#productListArea > ul > li > div.thumb_area > a’ ).get( ‘href’ ) # review_count = item.find(‘span’,attrs = {‘class’:’mall’}).find(’em’).text #리뷰수 review_count = item.select_one( ‘#productListArea > ul > li > div.info > span > a.txt > em’ ).text # print(review_count) review_count = review_count[ 1 : – 1 ] # 엑셀 저장(텍스트) worksheet.write(excel_row, 0 , name) worksheet.write(excel_row, 1 , price) worksheet.write(excel_row, 2 , review_count) worksheet.write(excel_row, 3 , link) # 엑셀 행 증가 excel_row + = 1 # 엑셀 파일 닫기 workbook. close () # 저장

테스트 샘플 코드

crawling_13.py 0.00MB

[BeautifulSoup] #4 네이버 뉴스 크롤링하기

반응형

오늘은 지난번에 알아본 find 함수를 직접 활용하여 네이버 뉴스 크롤링 예제를 진행해보겠습니다.

아마 뉴스나 주식 같이 특정 정보가 필요할 때 크롤링을 많이 하다 보니 직접 간단하게라도 경험해보는 게 도움이 되지 않을까 싶어 준비했습니다.

네이버 뉴스 크롤링하기

본격적으로 네이버 뉴스를 크롤링하기 전에, 네이버 뉴스의 특성에 관해 알아볼 필요가 있습니다.

현재 네이버 뉴스는 크게 두 가지 형태로 제공되는데요, 첫 번째는 연합뉴스 속보 페이지, 두 번째는 뉴스홈 페이지(언론사별)입니다.

연합뉴스 속보 페이지(좌), 뉴스홈 페이지(우)

오늘 연습해볼 내용은 연합뉴스 속보 페이지입니다. 뉴스홈 페이지는 최근에 리뉴얼되면서 생겼는데요, 모바일에 초점을 맞춰 반응형 웹으로 만들어져 있습니다. 여기는 좀 크롤링하기 복잡할 것 같아 쉬운 내용부터 진행하고, 나중에 기회가 된다면 다뤄보도록 하겠습니다.

크롤링을 하기 위해서는 먼저 웹사이트 분석이 필요합니다. 내가 필요한 정보가 어디에 있는지 파악하는 과정입니다.

키보드 F12 버튼을 클릭하게 되면 웹사이트의 코드를 볼 수 있습니다. 마우스를 올리면 어떤 태그가 어떤 내용을 포함하고 있는지 색상 표시로 알 수 있습니다.

참고로 저는 크롬 기준으로 작업하고 있는데, 파이어폭스, 엣지 등에서도 모두 지원하는 기능이므로 똑같이 따라 하시면 됩니다.

class가 list_body newsflash_body인 div 태그 영역 (파란색 부분)

위와 같이 파란색 영역을 살펴보면서 본인이 필요한 정보가 담긴 태그를 찾으면 됩니다.

div 태그에서 수평선 윗부분 뉴스 내용을 찾아보니, 아래와 같이 dl 태그 내에 포함되어 있는 것을 확인할 수 있습니다. 더 자세히 살펴보면 dt태그와 dd 태그 첫 부분에 이미지를 포함한 큰 뉴스 내용이 담겨 있고, dd 태그 뒷부분에 나머지 내용이 담겨 있다는 것을 확인할 수 있습니다.

class가 type04인 dl 태그 영역 (파란색 부분)

어떤 태그에 내용이 있는지 알았으니 이제 지난번에 배운 find 함수를 사용하여 쉽게 크롤링할 수 있습니다. 세세하게 특정 정보를 크롤링하려는 목적이 아니므로 간단하게 dl 태그를 통째로 찾도록 해보겠습니다. 태그 내 텍스트 전체를 가져오도록 다음과 같이 코드를 작성하였습니다.

beautifulSoup.find(“dl”, attrs={“class”:”type04″}).get_text()

이번에는 수평선 아래쪽 내용도 크롤링해봅시다. 아까와 같이 어떤 태그에 내용이 있는지 찾아가면 되는데요, 위와는 조금 다른 구조로 되어 있는 것을 확인할 수 있습니다.

이번에는 ul 태그 내에 내용이 있습니다. 내부에 li 태그가 있고, 그 아래에 제목, 언론사, 날짜 등 정보를 담은 태그를 확인할 수 있습니다.

class가 type02인 ul 태그 영역 (파란색 부분)

마찬가지로 간단하게 ul 태그만 가져오고, 그 안에서 텍스트 전체를 크롤링하려면 다음과 같이 코드를 작성할 수 있습니다.

beautifulSoup.find(“ul”, attrs={“class”:”type02″}).get_text()

자 그럼 이렇게 실행하면 잘 동작할까요? 원래는 잘 동작해야 하는데, 아래와 같이 이상한 오류가 발생하는 경우도 있습니다. 이 경우는 지난번 포스팅에서 다루었던 request 오류입니다.

request 오류 메시지

해당 내용은 아래 링크를 참고하시기 바랍니다.

https://homubee.tistory.com/19

이렇게 완성된 전체 코드는 다음과 같습니다.

import requests from bs4 import BeautifulSoup 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″} # main if __name__ == “__main__”: inputURL = “https://news.naver.com/main/list.naver?mode=LPOD&mid=sec&sid1=001&sid2=140&oid=001&isYeonhapFlash=Y” response = requests.get(inputURL, headers=headers) beautifulSoup = BeautifulSoup(response.content, “html.parser”) print(beautifulSoup.title.string) print(beautifulSoup.find(“dl”, attrs={“class”:”type04″}).get_text()) print(beautifulSoup.find(“ul”, attrs={“class”:”type02″}).get_text())

아래와 같이 내용이 잘 출력되는 것을 확인할 수 있습니다.

dl 태그 크롤링 결과 ul 태그 크롤링 결과

중간중간 줄바뀜이나 공백이 이상하게 출력되는 경우가 있는데, 이는 원래 텍스트 내용이 그런 것이므로 문제가 있는 것은 아닙니다. 다만, 실제로 이 데이터를 사용하려면 본인이 원하는 형태로 가공하는 과정이 필요할 것입니다.

일단 오늘은 간단하게 find 함수를 활용하는 예제이므로 그렇게 세세한 내용까지 다루지는 않겠습니다.

지난번 배운 find 함수를 활용하여 네이버 뉴스 크롤링을 해보았습니다. 아마 코드 몇 줄로 쭉쭉 크롤링이 되어서 놀라셨을 것도 같습니다.

사실 직접 복사 붙여넣기 해가면서 하기에는 너무 귀찮은 일입니다. 저도 웹 크롤링을 알기 전에는 일일이 복사 붙여넣기 하면서 작업한 경험이 있는데, 지금 다시 생각해보면 너무 시간이 아깝고 힘들었습니다. 파이썬은 언어도 쉽고 크롤링도 어렵지 않으니, 이런 작업은 꼭 공부해서 자동화를 시도해보시기 바랍니다.

직접 조사해서 작성하는 글이다 보니 일부 정확하지 않은 정보가 포함되어 있을 수 있습니다.

궁금한 사항이나 잘못된 내용이 있으면 댓글로 알려주세요~

구독과 좋아요, 환영합니다!

반응형

Python 웹크롤링 (Web Crawling) 01. 네이버 검색결과 크롤러 만들기(1)

반응형

웹 크롤링이 갑자기 해보고싶어서 할거다

웹 크롤링이란 ?

-WEB 상에 존재하는 콘텐츠들은 수집하는 작업

오늘은 네이버에 검색하면 블로그 검색 결과를 출력하는 크롤러를 만들어 볼것이다

참고는 ‘프로그래머 김플 스튜디오’ 님 영상

처음이니까 구체적으로 쓸거임 !

1. url 호출 및 html 결과 출력하기

#네이버 검색결과 크롤러 만들기 import urllib.request from bs4 import BeautifulSoup url = ‘https://search.naver.com/search.naver?where=post&sm=tab_jum&query=%ED%8C%8C%EC%9D%B4%EC%8D%AC’ html = urllib.request.urlopen(url).read() soup = BeautifulSoup(html,’html.parser’) print(soup)

우선 import 된 친구들에 대해서 알아보자

(1) urllib

urllib is a package that collects several modules for working with URLs

(URL로 동작하는 몇개의 모듈을 수집하는 패키지 , 클릭시 urllib 에 대한 설명으로 이동)

urllib.request : for opening and reading URLs (URL을 읽어오는 모듈이다)

(2)BeautifulSoup

Beautiful Soup is a Python library for pulling data out of HTML and XML files.

(BeautifulSoup은 HTML 과 XML 파일로부터 데이터를 수집하는 라이브러리)

html 의 내용을 전달받아 html.parser 를 이용해 파싱한다

url 에는 파싱할 url 값을 넣고

html 은 urllib를 이용해 url을 가져와 html 값을 저장한다 (이때 html 은 우리가 읽어도 이해할수없는 형식으로 가져와짐)

soup 을 이용해 파싱을 하면 비로소 우리가 이해할 수 있는 형태로 읽어와 지는거다

중간 값을 확인해보기 위해 print 로 찍어보면

urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1056)

이런 에러가 난다

이게 뭔가 했더니 불러들인 url 이 https 형태여서 생기는 오류라고 한다

해결을 위해

import ssl context = ssl._create_unverified_context()

이 문장을 넣어준다

전체 소스는

import urllib.request from bs4 import BeautifulSoup import ssl context = ssl._create_unverified_context() url = ‘https://search.naver.com/search.naver?where=post&sm=tab_jum&query=%ED%8C%8C%EC%9D%B4%EC%8D%AC’ html = urllib.request.urlopen(url,context=context).read() soup = BeautifulSoup(html,’html.parser’) print(soup)

이렇게 된다 html 부분에 context=context 를 추가해준다

이렇게 하면 네이버 검색창에 파이썬을 검색했을때 블로그 결과창의 html 이 나온다

대충 이렇게 엄청 긴게 나옴 이러면 잘 된거다

잘 불러들여진걸 확인했으니 다음으로 넘어가자

html 분석하기

html 을 분석하기 위해선 개발자 도구를 켜야하는데 mac 에서 chrome 은 option+command+i 를 누르면 된다 (윈도우는 f11 일걸요)

다음에 왼쪽 위의 빨간 동그라미 친걸 누르고 웹에서 내가 찾고싶은 html 부분을 클릭하면

내가 원하는 곳에 마우스를 올려보자

그럼 내가 원하는 태그와 그 안의 속성들을 확인할 수 있다

분석결과 모두 게시글의 제목은 모두 a 태그안에 sh_blog_title 이 클래스로 지정이 되어있다

import urllib.request from bs4 import BeautifulSoup import ssl context = ssl._create_unverified_context() url = ‘https://search.naver.com/search.naver?where=post&sm=tab_jum&query=%ED%8C%8C%EC%9D%B4%EC%8D%AC’ html = urllib.request.urlopen(url,context=context).read() soup = BeautifulSoup(html,’html.parser’) title = soup.find_all(class_=’sh_blog_title’) print(title)

class 는 원래 파이썬에서 사용하는 예약어이기 때문에 class 뒤에 _를 써준다

전체 html 안에서 클래스에 sh_blog_title 이라는 걸 가진 애들은 title 에 넣어준다는 의미

find 는 하나만 찾는거고 find_all 은 다 찾는거다

출력을 해보면

결과물중 한 줄

여기서 우리가 필요한건 href 와 title 부분이다

전체 소스와 결과

이제 for 문을 이용해 제목과 url 을 뽑아보자

네이버는 한 화면에 10개의 블로그를 보여주기 때문에 결과물이 10 개가 나오게 된다

print(i.attrs[‘title’])

여기서 attrs 는 속성값을 말한다 class가 sh_blog_title 인것 중에서 속성값이 title , href 인것들을 뽑아내기

그럼 이렇게 결과물이 나온다

다음번 게시물에서는 고정된 url 이 아니라 콘솔에서 입력 -> 네이버 검색 결과 출력 을 해보려고 하는데

예상 : 입력을 받는다 -> url 맨뒤에 qurey = ” 에 입력값을 붙여준다

그럼 되지않을까 ?

반응형

키워드에 대한 정보 네이버 크롤링

다음은 Bing에서 네이버 크롤링 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 30만원 짜리 외주 프로그램 만들기 – 파이썬으로 네이버 쇼핑 크롤링하기 1편 (ft. 셀레니움 selenium)

  • 셀레니움
  • 파이썬 셀레니움
  • 파이썬 selenium
  • selenium
  • python selenium
  • 네이버 쇼핑 크롤링
  • 쇼핑 크롤링
  • 크롤링
  • 파이썬 크롤링
  • 파이썬 셀레니움 크롤링
  • 스타트코딩
  • 스타트코딩크롤링
  • 웹 크롤링
  • 웹 스크래핑
  • 웹크롤링
  • 크롤러
  • 완전 쉽게 파이썬으로 텍스트 및 이미지 크롤링하기 | 수익형 웹
  • 앱 만들기 1강
  • 파이썬 셀레니움 이미지 크롤링으로 배우는 업무 자동화의 기초
  • 파이썬 코딩 무료 강의 (활용편3) – 웹 크롤링? 웹 스크래핑! 제가 가진 모든 비법을 알려드리겠습니다.

30만원 #짜리 #외주 #프로그램 #만들기 #- #파이썬으로 #네이버 #쇼핑 #크롤링하기 #1편 #(ft. #셀레니움 #selenium)


YouTube에서 네이버 크롤링 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 30만원 짜리 외주 프로그램 만들기 – 파이썬으로 네이버 쇼핑 크롤링하기 1편 (ft. 셀레니움 selenium) | 네이버 크롤링, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

Leave a Comment