backend/데이터분석

project01. dios 구글 크롤링/ 11.19

seul chan 2016. 11. 19. 04:55

dios 관련 크롤링


*구현하고자 하는 기능

def google_search(keyword, n):


-11.19

=>해당 페이지까지의 제목 뽑아서 text로 저장하는 기능까지 구현하는 def 만들기 /11.19까지 / 완료!, Crawling/Google 폴더에 저장

*검색어를 입력할 때 whitespace(띄어쓰기)를 %20으로 처리하는 함수도 넣어줘야함; 일단은 그냥 whitespace로 들어가도 제대로 반응함/

+ 더 해야할일

*vim으로 파일을 만들어서 실행시킬수 있게(jupyter 말고도)완료

*이를 서버로 돌리는 방법

*제목 말고 다른것들 추출하는 방법 (+추후에 이를 alarm/ email로 보내는 방법까지도... -selenium?)

-------------------------

# 11.19 완료된 코드


import requests

from bs4 import BeautifulSoup

import datetime


now = datetime.datetime.now()

nowdate_time = now.strftime("%m-%d %H:%M")

 

GOOGLE_SEARCH_URL = "https://www.google.co.kr/search?q={keyword}&biw=1736&bih=860&ei=qzYvWLeTF4mm0gT2qbj4DQ&start={page_num}&sa=N"

keyword = input("키워드를 입력하세요:")

n = int(input("찾고자 하는 페이지 숫자를 입력하세요:" ))


with open("../../../../바탕화면/크롤링/GOOGLE/GOOGLE_{keyword}.txt".format(keyword=keyword),"a") as f:

    f.write(nowdate_time+"\n")

    for i in range(n):

        URL = GOOGLE_SEARCH_URL.format(keyword=keyword,page_num=(i-1)*10)

        response = requests.get(URL)

        dom = BeautifulSoup(response.text, "html.parser")


        css_selector = "h3.r a" # 제목 뽑아내는 selector

        for i in dom.select(css_selector):

            f.write(i.text+"\n")


-----------------------------------




=> 키워드에 대한 n번째 페이지까지 구글 검색 크롤링

• 시간; 현재 크롤링을 시행한 시간.

• 제목; 각 글에 대한 제목 크롤

• 내용; 각 글에서 보이는 내용만 크롤

• 날짜; 글이 써진 날짜

• url; 각 글의 url 크롤링

=> 1차 완료된 자료를 google_search_{keyword}{date}.text 로 내보내기

*추가적으로 구현하고자 하는 기능

-크롤링한 데이터 중 원하는 키워드를 가진 url로 들어가서 내용 긁어오기


=> 데이터 크롤링을 서버 컴퓨터로 특정 시간에 진행시키


*url

https://www.google.co.kr/search?q={검색어}espv=2&biw=1736&bih=860&ei=qzYvWLeTF4mm0gT2qbj4DQ&start={page_num}&sa=N

검색어 => 검색어 (whitespace: %20)

page_num: (n-1)*10

$ GOOGLE_SEARCH_URL.format(keyword=keyword,page_num=(n-1)*10)

#구글url format하는 코드



2페이지

https://www.google.co.kr/search?q={검색어}&ei=ajYvWKSEO4Hd0gSN967wCg&start=10&sa=N&biw=1736&bih=860

3페이지

https://www.google.co.kr/search?q={검색어}&espv=2&biw=1736&bih=860&ei=izYvWNuhDsWk0ASk75DIAg&start=20&sa=N

4페이지

https://www.google.co.kr/search?q={검색어}espv=2&biw=1736&bih=860&ei=qzYvWLeTF4mm0gT2qbj4DQ&start=50&sa=N

=> 페이지는 start={10, 20, 30} 그렇다면 첫번째 페이지는? 0

start=0: 1페이지 ... 

start=(n-1)*10 : n페이지

=> url

https://www.google.co.kr/search?q={검색어}espv=2&biw=1736&bih=860&ei=qzYvWLeTF4mm0gT2qbj4DQ&start={page_num}&sa=N

검색어 => 검색어 (whitespace: %20)

page_num: (n-1)*10


*구현하고자