inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

게시판만들기 - 글 리스트

google.py 데이터가 안생깁니다.

285

가후

작성한 질문수 90

1

3시간 가까이. 고민하고 찾아보고 해도 도저히 해결방법을 못찾겠습니다..

디비를 못넣으면 수업진도를 나갈수가 없으니, 괴롭네요 

문제점이 무엇인지 알려주시면 정말 감사하겠습니다.

---아래는 코드-----

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


# 몽고DB
client = MongoClient(host="localhost"port=27017)
# myweb 데이터베이스
db = client.myweb
# board 컬렉션
col = db.board

# 구글 검색시 헤더값을 설저하지 않으면 브라우저에서 보이는것과 다른 결과가 나옴
header = {
    "user-agent""Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Mobile Safari/537.36"}

# 검색 결과의 5페이지까지만 수집
for i in range(6):
    # 구글 검색 URL, 검색어는 파이썬
    url = "https://www.google.com/search?q={}&start={}".format("파이썬", i * 10)
    # url 접속
    r = requests.get(url, headers=header)

    # 웹페이지의 검색 결과를 파싱하기 위한 준비
    # lxml 라이브러리 사용(설치 요망)
    bs = BeautifulSoup(r.text, "lxml")

    # 검색 결과는 div 태그의 g 클래스 단위로 반복됨
    lists = bs.select("div.CAEQAA")

    # 검색결과 루프
    for l in lists:
        # 게시물 작성시간 기록을 위해 현재시간 저장 (utc 타임)
        current_utc_time = round(datetime.utcnow().timestamp() * 1000)

        try:
            # 검색 결과의 제목은 h3 태그의 LC20lb 클래스에 있음
            title = l.select_one("div.V7Sr0.p5AXld.PpBGzd.YcUVQe").text

        # 검색결과의 요약내용은 div 태그의 s 클래스에 있음
            contents = l.select_one("div.MUxGbd.yDYNvb").text

        # 몽고DB에 저장
        # 작성자와 writer_id 설정 필요
            col.insert_one({
                "name""테스터",
                "title": title,
                "contents": contents,
                "view"0,
                "pubdate": current_utc_time
            })
        except:
            pass

python

답변 1

0

남박사

구글 검색 결과 출력 구조가 변경되어 동작을 안하는것 같습니다. 이런 문제는 크롤링에 대한 기술이 조금 필요하나 해당 강좌는 웹사이트 제작 강좌이므로 그런 디테일한 부분에 대해서는 설명하지 않았습니다만.. 아래 코드를 확인하시어 테스트 해보시기 바랍니다.

import requests

from bs4 import BeautifulSoup

from pymongo import MongoClient

from datetime import datetime




# 몽고DB
client = MongoClient(host="localhost", port=27017)
# myweb 데이터베이스
db = client.myweb
# board 컬렉션
col = db.board

# 구글 검색시 헤더값을 설저하지 않으면 브라우저에서 보이는것과 다른 결과가 나옴
header = {
    "user-agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Mobile Safari/537.36"}

# 검색 결과의 5페이지까지만 수집
for i in range(1):
    # 구글 검색 URL, 검색어는 파이썬
    url = "https://www.google.com/search?q={}&start={}".format("파이썬", i * 10)
    # url 접속
    r = requests.get(url, headers=header)
    # print(url)    # 실제 접속되는 URL
    # print(r.text)

    # 실제 어떤 내용이 넘어왔는지 print 로 내용이 짤리던가 알아보기 힘드므로
    # 좀 더 디테일하게 분석하기 위해 파일에 직접 저장
    # f = open("c":\\google_test.txt", 'w', encoding="utf-8")
    # f.write(r.text)
    # f.close()

    # 웹페이지의 검색 결과를 파싱하기 위한 준비
    # lxml 라이브러리 사용(설치 요망)
    bs = BeautifulSoup(r.text, "lxml")

    # 검색 결과는 div 태그의 g 클래스 단위로 반복됨
    # !!!!!!!!!!!!!!!!!!! 변경된 부분!!!!!!!!!!!!!!
    lists = bs.select("div.mnr-c.xpd")

    # 검색결과 루프
    for l in lists:
        # print(l)  어떤 내용이 반복되는지 확인하기 위해 화면 출력 해봄
        # 게시물 작성시간 기록을 위해 현재시간 저장 (utc 타임)
        current_utc_time = round(datetime.utcnow().timestamp() * 1000)

        try:
            # 검색 결과의 제목은 h3 태그의 LC20lb 클래스에 있음
            title = l.select_one("div.V7Sr0.p5AXld.PpBGzd.YcUVQe").text
            # 검색결과의 요약내용은 div 태그의 s 클래스에 있음
            contents = l.select_one("div.MUxGbd.yDYNvb").text
            print(title, contents)            # 화면 출력해봄

            # 몽고DB에 저장
            # 작성자와 writer_id 설정 필요
            col.insert_one({
                "name": "테스터",
                "title": title,
                "contents": contents,
                "view": 0,
                "pubdate": current_utc_time
            })
        except:
            pass

iis 접속후 자동으로 로그인 창이 나오도록 설정이 기능한가요?

0

63

2

리스트 이동 시 창 에러 발생

0

73

1

배포후 회원 등록 후 로그인 에러...

0

72

2

내부 서버 오류

0

66

2

app.config["MONGO_URI"] = "mongodb://localhost:27017/pm_db"

0

53

2

DB 검색하면 데이터가 없습니다. 라고 나와요. 5시간을 찾아봐도 모르겠어서 문의드려봅니다.

0

44

1

몽고db studio3T를 깔았는데

0

57

2

flake8과 linter

0

72

3

500이 뜹니다.

0

57

2

첨부파일 삭제

0

66

2

검색기능 질문

0

61

2

google.py

0

66

2

Studio 3T에 DB insert가 되지 않는 문제를 해결하지 못하고 있습니다 ㅠ

0

81

3

혹시 전체 코드 공개되어 있나요?

0

95

1

join.html 의 form 태그값 을 member_join() 에서 처리못함.

0

102

1

google.py 몽고db 샘플데이터 만들기

0

99

2

flake8 설치 이후 명령팔레트에서 linter가 안보입니다.

0

236

2

파이썬으로 만들어서 웹호스팅에 올릴경우

0

303

1

현재 구글검색 무한스크롤변경 문의합니다

0

296

1

몽고디비아틀라스로 추가 공부해서 올립니다.

0

217

1

IIS 500.19에러

0

654

2

버전 문제도 수정했는데 결과가 안나옵니다.

0

256

1

데이터베이스 저장관련 질문입니다.

0

269

1

test가 생기지 않습니다.

0

503

3