10번째 페이지부터 크롤링되지 않는 것은 방금 확인해본 결과 해당 페이지 서버쪽에 크롤링 탐지 정책이 새로 생겼습니다.
쉽게 말씀드리면 너무 빨리 크롤링해서 10페이지부터 막아버리는 겁니다. time.sleep(0.1)~ time.sleep(0.5) 까지 테스트 해본 결과 time.sleep(0.5)초 정도 부여하니 정상적으로 작동 하였습니다. 아래는 time.sleep(0.5)가 적용된 코드입니다.
import requests from bs4 import BeautifulSoup import pyautogui import time keyword = pyautogui.prompt("검색어를 입력하세요") lastpage = pyautogui.prompt("마지막 페이지번호를 입력하세요") pageNum = 1 # 10페이지 까지 가져와보자 for i in range(1, int(lastpage)*10, 10): print(f"{pageNum}번째 페이지 입니다=================") print(i) response = requests.get(f"search.naver.com/search.naver?where=news&sm=tab_jum&query={keyword}&start={i}") print(response.url) html = response.text soup = BeautifulSoup(html, 'html.parser') links = soup.select('.news_tit') # 결과는 리스트 for link in links: title = link.text # 태그 안에 있는 모든 글자 url = link.attrs['href'] # href의 속성값 print(title, url) pageNum = pageNum + 1 time.sleep(0.5)
@@startcoding.official 우와 세상에 빠른 답변 감사합니다 ㅠㅠ 아~~ 생각해 보니 1,2,3 페이지를 각각 1,11,21로 표현하고 있으니, 사용자가 3페이지를 원하면 10을 곱하는게 맞겠군요! 어제는 졸려서 머리가 안돌아갔나봐요 ㅋㅋ 그런데.. 왜 html에서는 직관적인 1,2,3페이지 대신 1,11,21같은 불편한..? 숫자를 사용하는건가요..?ㅠㅠ 비전공자라 아주 유아스러운 추가 질문 드려 봅니다 ㅠㅠ
안녕하세요. 아래에서 send_text 함수로 리스트에 있는 검색어로 텔레그램 메시지를 보내는걸 만들고 있는데 왜 마지막 부동산 것만 메시지 수신이 될까요? queries = ["소녀시대","블랙핑크","부동산"] for query in queries: bot.sendMessage(chat_id = chat_id, text=f"{query}의 크롤링이 시작되었습니다.") old_text = [] job = schedule.every(3).seconds.do(send_text) while True: schedule.run_pending() time.sleep(1)
감사합니다. 진짜 알아듣기 쉽게 강의하시는 것 같아요~!
열심히 들어주셔서 감사합니다 :)
많은 도움이 되었습니다.
오늘도 좋은 영상 진심으로 감사드립니다.
캬 잘보고 갑니다
올라오는 강의들 다 보고잇습니당!
오옷! 감사합니당!
부족한 점은 없는 지요!!
@@startcoding.official 제가 부족한 것 빼고는 아직 없네요 :) 강의가 넘 좋아욥
영상강의 잘 보고 있습니다. 감사합니다.
감사합니다 전명동님~! 궁금하신 내용이 있다면 언제든 말씀해 주세요 :)
본 강의중에 가장 명쾌한 것 같아요! 감사히 잘 보고갑니다!
감사합니다 수민님!!
앞으로도 쭉 함께 공부해요ㅎㅎ
잘보고있어요
강의도 재밌구요 ㅎㅎㅎ
감사합니다~! MM님
열공 할 수 있도록
꾸준히 좋은 강의 많이 만들겠습니다 ^^
너무 감사합니다. 영상도 필요합니다.
구독자 이벤트는 아쉽게도 기한이 종료 되었습니다ㅠㅠ 강의 오픈 준비중인데 조만간 소식 전해 드리겠습니다!!
@@startcoding.official 형님 본문 크롤링이 필요합니다. 행님
대박이당
ㅋㅋㅋ 감사합니다
좋아요 누르고 시작하는 어려운 것을 쉽게 알려주는 스타트코딩님 현재는 작년보다 URL이 짧아졌네요.
안녕하세요 정말 잘 배우고 있습니다. 크롤링 한 해당 뉴스 기사제목을 단어 빈도수 대로 추출하는 법만 좀 알 수 있을까요? 유료 강의라면 어디에 있는지라도 좀 알려주시면 정말 감사하겠습니다
안녕하세요!
뉴스기사제목1
뉴스기사제목2
뉴스기사제목3
제목 여러 개를 하나로 합친다음
그 안에서 가장 많이 나온 단어를 추출하고 싶다는 말씀인가요??ㅎㅎ
@@startcoding.official 답글이 너무 늦었네요 죄송합니다 ㅜㅜ 예 맞습니다! 요즘 사이트에서 막아놓은건지 응용해서 하면 30개씩밖에 안 되더라고요..!
kkj6369@nate.com 메일로 코드 보내주시면 제가 시간될때 확인해 보겠습니다 ㅎㅎ
인프런 강의에 관심 있습니다. 현재 네이버 뉴스에 다양한 언론사들이 있어서 해당 html 본문 태그들이 다른데 다른 언론사 뉴스의 본문까지 전부 크롤링 가능한가요?
네! ㅎㅎ 다양한 언론사 모두 네이버 뉴스에 등록이 되어있기에 네이버 뉴스만 크롤링하면 다른 언론사들도 다 가지고 올 수 있습니다!
@@startcoding.official 감사합니다. 하나만 더 질문드릴게요! 구글은 셀레니움으로만 크롤링이 가능한 것 같던데 구글 검색어 내용관련해서 크롤링 강의 예정 있으신가요? 구글은 일정 트래픽이 초과되니까 제 아이피를 막더라구요. 셀레니움으로 긁어도..
서버에서 아이피를 막는 것은 어쩔 수 없습니다... ㅠ 아이피를 여러개 써야하는데 번거롭죠.
차단을 당하지 않을 만큼만 크롤링하는 것을 권장드립니다.
웹브라우저에 보이는 뉴스 순서와
파이썬으로 크롤링한 뉴스 순서는 조금 다를 수 있습니다.
10번째 페이지부터 크롤링되지 않는 것은 방금 확인해본 결과
해당 페이지 서버쪽에 크롤링 탐지 정책이 새로 생겼습니다.
쉽게 말씀드리면 너무 빨리 크롤링해서 10페이지부터 막아버리는 겁니다.
time.sleep(0.1)~ time.sleep(0.5) 까지 테스트 해본 결과
time.sleep(0.5)초 정도 부여하니 정상적으로 작동 하였습니다.
아래는 time.sleep(0.5)가 적용된 코드입니다.
import requests
from bs4 import BeautifulSoup
import pyautogui
import time
keyword = pyautogui.prompt("검색어를 입력하세요")
lastpage = pyautogui.prompt("마지막 페이지번호를 입력하세요")
pageNum = 1
# 10페이지 까지 가져와보자
for i in range(1, int(lastpage)*10, 10):
print(f"{pageNum}번째 페이지 입니다=================")
print(i)
response = requests.get(f"search.naver.com/search.naver?where=news&sm=tab_jum&query={keyword}&start={i}")
print(response.url)
html = response.text
soup = BeautifulSoup(html, 'html.parser')
links = soup.select('.news_tit') # 결과는 리스트
for link in links:
title = link.text # 태그 안에 있는 모든 글자
url = link.attrs['href'] # href의 속성값
print(title, url)
pageNum = pageNum + 1
time.sleep(0.5)
사이트가 업데이트되어 강의예제를 따라하기 힘들 수 있습니다!
아래 최신 영상에서는 크롤링을 업데이트에 대한 걱정없이 학습하실 수 있을겁니다 :)
최신 크롤링 유튜브 영상
ruclips.net/video/Uf21RUo3KNc/видео.html
안녕하세요! lastpage 에 10을 곱하는 이유가 무엇인가요...?
range 함수의 사용법을 좀 더 공부해 보세요ㅎㅎ
range(시작, 끝, 단계)입니다.
단계가 10이니 lastpage * 10 으로 끝을 만들어 주는 거예요.
@@startcoding.official 우와 세상에 빠른 답변 감사합니다 ㅠㅠ 아~~ 생각해 보니 1,2,3 페이지를 각각 1,11,21로 표현하고 있으니, 사용자가 3페이지를 원하면 10을 곱하는게 맞겠군요! 어제는 졸려서 머리가 안돌아갔나봐요 ㅋㅋ
그런데.. 왜 html에서는 직관적인 1,2,3페이지 대신 1,11,21같은 불편한..? 숫자를 사용하는건가요..?ㅠㅠ 비전공자라 아주 유아스러운 추가 질문 드려 봅니다 ㅠㅠ
@@jjoon0630 네이버 뉴스에서 서버 개발을 할 때 페이지 데이터를 1,2,3이 아닌 1,11,21을 사용했기 때문이에요ㅎㅎ
다른 페이지들은 대부분 1,2,3으로 되어 있습니다. 네이버 뉴스가 조금 특이하다고 보시면 돼요.
@@startcoding.official 감사합니다! 앞으로도 많은 영상 부탁 드립니다!
네이버 뉴스에 페이지 버튼이 삭제됐네요 ㅠㅠ
예제 사이트가 업데이트 되는게 불편해서
자체 크롤링 연습사이트를 만들었습니다.
3월 18일에 업로드 되는
완전 새로운 웹크롤링 강의를 기대해 주세요 :)
@@startcoding.official 감사합니다
안녕하세요.
아래에서 send_text 함수로 리스트에 있는 검색어로 텔레그램 메시지를 보내는걸 만들고 있는데
왜 마지막 부동산 것만 메시지 수신이 될까요?
queries = ["소녀시대","블랙핑크","부동산"]
for query in queries:
bot.sendMessage(chat_id = chat_id, text=f"{query}의 크롤링이 시작되었습니다.")
old_text = []
job = schedule.every(3).seconds.do(send_text)
while True:
schedule.run_pending()
time.sleep(1)
신문사는 어떻게 스크래핑 할 수 있나요? .news_tit 안에 신문사 태그가 없어서 같이 스크래핑 못하는 것 같은데요!
해결 방법을 도저히 모르겠네요!