
크롤링한 두개의 카테고리 중 실시간 랭킹부분을 따로 파이선으로 작업해 디비저장을 했습니다. 겟과 포스트 둘다 크롤링 했으나 되지않습니다.
현재 인덱스에서는 겟으로 받고있습니다.
또한 크롤링한 정보가 순위표인데 실시간순위가 반영되지않아 랭킹 파이선파일을 실행할때마다 데이터가 쌓여 랭킹테이블에 데이터만큼 붙어 디비에 전의 정보를 일일이 다 삭제해야합니다.
본문에는 메인파이선파일 올립니다. 댓글에 랭킹 크롤링 파이선 파일과 인덱스파일 올리겠습니다.
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)
