반응형

1. 뉴스데이터 수집하기

  - 네이버 뉴스의 제목과 링크 가져오기

뉴스검색

개발자도구(F12)를 열어서 제목에 해당하는 태그 확인

태그 내 별명( id또는  class) 확인

ctrl+F 눌러서 해당 클래스명 검색 (10건 조회됨을 확인)

id 검색시 #별명 , class검색시 .별명

소스작성(설명은 주석참고)

import requests
from bs4 import BeautifulSoup


#검색한 화면의 url복사해서 붙여넣기
response = requests.get("https://search.naver.com/search.naver?where=news&sm=tab_jum&query=%EC%82%BC%EC%84%B1%EC%A0%84%EC%9E%90")
#응답값을 텍스트로 추출
html =response.text
#text형태의 html로 원하는 값만 검색
soup = BeautifulSoup(html, 'html.parser')
#결과가 리스트로 조회됨_select(css 별명)
links = soup.select(".news_tit")
#여러 기사의 제목과 링크를 출력
for link in links:
    title = link.text #태그안에 텍스트요소 가져옴
    url = link.attrs['href'] #href의 속성값을 가져옴
    print(title, url)

결과

 

[과제]

Q1) 검색어 입력받아서 해당검색어로 크롤링

  - 검색어 변경하기

import requests
from bs4 import BeautifulSoup

keyword = input("검색어를 입력하세요>>>")
#검색한 화면의 url복사해서 붙여넣기
#해당 url에서 query="값" 에서 값부분을 입력받게 변경하기
response = requests.get("https://search.naver.com/search.naver?where=news&sm=tab_jum&query="+ keyword)
#응답값을 텍스트로 추출
html =response.text
#text형태의 html로 원하는 값만 검색
soup = BeautifulSoup(html, 'html.parser')g
#결과가 리스트로 조회됨_select(css 속성)
links = soup.select(".news_tit")
#여러 기사의 제목과 링크를 출력
for link in links:
    title = link.text #태그안에 텍스트요소 가져옴
    url = link.attrs['href'] #href의 속성값을 가져옴
    print(title, url)

command창에 keyword를 "현대차"차고 입력 후 enter

  - 참고 : pyautogui로 간단한 입력팝업창 띄워보기

            pyautogui  라이브러리 : 마우스와 키보드 제어    

 

pyautogui 설치 : pip install pyautogui

......

warning났다......업데이트 명령어 실패하여

삭제 후 재 설치했더니....잘됨 오잉? 성공!

설치완료 후 import하고 사용하기

import requests
from bs4 import BeautifulSoup
import pyautogui

keyword = pyautogui.prompt("검색어를 입력하세요.")
#검색한 화면의 url복사해서 붙여넣기
#해당 url에서 query="값" 에서 값부분을 입력받게 변경하기
#f-문자열(string) 포맷팅 - 문자열앞에 f , 변수가 들어가는 부분 {}
response = requests.get(f"https://search.naver.com/search.naver?where=news&sm=tab_jum&query={keyword}")
#응답값을 텍스트로 추출
html =response.text
#text형태의 html로 원하는 값만 검색
soup = BeautifulSoup(html, 'html.parser')
#결과가 리스트로 조회됨_select(css 속성)
links = soup.select(".news_tit")
#여러 기사의 제목과 링크를 출력
for link in links:
    title = link.text #태그안에 텍스트요소 가져옴
    url = link.attrs['href'] #href의 속성값을 가져옴
    print(title, url)

왜 에러가 나는건가...

이때 파일명을 pyautogui.py로 했는데 import명과 달라야한다는 글을 보고

다른이름으로 변경하여 해결!

이름변경 후 실행하니 팝업창이 뜨고 카카오라고 입력 후 OK

뉴스기사 추출 완료

 

Q2) 원하는 페이지까지 크롤링
   - 반복문사용하기

     for i in range(시작, 끝, 단계)

     ex) for i in range(1,10,2) :  1부터 10까지사이의 숫자가 2씩증가하므로 range의 결과값은 1,3,5,7,9

 

페이지 변경 시 url에서 파라미터가 어떻게 변하는지 분석하고

for문 사용하여 소스 완성 (tab 들여쓰기 지켜야함)

import requests
from bs4 import BeautifulSoup
import pyautogui

#1페이지 : https://search.naver.com/search.naver?where=news&sm=tab_pge&query=%EC%82%BC%EC%84%B1%EC%A0%84%EC%9E%90&sort=0&photo=0&field=0&pd=0&ds=&de=&cluster_rank=79&mynews=0&office_type=0&office_section_code=0&news_office_checked=&nso=so:r,p:all,a:all&start=1
#2페이지 : https://search.naver.com/search.naver?where=news&sm=tab_pge&query=%EC%82%BC%EC%84%B1%EC%A0%84%EC%9E%90&sort=0&photo=0&field=0&pd=0&ds=&de=&cluster_rank=34&mynews=0&office_type=0&office_section_code=0&news_office_checked=&nso=so:r,p:all,a:all&start=11
#3페이지 : https://search.naver.com/search.naver?where=news&sm=tab_pge&query=%EC%82%BC%EC%84%B1%EC%A0%84%EC%9E%90&sort=0&photo=0&field=0&pd=0&ds=&de=&cluster_rank=50&mynews=0&office_type=0&office_section_code=0&news_office_checked=&nso=so:r,p:all,a:all&start=21
#4페이지 : https://search.naver.com/search.naver?where=news&sm=tab_pge&query=%EC%82%BC%EC%84%B1%EC%A0%84%EC%9E%90&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=31
#start값이 변경됨을 확인(10단위로 증가)_페이지번호일것이다...

keyword = pyautogui.prompt("검색어를 입력하세요.")
pageNum = 1 #페이지number 표기를 위한 변수
#검색한 화면의 url복사해서 붙여넣기
#해당 url에서 query="값" 에서 값부분을 입력받게 변경하기
#f-문자열(string) 포맷팅 - 문자열앞에 f , 변수가 들어가는 부분 {}
#for문 실행
for i in range(1,30,10): #range결과(i는 start변수값) : 1,11,21
    print(f"{pageNum}페이지입니다.================================")
    response = requests.get(f"https://search.naver.com/search.naver?where=news&sm=tab_jum&query={keyword}&start={i}")
    #응답값을 텍스트로 추출
    html =response.text
    #text형태의 html로 원하는 값만 검색
    soup = BeautifulSoup(html, 'html.parser')
    #결과가 리스트로 조회됨_select(css 속성)
    links = soup.select(".news_tit")
    #여러 기사의 제목과 링크를 출력
    for link in links:
        title = link.text #태그안에 텍스트요소 가져옴
        url = link.attrs['href'] #href의 속성값을 가져옴
        print(title, url)
pageNum = pageNum +1

 

실행하면 입력팝업창 뜨고 삼성전자 입력 후 OK

크롤링 성공! 

+ Recent posts