TIL,WIL(일간,주간 회고)

2022. 12. 05 TIL 파이썬Flask app.py에서 바로 클라이언로 뿌려주기

worldint 2022. 12. 6. 01:48

-문제점:

웹개발종합반 과정에서 항상디비에 넣어줬다가 그걸 get방식으로 받아오는 식으로 했었는데

간단한 크롤링을 디비에 안넣어줘도 될꺼같다.

 

-해결방밥:

아래의 코드를 보면 BeautifulSoup패키지로 크롤링을한뒤 doc딕셔너리 안에 넣어주고

원래는 doc를 DB에 넣어주었는데 그냥 리스트로 만들어서 바로 보내줄수도있다.

그래서 news_list[]를 for문 밖에서 만들어주고 append()를 써서 리스트에 딕셔너리를 한덩어리씩 넣어주는 코드이다

@app.route('/tech',methods=['GET'])
def tech_get():
    url = 'https://news.naver.com/main/main.naver?mode=LSD&mid=shm&sid1=105'
    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, headers=headers)
    soup = BeautifulSoup(data.text, 'html.parser')

    tech = soup.select('#main_content > div > div._persist > div:nth-child(1) > div')
 	news_list=[]
    for report in tech:
        r = report.select_one('div.cluster_body > ul > li')
        if report is not None:
            title = r.select_one('div.cluster_text > a').text
            link = r.select_one('div.cluster_text > a')['href']
            image = r.select_one('div.cluster_thumb > div > a').img['src']
            lede = r.select_one('div.cluster_text > div.cluster_text_lede').text
            doc = {'title':title,
                   'link':link,
                   'image':image,
                   'lede':lede
                   }
			news_list.append(doc)


    return jsonify({"msg": "get완료",'news_list':news_list})