인프런 커뮤니티 질문&답변

형욱박님의 프로필 이미지
형욱박

작성한 질문수

남박사의 파이썬으로 실전 웹사이트 만들기

게시판만들기 - 글 리스트

google.py 작성 후 board db에 데이터가 안 생깁니다.

작성

·

282

1

맥북 카탈리나를 사용하고 있고 db admin에 id/pw가 설정되어 있어 아래와 같이 google.py를 작성했습니다. 

import requests
from bs4 import BeautifulSoup
from pymongo import MongoClient
from datetime import datetime

client = MongoClient("mongodb://joseph:0430@localhost:27017/admin") #flask pymongo가 아니라 pymongo를 직접 사용 host="localhost", port=27017
db = client.myweb
col = db.board # 이렇게 db에 접근을 한다.

header = {"user-agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Mobile Safari/537.36"}
for i in range(5): #5페이지 정도 결과 반복
url = "https://www.google.com/search?q={}&start={}".format("파이썬", i * 10) # 문자열을 포매팅, 검색어와 페이징을 가져옴
r = requests.get(url, headers=header)
bs = BeautifulSoup(r.text, "lxml")
lists = bs.select("div.g")

for l in lists:
current_utc_time = round(datetime.utcnow().timestamp() * 1000)

try:
title = l.select_one("h3.LC20lb").text
contents = l.select_one("div.s").text
col.insert_one({
"name": "테스트",
"title": title,
"contents": contents,
"view": 0,
"pupdate": current_utc_time
})
except:
pass

이렇게 하니 아래처럼 DB에 데이터가 쌓이지 않아 문의 드립니다. 

왜 데이터가 들어가지 않을까요?? 

client = MongoClient("mongodb://joseph:0430@localhost:27017/admin")

이걸 MongoClient(host="localhost", port=27017) 이렇게 해도 안됩니다...ㅜㅜ

알려주세요~!!

답변 4

4

혹시 다른 분들도 같은 현상을 겪으실까봐 댓글남깁니다.
저의 경우에는
try:
    title = l.select_one(이부분).text
    contents = l.select_one(이부분).text
에서 이부분(클래스이름)이 실제 구글 f12(검사)에서 보이는 클래스 이름과 달라서 데이터를 못찾아 쌓이지 않았습니다.

영상을 만들 당시와 제가 공부하던 시기가 달라 영상과 그대로 적용해서는 안되었던 것 같습니다.
ps. title = l.select_one("h3.LC20lb.DKV0Md").text
div 사이에 . 을 꼭 넣어주셔야 합니다.
LC20lb.DKV0Md

0

12.28일 추가합니다

h3.LC20lb.DKV0Md 하위에 span이 존재하여 

("h3.LC20lb.DKV0Md > span") 로 하위 텍스트를 읽어야 DB에 저장됩니다.

0

hyunbaek1159님 의견에 더하여,
contents = l.select_one("div.IsZvec").text
<- content도 바뀐듯 합니다.

0

남박사님의 프로필 이미지
남박사
지식공유자

일단 try except 를 제거하고 어떤 오류가 나는지 확인해보시기 바랍니다. try 문은 코드가 100% 확실할때 사용하는걸 추천합니다.  그리고 코드를 단순화 하여 접속 후 아무 기능없이 그냥 아무 데이터나 db.insert 되는지 먼저 확인해보시는게 좋습니다. 이런식으로 코드를 단순화해서 어디서 어떤 문제가 발생하는지를 유추하실 수 있어야 차후에 코드가 커졌을때도 오류를 찾아낼 수 있습니다.

import requests
from bs4 import BeautifulSoup
from pymongo import MongoClient
from datetime import datetime

client = MongoClient("mongodb://joseph:0430@localhost:27017/admin") #flask pymongo가 아니라 pymongo를 직접 사용 host="localhost", port=27017
db = client.myweb
col = db.board # 이렇게 db에 접근을 한다. 
col.insert_one({
	"name": "테스트"
})

이런식으로 코드를 최소화하여 데이터가 정상적으로 저장되는지부터 확인해보셔야 할듯 합니다. 그리고 인증의 문제라면 파이몽고 버전에 따라 db에 아이디 비번이 걸렸을시 동작하는게 좀 달랐던 기억이 있습니다. authenticate() 함수를 사용한적도 있고.. 구글링을 하여 여러가지 테스트를 해보셔야 할듯 합니다.

형욱박님의 프로필 이미지
형욱박

작성한 질문수

질문하기