크롤링 보충(1)

류소리·2022년 10월 27일
0

크롤링

목록 보기
2/5

https://colab.research.google.com/drive/1_c-iTBL4j5OpBQL9j7zwHyBKEMKdf6Ou#scrollTo=__GwirqEvPX9

☆초기 크롤링 정리

## from urllib import request, 안막힘, 네이버

# (1)
# url을 불러온다. request() 함수
from urllib import request
from bs4 import BeautifulSoup

# (2)
# 창의 주소를 복사한다. 저장한다.
url="주소이름"

# (3)
# request로 주소속 모든 내용 읽는다.
# .urlopen 사용한다.
html = request.urlopen(url).read()

# (4)
# BeautifulSoup 사용, 틈틈히 한글이보인다.
# 글자를 이쁘게 만들어 주는 함수: BeautifulSoup
soup=BeautifulSoup(html,"html.parser")

#(5)
# 검색 메인 타이틀 1개만 보여준다. 
soup.find_all("title")
#-> ex:[<title>우크라이나 : 네이버 뉴스검색</title>]

#(6)
# 뉴스제목 -> f12-> 제목은 class 뒤에임. 제목을 찾아준다. 
title= soup.find_all(class_ ="news_tit")
# -> ex:class="news_tit"

# 첫번째 뉴스 제목만 나옴 
#.text하면 글자만 나온다.
title[0].text 
# -> ex: EU, '500조 투입' 우크라이나 재건 '마셜 플랜' 촉구

# (7)
# title의 전체 글자만 나온다.
[title[i].text for i in range(len(title))] 

# (8)
# href : 속성이다.
[print(i.text,":",i.attrs["href"]) for i in title]


# title의 전체 글자만 나온다.
# for i in range(len(title)):
#     print( title [i].text)

# href : 속성이다.
# for i in title:
#     print(i.text,":",i.attrs["href"])   

#(1)
urllib

  • 파이썬에서 인터넷 데이터를 받아 오는 기능들이 들어있는 라이브러리
  • 데이터를 받아오는 것을 크롤링(crawling)
  • URL를 다루는 모듈
  • 파이썬에 기본적으로 내장되어 있는 모듈임
  • from urllib.request import urlopen
    -import urllib.request as req

#(4)
BeautifulSoup

  • 데이터를 추출하는데 필요한 기능이 들어 있는 라이브러리, 파싱(parsing)라이브러리 라고도 한다.
  • 파싱은 받아온 데이터에서 필요한 내용만 추출하는 것을 의미한다.
  • from bs4 import BeautifulSoup
  • 파이썬에 기본으로 들어 있는 html.parser로 HTML를 파씽합니다.

#(8)
attrs["href"]

  • attrs : 속성값 모두 출력
  • 속성값 중 'href' 값 출력

☆접속 막히면, 크롤링 정리

## import requests 사용시, 막혔을때 header 사용.

# (1)
# url을 불러온다. request() 함수
from urllib import request
from bs4 import BeautifulSoup
import requests 

# (2)
# 창의 주소를 복사한다. 저장한다.
url="https://search.daum.net/search?w=news&nil_search=btn&DA=NTB&enc=utf8&cluster=y&cluster_page=1&q=bts"

# (3)
# 크롤링 하다 막혔을 때의 header 검색. 
#user agent검색-> 나의 주소 확인 -> header로 입력
header = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/-----------"}

# (4)
# 다음은 막아나서 import requests 하고 get를 사용해야 한다.
# 직접 파라미터 넣어서 보내기
html = requests.get(url, headers=header)

# (5)
# BeautifulSoup 사용, 틈틈히 한글이보인다.
# 글자를 이쁘게 만들어 주는 함수: BeautifulSoup
# requests를 사용시 html.text로 작성해야한다.
soup=BeautifulSoup(html.text, 'html.parser')

# (6)
# 뉴스제목 -> f12-> 제목은 class 뒤에임. 제목을 찾아준다. 
title= soup.find_all(class_ ="tit_main fn_tit_u")

title[0].text 

#(4)
requests
-HTTP/1.1 요청를 보낼 수 있음
-요청 내용에 헤더, 폼 데이터, multipart 파일과 parameter를 포함해서 보낼 수 있음

※ urlib 모듈로 접근하면 서버 로그에 urllib로 접속한다는 정보가 고스란히 남게 되고 또한 자주 접근하는 패턴으로 차단될 리스크가 있습니다.
※ requests 모듈은 headers에 추가 정보를 담아서 보낼 수 있어서 크롬이나 파이어폭스 브라우저가 보내는 정보를 담아서 보낼 수 있어 차단될 가능성이 적어 requests 모듈을 사용할 것을 추천합니다.


☆검색 기능 추가

## 네이버 검색기능추가하기

#(1)
url2 = input("검색어를 입력해 주세요:  ")

#(2)
for j in range(1,3):
    url1 = "https://search.naver.com/search.naver?where=news&sm=tab_pge&query="
    url3 = "&start="
    url = url1+url2+url3+str(j)

    #(3)
    html = requests.get(url)
    soup=BeautifulSoup(html.text, 'html.parser')
    title= soup.find_all(class_ ="news_tit")
    
    #(4)
    for i in title:
        print(i.text,":",i.attrs["href"])
    
    #(5)
    print(f"{j}페이지입니다.")
    print("--"*50)
    print( ) 

참조&출처:

profile
새싹 빅테이터 개발자

0개의 댓글