커뮤니티
포인트
쿠폰
내 강의실
국비 신청 내역
증명서
계정
로그아웃
학습 질문
개발 일지
나의 활동
답변 완료
크롤링 한 2개의 챕터를 각각 DB저장을 달리하여 2개의 파이선파일로 저장하여 인덱스로 묶어 처리하였습니다. 하나로 다시 합치니되지않아 문의남깁니다.
undefined주차
북마크
임*희
댓글
2
추천
0
조회수
10
조회수
10
답변 완료

크롤링한 두개의 카테고리 중 실시간 랭킹부분을 따로 파이선으로 작업해 디비저장을 했습니다. 겟과 포스트 둘다 크롤링 했으나 되지않습니다.

현재 인덱스에서는 겟으로 받고있습니다.

또한 크롤링한 정보가 순위표인데 실시간순위가 반영되지않아 랭킹 파이선파일을 실행할때마다 데이터가 쌓여 랭킹테이블에 데이터만큼 붙어 디비에 전의 정보를 일일이 다 삭제해야합니다.

본문에는 메인파이선파일 올립니다. 댓글에 랭킹 크롤링 파이선 파일과 인덱스파일 올리겠습니다.

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
댓글 알림
나의얼굴