커뮤니티
포인트
쿠폰
내 강의실
국비 신청 내역
증명서
계정
로그아웃
학습 질문
개발 일지
나의 활동
답변 완료
app.py에 2챕터의 크롤링한 정보가 DB 넣어지지않습니다.
undefined주차
북마크
임*희
댓글
6
추천
0
조회수
44
조회수
44
답변 완료

크롤링 파이선 작업시 DB저장 카테고리가 2개인데 하나는 되는데 나머지가 되지않아 그부분만 다른 파이선으로 작업하여 DB저장했습니다.

파이선파일이 하나로 합치면 디비저장이 되지않습니다. 현재 인덱스는 겟으로 받는 상황인데 아래부분 겟으로도 수정했지만 되지않아

일단 작업중인 현재 코드로 남기겠습니다.


또한 랭킹정보에 대한 크롤링인데 파이선 실행을 누를 때마다 데이터가 계속 쌓입니다.

그럼 인덱스 화면에 데이터가 쌓인만큼 랭킹테이블이 추가가되서 실행 누르기전 디비에서 이전정보를 일일히 삭제해야합니다.

실시간으로 크롤링한 정보를 화면에 띄울수없나요?~


본문에 첨부한 것은 app.py메인 파일입니다. 여기서 크롤링 작업을 하였으나 인지하지못해

다른 파이선파일을 만들었습니다. 다른파이선파일은 댓글로 코드남기겠습니다!

from flask import Flask, render_template, request, jsonify
app = Flask(__name__)

import requests
from bs4 import BeautifulSoup

from pymongo import MongoClient
import certifi
ca = certifi.where();
client = MongoClient('mongodb+srv://hoisohee:dladnrgus77@cluster0.yfexp.mongodb.net/Cluster0?retryWrites=true&w=majority', tlsCAFile=ca)
db = client.dbsparta


@app.route('/')
def home():
    return render_template('index.html')

@app.route("/bsnews", methods=["POST"])
def news_post():
    url_receive = request.form['url_give']
    comment_receive = request.form['comment_give']

    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
    data = requests.get(url_receive, headers=headers)

    soup = BeautifulSoup(data.text, 'html.parser')

    title = soup.select_one('meta[property="og:title"]')['content']
    image = soup.select_one('meta[property="og:image"]')['content']
    desc = soup.select_one('meta[property="og:description"]')['content']

    doc = {
        'title': title,
        'image': image,
        'desc': desc,
        'comment':comment_receive
    }

    db.bsnews.insert_one(doc)

    return jsonify({'msg':'저장완료!'})

@app.route("/bsnewsrank", methods=["POST"])
def news_postrank():
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
    data = requests.get('https://www.koreabaseball.com/TeamRank/TeamRank.aspx', headers=headers)

    soup = BeautifulSoup(data.text, 'html.parser')

    rank = soup.select('#cphContents_cphContents_cphContents_udpRecord > table > tbody ')
    print("rank : ", rank)
    for ranks in rank:
        teamrank = ranks.select_one('tr:nth-child(1) > td:nth-child(1)').text
        teamtitle = ranks.select_one('td:nth-child(2)').text
        teampoint = ranks.select_one(' td:nth-child(7)').text
        teamgame = ranks.select_one('td:nth-child(8)').text

        doc = {
            'teamrank': teamrank,
            'teamtitle': teamtitle,
            'teamgame': teamgame,
            'teampoint': teampoint
        }
        print("doc:" , doc)
        db.bsrank.insert_one(doc)


    rank_list = list(db.bsrank.find({}, {'_id': False}))
    print("rank_list:", rank_list)


    return jsonify({'msg': '저장완료!'})


@app.route("/bsnews", methods=["GET"])
def news_get():
    sport_list = list(db.bsnews.find({}, {'_id': False}))
    return jsonify({'bsnews':sport_list})

@app.route("/bsnewsrank", methods=["GET"])
def newsrank_get():



        rank_list = list(db.bsrank.find({}, {'_id': False}))
        print("rank_list",rank_list)
        return jsonify({'bsnewsrank': rank_list})




if __name__ == '__main__':
    app.run('0.0.0.0', port=5000, debug=True)

취소
 공유
취소
댓글 0
댓글 알림
나의얼굴